diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c3f6353 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..ee63846 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +*.cjs/ diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..edc76f3 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,8 @@ +module.exports = { + extends: ['eslint-config-salesforce-typescript', 'plugin:sf-plugin/recommended'], + ignorePatterns: ['*.cjs'], + root: true, + rules: { + header: 'off' + } +}; diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index fb2fd2a..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -module.exports = { - "env": { - "es6": true, - "node": true - }, - "extends": [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'plugin:prettier/recommended', - "prettier" - ], - "ignorePatterns": [ - "**/node_modules/**", - "**/dist/**", - "**/lib/**", - "**/reports/**" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": "tsconfig.json", - "sourceType": "module" - }, - "plugins": [ - "eslint-plugin-import", - "eslint-plugin-jsdoc", - "eslint-plugin-prefer-arrow", - "eslint-plugin-unicorn", - "eslint-plugin-react", - "prettier", - "@typescript-eslint" - ], - "rules": { - "prettier/prettier": "warn", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-explicit-any": "off", - "no-unused-vars": "off" - } -}; diff --git a/.github/workflows/prettier.yml b/.github/workflows/format-check.yml similarity index 92% rename from .github/workflows/prettier.yml rename to .github/workflows/format-check.yml index cce62c5..3040d9c 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/format-check.yml @@ -14,4 +14,4 @@ jobs: with: node-version: ${{ matrix.node }} - run: yarn install - - run: yarn prettier:verify \ No newline at end of file + - run: yarn format:check \ No newline at end of file diff --git a/.gitignore b/.gitignore index d7682cf..88d34c7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,48 @@ -# Logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -junit.xml +# -- CLEAN +tmp/ +# use yarn by default, so ignore npm +package-lock.json -# Dependency directories -node_modules/ +# debug logs +npm-error.log +yarn-error.log -# Build directories -lib/ -dist/ -virtual-modules/ -.localdevserver +junit.xml +npm-shrinkwrap.json +oclif.manifest.json +oclif.lock -# config -.env* +# compile source +dist -# tests -reports -errorShots +# test artifacts +*xunit.xml +*checkstyle.xml +*unitcoverage +.nyc_output coverage -autoreloadtestingcopy +test_session* + +# generated docs +docs -# Stores custom attributes of its containing folder, such as the position of icons or the choice of a background image +# ignore sfdx-trust files +*.tgz +*.sig +package.json.bak. + +# os specific files .DS_Store +.idea -# Don't watch git for publishing to npm -.git +# -- CLEAN ALL +*.tsbuildinfo +.eslintcache +.wireit -# oclif -tmp/ -oclif.manifest.json +# -- +# ********************************************************* +# NOTE: put files here you don't want cleaned with sf-clean +# ********************************************************* + +node_modules diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..c8e9f1d --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn commitlint --edit diff --git a/.husky/pre-commit b/.husky/pre-commit index 449fcde..4fbfe02 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -npm test +yarn lint && yarn pretty-quick --staged diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100755 index 0000000..56b63c3 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn build && yarn test diff --git a/.lintstagedrc.cjs b/.lintstagedrc.cjs new file mode 100644 index 0000000..9a99d41 --- /dev/null +++ b/.lintstagedrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + '**/*.{js,json,md}?(x)': () => 'npm run reformat', +}; diff --git a/.mocharc.json b/.mocharc.json new file mode 100644 index 0000000..8311bd3 --- /dev/null +++ b/.mocharc.json @@ -0,0 +1,8 @@ +{ + "require": ["ts-node/register"], + "watch-extensions": "ts", + "recursive": true, + "reporter": "spec", + "timeout": 600000, + "node-option": ["loader=ts-node/esm"] +} diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..0453efc --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmjs.org \ No newline at end of file diff --git a/.nycrc b/.nycrc new file mode 100644 index 0000000..8cc401b --- /dev/null +++ b/.nycrc @@ -0,0 +1,7 @@ +{ + "check-coverage": true, + "lines": 75, + "statements": 75, + "functions": 75, + "branches": 75 +} diff --git a/.prettierrc.json b/.prettierrc.json index 0790424..e1131c3 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,15 +1,17 @@ { - "endOfLine":"auto", - "useTabs": false, - "tabWidth": 4, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 80, - "htmlWhitespaceSensitivity": "ignore", - "overrides": [ - { - "files": "*.html", - "options": { "parser": "lwc" } - } - ] -} + "endOfLine": "auto", + "useTabs": false, + "tabWidth": 4, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 120, + "htmlWhitespaceSensitivity": "ignore", + "overrides": [ + { + "files": "*.html", + "options": { + "parser": "lwc" + } + } + ] +} \ No newline at end of file diff --git a/.sfdevrc.json b/.sfdevrc.json new file mode 100644 index 0000000..aab27b4 --- /dev/null +++ b/.sfdevrc.json @@ -0,0 +1,10 @@ +{ + "test": { + "testsPath": "test/unit/**/*.test.ts" + }, + "wireit": { + "test": { + "dependencies": ["test:compile", "test:only", "lint"] + } + } +} diff --git a/.vscode/launch.json b/.vscode/launch.json index 2caaf22..aed396d 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,50 +1,61 @@ { + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { + "type": "node", + "request": "attach", + "name": "Attach", + "port": 9229, + "skipFiles": ["/**"] + }, + { + "name": "Run All Unit Tests", "type": "node", "request": "launch", - "name": "Setup - iOS", - "program": "${workspaceFolder}/bin/run", - "args": [ - "force:lightning:local:setup", - "-p", - "iOS" - ], - "console": "integratedTerminal" + "program": "${workspaceFolder}/node_modules/mocha/bin/mocha", + "args": ["--inspect", "--colors", "test/unit/**/*.test.ts"], + "env": { + "NODE_ENV": "development", + "SFDX_ENV": "development" + }, + "sourceMaps": true, + "smartStep": true, + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "Compile tests" }, { "type": "node", "request": "launch", - "name": "Setup - Android", - "program": "${workspaceFolder}/bin/run", - "args": [ - "force:lightning:local:setup", - "-p", - "android" - ], - "console": "integratedTerminal" + "name": "Run Current Test", + "program": "${workspaceFolder}/node_modules/mocha/bin/mocha", + "args": ["--inspect", "--colors", "${file}"], + "env": { + "NODE_ENV": "development", + "SFDX_ENV": "development" + }, + "sourceMaps": true, + "smartStep": true, + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "Compile tests" }, { - "name": "ts-node", "type": "node", "request": "launch", - "args": ["${relativeFile}"], - "runtimeArgs": ["-r", "ts-node/register"], - "cwd": "${workspaceRoot}", - "protocol": "inspector", - "internalConsoleOptions": "openOnSessionStart" + "name": "Setup - iOS", + "console": "integratedTerminal", + "program": "${workspaceFolder}/bin/run", + "args": ["force:lightning:local:setup", "-p", "ios"] }, { "type": "node", - "name": "vscode-jest-tests", "request": "launch", - "args": ["--runInBand"], - "cwd": "${workspaceFolder}", + "name": "Setup - Android", "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "disableOptimisticBPs": true, - "program": "${workspaceFolder}/node_modules/jest/bin/jest" + "program": "${workspaceFolder}/bin/run", + "args": ["force:lightning:local:setup", "-p", "android"] } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100755 index 0000000..2a07226 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "files.exclude": { + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true + }, + "search.exclude": { + "**/dist": true, + "**/bin": true + }, + "editor.tabSize": 4, + "editor.formatOnSave": true, + "rewrap.wrappingColumn": 120 +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 22f5739..f7c75ea 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,17 +1,20 @@ { - "version": "2.0.0", - "tasks": [ - { - "type": "typescript", - "tsconfig": "tsconfig.json", - "problemMatcher": [ - "$tsc" - ], - "group": { - "kind": "build", - "isDefault": true - }, - "label": "tsc: build - tsconfig.json" - } - ] -} \ No newline at end of file + "version": "2.0.0", + "problemMatcher": "$tsc", + "tasks": [ + { + "label": "Compile tests", + "group": { + "kind": "build", + "isDefault": true + }, + "command": "yarn", + "type": "shell", + "presentation": { + "focus": false, + "panel": "dedicated" + }, + "isBackground": false + } + ] +} diff --git a/.yarnrc b/.yarnrc index 9bc2065..d263b35 100644 --- a/.yarnrc +++ b/.yarnrc @@ -1 +1 @@ -network-timeout 600000 \ No newline at end of file +registry=https://registry.yarnpkg.com \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index b4612a7..b5d6ac7 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -8,8 +8,8 @@ culture where everyone feels included. Salesforce open-source projects are committed to providing a friendly, safe, and welcoming environment for all, regardless of gender identity and expression, -sexual orientation, disability, physical appearance, body size, ethnicity, nationality, -race, age, religion, level of experience, education, socioeconomic status, or +sexual orientation, disability, physical appearance, body size, ethnicity, nationality, +race, age, religion, level of experience, education, socioeconomic status, or other similar personal characteristics. The goal of this code of conduct is to specify a baseline standard of behavior so @@ -25,9 +25,9 @@ Open Source Conduct Committee at ossconduct@salesforce.com. In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of gender -identity and expression, sexual orientation, disability, physical appearance, -body size, ethnicity, nationality, race, age, religion, level of experience, education, +our community a harassment-free experience for everyone, regardless of gender +identity and expression, sexual orientation, disability, physical appearance, +body size, ethnicity, nationality, race, age, religion, level of experience, education, socioeconomic status, or other similar personal characteristics. ## Our Standards @@ -35,23 +35,23 @@ socioeconomic status, or other similar personal characteristics. Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy toward other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy toward other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Personal attacks, insulting/derogatory comments, or trolling -* Public or private harassment -* Publishing, or threatening to publish, others' private information—such as -a physical or electronic address—without explicit permission -* Other conduct which could reasonably be considered inappropriate in a -professional setting -* Advocating for or encouraging any of the above behaviors +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Personal attacks, insulting/derogatory comments, or trolling +- Public or private harassment +- Publishing, or threatening to publish, others' private information—such as + a physical or electronic address—without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting +- Advocating for or encouraging any of the above behaviors ## Our Responsibilities @@ -77,29 +77,29 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the Salesforce Open Source Conduct Committee -at ossconduct@salesforce.com. All complaints will be reviewed and investigated -and will result in a response that is deemed necessary and appropriate to the -circumstances. The committee is obligated to maintain confidentiality with -regard to the reporter of an incident. Further details of specific enforcement +reported by contacting the Salesforce Open Source Conduct Committee +at ossconduct@salesforce.com. All complaints will be reviewed and investigated +and will result in a response that is deemed necessary and appropriate to the +circumstances. The committee is obligated to maintain confidentiality with +regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other -members of the project's leadership and the Salesforce Open Source Conduct +members of the project's leadership and the Salesforce Open Source Conduct Committee. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][contributor-covenant-home], -version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html. -It includes adaptions and additions from [Go Community Code of Conduct][golang-coc], +version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html. +It includes adaptions and additions from [Go Community Code of Conduct][golang-coc], [CNCF Code of Conduct][cncf-coc], and [Microsoft Open Source Code of Conduct][microsoft-coc]. This Code of Conduct is licensed under the [Creative Commons Attribution 3.0 License][cc-by-3-us]. -[contributor-covenant-home]: https://www.contributor-covenant.org (https://www.contributor-covenant.org/) +[contributor-covenant-home]: https://www.contributor-covenant.org 'https://www.contributor-covenant.org/' [golang-coc]: https://golang.org/conduct [cncf-coc]: https://github.com/cncf/foundation/blob/master/code-of-conduct.md [microsoft-coc]: https://opensource.microsoft.com/codeofconduct/ -[cc-by-3-us]: https://creativecommons.org/licenses/by/3.0/us/ \ No newline at end of file +[cc-by-3-us]: https://creativecommons.org/licenses/by/3.0/us/ diff --git a/bin/dev.cmd b/bin/dev.cmd new file mode 100755 index 0000000..cec553b --- /dev/null +++ b/bin/dev.cmd @@ -0,0 +1,3 @@ +@echo off + +node --loader ts-node/esm --no-warnings=ExperimentalWarning "%~dp0\dev" %* diff --git a/bin/dev.js b/bin/dev.js new file mode 100755 index 0000000..89a549a --- /dev/null +++ b/bin/dev.js @@ -0,0 +1,8 @@ +#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning +// eslint-disable-next-line node/shebang +async function main() { + const { execute } = await import('@oclif/core'); + await execute({ development: true, dir: import.meta.url }); +} + +await main(); diff --git a/bin/run b/bin/run deleted file mode 100755 index 45a2781..0000000 --- a/bin/run +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env node - -require('@oclif/core').run() -.then(require('@oclif/core/flush')) -.catch(require('@oclif/core/handle')); diff --git a/bin/run.js b/bin/run.js new file mode 100755 index 0000000..cf13fb9 --- /dev/null +++ b/bin/run.js @@ -0,0 +1,9 @@ +#!/usr/bin/env node + +// eslint-disable-next-line node/shebang +async function main() { + const { execute } = await import('@oclif/core'); + await execute({ dir: import.meta.url }); +} + +await main(); diff --git a/codecov.yml b/codecov.yml index c8c8b4c..374cc9a 100644 --- a/codecov.yml +++ b/codecov.yml @@ -3,16 +3,16 @@ # SPDX-License-Identifier: MIT # For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT comment: - layout: "header, diff, tree" - behavior: default - require_changes: false # if true: only post the comment if coverage changes - branches: null - flags: null - paths: null + layout: 'header, diff, tree' + behavior: default + require_changes: false # if true: only post the comment if coverage changes + branches: null + flags: null + paths: null flags: - frontend: - paths: - - modules/ - backend: - paths: - - src/ + frontend: + paths: + - modules/ + backend: + paths: + - src/ diff --git a/commitlint.config.cjs b/commitlint.config.cjs new file mode 100644 index 0000000..422b194 --- /dev/null +++ b/commitlint.config.cjs @@ -0,0 +1 @@ +module.exports = { extends: ['@commitlint/config-conventional'] }; diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index edb4326..0000000 --- a/jest.config.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -module.exports = { - displayName: 'Unit Tests', - setupFilesAfterEnv: ['jest-extended', 'jest-chain'], - transform: { - '^.+\\.ts?$': 'ts-jest' - }, - testMatch: ['**/__tests__/**/?(*.)(spec|test).(js|ts)'], - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - testPathIgnorePatterns: ['/node_modules/', '/lib/', '/dist/'], - moduleDirectories: ['node_modules'], - collectCoverage: false, - coverageReporters: ['json', 'html', 'text'], - collectCoverageFrom: ['src/**/*.ts', 'src/**/*.js', 'modules/**/*.js'], - coveragePathIgnorePatterns: ['prismjs.js'], - coverageDirectory: 'reports/coverage', - reporters: [ - 'default', - [ - 'jest-junit', - { - suiteName: 'Unit Tests', - output: './reports/junit/jest-results.xml' - } - ] - ] -}; diff --git a/lint-staged.config.js b/lint-staged.config.js deleted file mode 100644 index aff4656..0000000 --- a/lint-staged.config.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -module.exports = { - // Run this command for each of the files. - // ignore vendors directory and eslintrc.js file - '!(vendors|.eslintrc.js)/**/*.{js,ts}': [ - 'prettier --write', - 'eslint --fix', - 'git add' - ] -}; diff --git a/messages/common.json b/messages/common.json deleted file mode 100644 index 50d20a4..0000000 --- a/messages/common.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "startPreviewAction": "Start Preview", - "launchAppAction": "Launch App", - "launchBrowserAction": "Launch Browser", - - "searchForDeviceStatus": "searching for device %s", - "createDeviceStatus": "creating device %s", - "foundDeviceStatus": "found device %s", - "startDeviceStatus": "starting device %s", - "launchBrowserStatus": "navigating mobile browser to %s", - "launchAppStatus": "launching app %s", - "installAppStatus": "installing app %s", - "terminateAppStatus": "terminating app %s", - "genericErrorStatus": "error encountered", - "notWritableSystemShutDownStatus": "emulator currently launched without -writable-system. Shutting down.", - "emulatorLaunchNotWritableStatus": "launching %s on port %s", - "emulatorRelaunchNotWritableStatus": "relaunching %s on port %s", - "emulatorLaunchWritableStatus": "launching %s on port %s with -writable-system", - "emulatorRelaunchWritableStatus": "relaunching %s on port %s with -writable-system", - "waitForBootStatus": "waiting for %s to boot", - "disableAVBVerityStatus": "disabling Android Verified Build and Verity", - "rebootChangesStatus": "rebooting for changes to take effect", - "remountSystemWritableStatus": "remounting system partition to be writable", - "openBrowserWithUrlStatus": "Opening browser with url %s", - - "bootTimeOut": "Timeout waiting for %s to boot.", - "powerOffTimeOut": "Timeout waiting for %s to power off.", - - "platformFlagMobileOnlyDescription": "Specify platform ('iOS' or 'Android').", - "platformFlagIncludingDesktopDescription": "Specify platform ('Desktop' or 'iOS' or 'Android').", - "apiLevelFlagDescription": "Specify Android API level. Defaults to the latest API level installed.", - "jsonFlagDescription": "Format output as json.", - "logLevelFlagDescription": "Logging level for this command invocation (options: TRACE, DEBUG, INFO, WARN, ERROR, FATAL).", - "error:invalidFlagValue": "Invalid value: %s" -} \ No newline at end of file diff --git a/messages/common.md b/messages/common.md new file mode 100644 index 0000000..6e676ef --- /dev/null +++ b/messages/common.md @@ -0,0 +1,98 @@ +# startPreviewAction +Start Preview + +# launchAppAction +Launch App + +# launchBrowserAction +Launch Browser + +# searchForDeviceStatus +searching for device %s + +# createDeviceStatus +creating device %s + +# foundDeviceStatus +found device %s + +# startDeviceStatus +starting device %s + +# launchBrowserStatus +navigating mobile browser to %s + +# launchAppStatus +launching app %s + +# installAppStatus +installing app %s + +# terminateAppStatus +terminating app %s + +# genericErrorStatus +error encountered + +# notWritableSystemShutDownStatus +emulator currently launched without -writable-system. Shutting down. + +# emulatorLaunchNotWritableStatus +launching %s on port %s + +# emulatorRelaunchNotWritableStatus +relaunching %s on port %s + +# emulatorLaunchWritableStatus +launching %s on port %s with -writable-system + +# emulatorRelaunchWritableStatus +relaunching %s on port %s with -writable-system + +# waitForBootStatus +waiting for %s to boot + +# disableAVBVerityStatus +disabling Android Verified Build and Verity + +# rebootChangesStatus +rebooting for changes to take effect + +# remountSystemWritableStatus +remounting system partition to be writable + +# openBrowserWithUrlStatus +Opening browser with url %s + +# bootTimeOut +Timeout waiting for %s to boot. + +# powerOffTimeOut +Timeout waiting for %s to power off. + +# platformFlagMobileOnlyDescription +Specify platform ('iOS' or 'Android'). + +# platformFlagIncludingDesktopDescription +Specify platform ('Desktop' or 'iOS' or 'Android'). + +# apiLevelFlagDescription +Specify Android API level. Defaults to the latest API level installed. + +# jsonFlagDescription +Format output as json. + +# logLevelFlagDescription +Logging level for this command invocation (options: TRACE, DEBUG, INFO, WARN, ERROR, FATAL). + +# error:invalidFlagValue +Invalid value: %s + +# error:tempfolder:create +Could not create a temp folder at %s: %s + +# error:version:codename:comparing +Comparing 2 codename versions is not supported. + +# error:network:hardware:port +Error collecting network hardware ports: %s \ No newline at end of file diff --git a/messages/requirement-android.json b/messages/requirement-android.json deleted file mode 100644 index e6bbeab..0000000 --- a/messages/requirement-android.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "android:reqs:androidsdkprerequisitescheck:title" : "Checking Android SDK Prerequisites", - "android:reqs:androidsdkprerequisitescheck:fulfilledMessage" : "Android SDK prerequisites are met.", - "android:reqs:androidsdkprerequisitescheck:unfulfilledMessage" : "Android SDK is missing prerequisites: %s", - "android:reqs:androidhome:title" : "Checking SDK root location", - "android:reqs:androidhome:fulfilledMessage" : "SDK root location is set to %s: %s", - "android:reqs:androidhome:unfulfilledMessage" : "SDK root location not found. Please set up ANDROID_SDK_ROOT or ANDROID_HOME in your environment.", - "android:reqs:cmdlinetools:title" : "Checking Android Command Line Tools", - "android:reqs:cmdlinetools:fulfilledMessage" : "Android command line tools were detected at %s", - "android:reqs:cmdlinetools:unfulfilledMessage" : "Android command line tools not found.", - "android:reqs:platformtools:title" : "Checking SDK Platform Tools", - "android:reqs:platformtools:notFound" : "Platform tools not found. Expected at %s.", - "android:reqs:platformtools:fulfilledMessage" : "Android Platform tools were detected at %s.", - "android:reqs:platformtools:unfulfilledMessage" : "No supported Android platform tools found. Minimum supported Android platform tools version is %s.", - "android:reqs:platformapi:title" : "Checking SDK Platform API", - "android:reqs:platformapi:fulfilledMessage" : "%s API package was detected.", - "android:reqs:platformapi:unfulfilledMessage" : "No supported Android API package found. Minimum supported Android API package version is %s.", - "android:reqs:emulatorimages:title" : "Checking SDK Platform Emulator Images", - "android:reqs:emulatorimages:fulfilledMessage" : "Android emulator image (%s) was detected.", - "android:reqs:emulatorimages:unfulfilledMessage" : "Install at least one of these emulator images: %s" -} \ No newline at end of file diff --git a/messages/requirement-android.md b/messages/requirement-android.md new file mode 100644 index 0000000..fec5d76 --- /dev/null +++ b/messages/requirement-android.md @@ -0,0 +1,56 @@ +# android:reqs:androidsdkprerequisitescheck:title +Checking Android SDK Prerequisites + +# android:reqs:androidsdkprerequisitescheck:fulfilledMessage +Android SDK prerequisites are met. + +# android:reqs:androidsdkprerequisitescheck:unfulfilledMessage +Android SDK is missing prerequisites: %s + +# android:reqs:androidhome:title +Checking SDK root location + +# android:reqs:androidhome:fulfilledMessage +SDK root location is set to %s: %s + +# android:reqs:androidhome:unfulfilledMessage +SDK root location not found. Please set up ANDROID_SDK_ROOT or ANDROID_HOME in your environment. + +# android:reqs:cmdlinetools:title +Checking Android Command Line Tools + +# android:reqs:cmdlinetools:fulfilledMessage +Android command line tools were detected at %s + +# android:reqs:cmdlinetools:unfulfilledMessage +Android command line tools not found. + +# android:reqs:platformtools:title +Checking SDK Platform Tools + +# android:reqs:platformtools:notFound +Platform tools not found. Expected at %s. + +# android:reqs:platformtools:fulfilledMessage +Android Platform tools were detected at %s. + +# android:reqs:platformtools:unfulfilledMessage +No supported Android platform tools found. Minimum supported Android platform tools version is %s. + +# android:reqs:platformapi:title +Checking SDK Platform API + +# android:reqs:platformapi:fulfilledMessage +%s API package was detected. + +# android:reqs:platformapi:unfulfilledMessage +No supported Android API package found. Minimum supported Android API package version is %s. + +# android:reqs:emulatorimages:title +Checking SDK Platform Emulator Images + +# android:reqs:emulatorimages:fulfilledMessage +Android emulator image (%s) was detected. + +# android:reqs:emulatorimages:unfulfilledMessage +Install at least one of these emulator images: %s \ No newline at end of file diff --git a/messages/requirement-ios.json b/messages/requirement-ios.json deleted file mode 100644 index e555466..0000000 --- a/messages/requirement-ios.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "ios:reqs:macos:title" : "Checking macOS Environment", - "ios:reqs:macos:fulfilledMessage" : "Running macOS.", - "ios:reqs:macos:unfulfilledMessage" : "You must be running macOS to install an iOS development environment: %s", - "ios:reqs:xcode:title" : "Checking Xcode", - "ios:reqs:xcode:fulfilledMessage" : "Xcode installed: %s", - "ios:reqs:xcode:unfulfilledMessage" : "Xcode is not installed or configured. %s", - "ios:reqs:simulator:title" : "Checking Supported Simulator Runtime", - "ios:reqs:simulator:fulfilledMessage" : "One or more supported simulator runtimes are configured for iOS: %s", - "ios:reqs:simulator:unfulfilledMessage" : "No supported simulator runtimes found. Minimum supported runtime is %s" -} \ No newline at end of file diff --git a/messages/requirement-ios.md b/messages/requirement-ios.md new file mode 100644 index 0000000..cab01d2 --- /dev/null +++ b/messages/requirement-ios.md @@ -0,0 +1,26 @@ +# ios:reqs:macos:title +Checking macOS Environment + +# ios:reqs:macos:fulfilledMessage +Running macOS. + +# ios:reqs:macos:unfulfilledMessage +You must be running macOS to install an iOS development environment: %s + +# ios:reqs:xcode:title +Checking Xcode + +# ios:reqs:xcode:fulfilledMessage +Xcode installed: %s + +# ios:reqs:xcode:unfulfilledMessage +Xcode is not installed or configured. %s + +# ios:reqs:simulator:title +Checking Supported Simulator Runtime + +# ios:reqs:simulator:fulfilledMessage +One or more supported simulator runtimes are configured for iOS: %s + +# ios:reqs:simulator:unfulfilledMessage +No supported simulator runtimes found. Minimum supported runtime is %s \ No newline at end of file diff --git a/messages/requirement.json b/messages/requirement.json deleted file mode 100644 index aa5c65e..0000000 --- a/messages/requirement.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "passed": "PASSED", - "failed": "FAILED", - "rootTaskTitle": "Requirements", - "error:requirementCheckFailed": "Requirement verifications for platform %s failed.", - "error:requirementCheckFailed:recommendation": "Please see the error messages above for details on resolving your requirement issues.", - "remedy:invalidInputFlagsDescription": "Specify a platform using ' -p [iOS|Android]'" -} \ No newline at end of file diff --git a/messages/requirement.md b/messages/requirement.md new file mode 100644 index 0000000..c53d1b7 --- /dev/null +++ b/messages/requirement.md @@ -0,0 +1,20 @@ +# passed +PASSED + +# failed +FAILED + +# rootTaskTitle +Requirements + +# error:requirementCheckFailed +Requirement verifications failed. + +# error:requirementCheckFailed:recommendation +Please see the error messages above for details on resolving your requirement issues. + +# error:unexpected +unexpected error %s + +# remedy:invalidInputFlagsDescription +Specify a platform using ' -p [ios|android]' \ No newline at end of file diff --git a/messages/setup.json b/messages/setup.json deleted file mode 100644 index f66e5f7..0000000 --- a/messages/setup.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "commandDescription": "Set up mobile environment for Lightning Web Component development." -} - \ No newline at end of file diff --git a/messages/setup.md b/messages/setup.md new file mode 100644 index 0000000..0ed1bb3 --- /dev/null +++ b/messages/setup.md @@ -0,0 +1,9 @@ +# summary + +Set up mobile environment for Lightning Web Component development. + +# examples + +- <%= config.bin %> <%= command.id %> -p ios +- <%= config.bin %> <%= command.id %> -p android + diff --git a/package.json b/package.json index dafed9a..8957a7f 100644 --- a/package.json +++ b/package.json @@ -1,129 +1,245 @@ { - "name": "@salesforce/lwc-dev-mobile-core", - "description": "Core module supporting Salesforce CLI mobile extension plug-ins", - "version": "3.3.1", - "author": { - "name": "Meisam Seyed Aliroteh", - "email": "maliroteh@salesforce.com", - "url": "https://github.com/maliroteh-sf" - }, - "contributors": [ - { - "name": "Kevin Hawkins", - "email": "khawkins@salesforce.com", - "url": "https://github.com/khawkins" + "name": "@salesforce/lwc-dev-mobile-core", + "description": "Core module supporting Salesforce CLI mobile extension plug-ins", + "version": "4.0.0", + "author": { + "name": "Meisam Seyed Aliroteh", + "email": "maliroteh@salesforce.com", + "url": "https://github.com/maliroteh-sf" }, - { - "name": "Meisam Seyed Aliroteh", - "email": "maliroteh@salesforce.com", - "url": "https://github.com/maliroteh-sf" + "contributors": [ + { + "name": "Kevin Hawkins", + "email": "khawkins@salesforce.com", + "url": "https://github.com/khawkins" + }, + { + "name": "Meisam Seyed Aliroteh", + "email": "maliroteh@salesforce.com", + "url": "https://github.com/maliroteh-sf" + }, + { + "name": "Takashi Arai", + "email": "t.arai@salesforce.com", + "url": "https://github.com/sfdctaka" + }, + { + "name": "Haifeng Li", + "email": "haifeng.li@salesforce.com", + "url": "https://github.com/haifeng-li-at-salesforce" + }, + { + "name": "Ben Zhang", + "email": "ben.zhang@salesforce.com", + "url": "https://github.com/ben-zhang-li-at-salesforce" + } + ], + "bugs": "https://github.com/forcedotcom/lwc-dev-mobile-core/issues", + "dependencies": { + "@oclif/core": "^3.26.6", + "@salesforce/core": "^7.3.6", + "@salesforce/sf-plugins-core": "^9.0.10", + "ajv": "^8.13.0", + "chalk": "^5.3.0", + "listr2": "^8.2.1" + }, + "devDependencies": { + "@oclif/plugin-command-snapshot": "^5.1.9", + "@salesforce/cli-plugins-testkit": "^5.3.4", + "@salesforce/dev-scripts": "^9.1.1", + "@salesforce/ts-sinon": "1.4.19", + "@types/node": "^20.12.11", + "eslint": "^8.57.0", + "eslint-plugin-sf-plugin": "^1.18.3", + "oclif": "^4.10.9", + "shx": "0.3.4", + "ts-node": "^10.9.2", + "typescript": "^5.4.5" }, - { - "name": "Takashi Arai", - "email": "t.arai@salesforce.com", - "url": "https://github.com/sfdctaka" + "engines": { + "node": ">=18.0.0" }, - { - "name": "Peter Van Dyk", - "email": "pvandyk@salesforce.com", - "url": "https://github.com/pvandyk" - } - ], - "bugs": "https://github.com/forcedotcom/lwc-dev-mobile-core/issues", - "dependencies": { - "@oclif/core": "^3.8.0", - "@oclif/plugin-version": "^2.0.3", - "@salesforce/core": "^5.3.12", - "@salesforce/sf-plugins-core": "^4.0.0", - "ajv": "^8.12.0", - "chalk": "^4.1.2", - "listr2": "^7.0.2" - }, - "devDependencies": { - "@types/inquirer": "^9.0.6", - "@types/jest": "^29.5.6", - "@types/node": "^20.8.9", - "@types/sinon": "^10.0.20", - "@typescript-eslint/eslint-plugin": "^6.9.0", - "@typescript-eslint/parser": "^6.9.0", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-jsdoc": "^46.8.2", - "eslint-plugin-prefer-arrow": "^1.2.3", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-unicorn": "^48.0.1", - "husky": "^8.0.3", - "jest": "^29.7.0", - "jest-chain": "^1.1.6", - "jest-extended": "^4.0.2", - "jest-junit": "^16.0.0", - "lint-staged": "^15.0.2", - "oclif": "^4.0.3", - "prettier": "^3.0.3", - "ts-jest": "^29.1.1", - "typescript": "^5.2.2" - }, - "engines": { - "node": ">=18" - }, - "main": "lib/index.js", - "files": [ - "/lib", - "/messages", - "/npm-shrinkwrap.json", - "/oclif.manifest.json", - "!**/__tests__/", - "!**/__mocks__/", - "!**/*.test.*", - "!**/.DS_Store" - ], - "homepage": "https://github.com/forcedotcom/lwc-dev-mobile-core", - "keywords": [ - "sfdx-plugin" - ], - "license": "MIT", - "oclif": { - "additionalHelpFlags": [ - "-h" + "main": "dist/index.js", + "files": [ + "/dist", + "/messages", + "/npm-shrinkwrap.json", + "/oclif.manifest.json", + "/oclif.lock", + "/schemas", + "!**/__tests__/", + "!**/__mocks__/", + "!**/*.test.*", + "!**/.DS_Store" ], - "additionalVersionFlags": [ - "-v" + "homepage": "https://github.com/forcedotcom/lwc-dev-mobile-core", + "keywords": [ + "force", + "salesforce", + "salesforcedx", + "sf", + "sf-plugin", + "sfdx", + "sfdx-plugin" ], - "default": ".", - "commands": "./lib/cli/commands", - "bin": "lwc-dev-mobile-core", - "topics": { - "hello": { - "description": "Sfdx Lightning local development for mobile platforms." - } + "license": "MIT", + "oclif": { + "commands": "./dist/cli/commands", + "bin": "sf", + "topicSeparator": " ", + "devPlugins": [ + "@oclif/plugin-help" + ], + "topics": { + "force": { + "subtopics": { + "lightning": { + "external": true, + "subtopics": { + "local": { + "description": "Sfdx Lightning local development for mobile platforms." + } + } + } + } + } + }, + "flexibleTaxonomy": true + }, + "repository": "https://github.com/forcedotcom/lwc-dev-mobile-core", + "scripts": { + "build": "wireit", + "clean": "sf-clean", + "clean-all": "sf-clean all", + "clean:dist": "shx rm -rf dist && shx rm -rf coverage && shx rm -rf .nyc_output && shx rm -f oclif.manifest.json oclif.lock", + "compile": "wireit", + "docs": "sf-docs", + "format": "wireit", + "format:check": "wireit", + "lint": "wireit", + "postinstall": "yarn husky install", + "postpack": "shx rm -f oclif.manifest.json oclif.lock", + "prepack": "yarn clean-all && npm run sf-prepack", + "sf-prepack": "sf-prepack", + "test": "wireit", + "test:nuts": "nyc mocha \"**/*.nut.ts\" --slow 4500 --timeout 600000 --parallel", + "test:only": "wireit", + "version": "oclif readme" + }, + "publishConfig": { + "access": "public" + }, + "wireit": { + "build": { + "dependencies": [ + "compile", + "test:compile" + ] + }, + "compile": { + "command": "tsc -p . --pretty --incremental", + "files": [ + "src/**/*.ts", + "**/tsconfig.json", + "messages/**" + ], + "output": [ + "dist/**", + "*.tsbuildinfo" + ], + "clean": "if-file-deleted" + }, + "format": { + "command": "prettier --write \"+(src|test|schemas)/**/*.+(ts|js|json)|command-snapshot.json\"", + "files": [ + "src/**/*.ts", + "test/**/*.ts", + "schemas/**/*.json", + "command-snapshot.json", + ".prettier*" + ], + "output": [] + }, + "format:check": { + "command": "prettier --list-different \"+(src|test|schemas)/**/*.+(ts|js|json)|command-snapshot.json\"", + "files": [ + "src/**/*.ts", + "test/**/*.ts", + "schemas/**/*.json", + "command-snapshot.json", + ".prettier*" + ], + "output": [] + }, + "lint": { + "command": "eslint src test --color --cache --cache-location .eslintcache", + "files": [ + "src/**/*.ts", + "test/**/*.ts", + "messages/**", + "**/.eslint*", + "**/tsconfig.json" + ], + "output": [] + }, + "test:compile": { + "command": "tsc -p \"./test\" --pretty", + "files": [ + "test/**/*.ts", + "**/tsconfig.json" + ], + "output": [] + }, + "test": { + "dependencies": [ + "test:only" + ] + }, + "test:only": { + "command": "nyc mocha \"test/unit/**/*.test.ts\"", + "env": { + "FORCE_COLOR": "2" + }, + "files": [ + "test/unit/**/*.ts", + "src/**/*.ts", + "**/tsconfig.json", + ".mocha*", + "!*.nut.ts", + ".nycrc" + ], + "output": [] + }, + "test:command-reference": { + "command": "\"./bin/dev\" commandreference:generate --erroronwarnings", + "files": [ + "src/**/*.ts", + "messages/**", + "package.json" + ], + "output": [ + "tmp/root" + ] + }, + "test:deprecation-policy": { + "command": "\"./bin/dev\" snapshot:compare", + "files": [ + "src/**/*.ts" + ], + "output": [], + "dependencies": [ + "compile" + ] + }, + "test:json-schema": { + "command": "\"./bin/dev\" schema:compare", + "files": [ + "src/**/*.ts", + "schemas" + ], + "output": [] + } }, - "plugins": [], - "devPlugins": [ - "@oclif/plugin-version" - ] - }, - "repository": "https://github.com/forcedotcom/lwc-dev-mobile-core", - "scripts": { - "clean": "yarn rimraf lib dist reports coverage errorShots oclif.manifest.json", - "build": "yarn clean && tsc", - "lint": "yarn eslint src --ext js,ts", - "prepack": "rm -rf lib && tsc -b && oclif manifest && oclif readme", - "postpack": "rm -f oclif.manifest.json", - "posttest": "yarn lint", - "test": "yarn jest --coverage", - "test:watch": "yarn test --watch", - "test:debug": "node --inspect node_modules/.bin/jest src --runInBand", - "version": "oclif readme && git add README.md", - "prepare": "husky install", - "prettier:write": "prettier --write \"src/**/*.{ts, tsx, js, jsx}\"", - "prettier:verify": "prettier --list-different \"src/**/*.{ts, tsx, js, jsx}\"" - }, - "husky": { - "hooks": { - "pre-commit": "yarn lint-staged", - "pre-push": "yarn lint" - } - } + "exports": "./dist/index.js", + "type": "module" } diff --git a/src/cli/commands/force/lightning/local/__tests__/setup.test.ts b/src/cli/commands/force/lightning/local/__tests__/setup.test.ts deleted file mode 100644 index 99d423d..0000000 --- a/src/cli/commands/force/lightning/local/__tests__/setup.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { Config } from '@oclif/core/lib/config'; -import { Options } from '@oclif/core/lib/interfaces'; -import { Messages, SfError } from '@salesforce/core'; -import util from 'util'; -import { LoggerSetup } from '../../../../../../common/LoggerSetup'; -import { RequirementProcessor } from '../../../../../../common/Requirements'; -import { Setup } from '../setup'; - -Messages.importMessagesDirectory(__dirname); - -describe('Setup Tests', () => { - const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' - ); - - enum PlatformType { - android = 'android', - ios = 'ios' - } - - let executeSetupMock: jest.Mock; - - beforeEach(() => { - executeSetupMock = jest.fn((): Promise => { - return Promise.resolve(); - }); - - jest.spyOn(RequirementProcessor, 'execute').mockImplementation( - executeSetupMock - ); - }); - - afterEach(() => { - jest.restoreAllMocks(); - }); - - test('Checks that Setup is initialized correctly for iOS', async () => { - const setup = makeSetup(PlatformType.ios); - await setup.init(); - await setup.run(); - expect(executeSetupMock).toHaveBeenCalled(); - }); - - test('Checks that Setup is initialized correctly for Android', async () => { - const setup = makeSetup(PlatformType.android); - await setup.init(); - await setup.run(); - expect(executeSetupMock).toHaveBeenCalled(); - }); - - test('Checks that Setup fails for invalid Platform flag', async () => { - const setup = makeSetup('someplatform'); - expect.assertions(2); - try { - await setup.init(); - await setup.run(); - } catch (error) { - expect(error instanceof SfError).toBe(true); - expect((error as SfError).message).toContain( - util.format( - messages.getMessage('error:invalidFlagValue'), - 'someplatform' - ) - ); - } - }); - - test('Checks that Setup will still validate API Level flag for iOS platform if passed a value', async () => { - const setup = makeSetup(PlatformType.ios, '1.2.3'); - await setup.init(); - await setup.run(); - expect(executeSetupMock).toHaveBeenCalled(); - }); - - test('Logger must be initialized and invoked', async () => { - const LoggerSetupSpy = jest.spyOn( - LoggerSetup, - 'initializePluginLoggers' - ); - - const setup = makeSetup(PlatformType.ios); - await setup.init(); - - const loggerSpy = jest.spyOn(setup.logger, 'info'); - - await setup.run(); - expect(loggerSpy).toHaveBeenCalled(); - expect(LoggerSetupSpy).toHaveBeenCalled(); - }); - - test('Messages folder should be loaded', async () => { - expect.assertions(1); - expect(Setup.description !== null).toBeTruthy(); - }); - - function makeSetup(platform: string, apiLevel?: string): Setup { - const args = ['-p', platform]; - if (apiLevel) { - args.push('-l'); - args.push(apiLevel); - } - const setup = new Setup(args, new Config({} as Options)); - return setup; - } -}); diff --git a/src/cli/commands/force/lightning/local/setup.ts b/src/cli/commands/force/lightning/local/setup.ts index 8b50a5b..13224b4 100644 --- a/src/cli/commands/force/lightning/local/setup.ts +++ b/src/cli/commands/force/lightning/local/setup.ts @@ -1,3 +1,7 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. @@ -5,38 +9,18 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ import { Messages } from '@salesforce/core'; -import { AndroidEnvironmentRequirements } from '../../../../../common/AndroidEnvironmentRequirements'; -import { BaseCommand } from '../../../../../common/BaseCommand'; -import { - CommandLineUtils, - FlagsConfigType -} from '../../../../../common/Common'; -import { IOSEnvironmentRequirements } from '../../../../../common/IOSEnvironmentRequirements'; -import { - CommandRequirements, - RequirementProcessor -} from '../../../../../common/Requirements'; - -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); +import { AndroidEnvironmentRequirements } from '../../../../../common/AndroidEnvironmentRequirements.js'; +import { BaseCommand } from '../../../../../common/BaseCommand.js'; +import { CommandLineUtils, FlagsConfigType } from '../../../../../common/Common.js'; +import { IOSEnvironmentRequirements } from '../../../../../common/IOSEnvironmentRequirements.js'; +import { CommandRequirements, RequirementProcessor } from '../../../../../common/Requirements.js'; -// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, -// or any library that is using the messages framework can also be loaded this way. -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'setup' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'setup'); export class Setup extends BaseCommand { - protected _commandName = 'force:lightning:local:setup'; - - public static readonly description = - messages.getMessage('commandDescription'); - - public static readonly examples = [ - `sfdx force:lightning:local:setup -p iOS`, - `sfdx force:lightning:local:setup -p Android` - ]; + public static readonly summary = messages.getMessage('summary'); + public static readonly examples = messages.getMessages('examples'); public static readonly flags = { ...CommandLineUtils.createFlag(FlagsConfigType.Json, false), @@ -45,25 +29,21 @@ export class Setup extends BaseCommand { ...CommandLineUtils.createFlag(FlagsConfigType.Platform, true) }; + protected _commandName = 'force:lightning:local:setup'; + public async run(): Promise { - this.logger.info( - `Setup command called for ${this.flagValues.platform}` - ); + this.logger.info(`Setup command called for ${this.flagValues.platform}`); return RequirementProcessor.execute(this.commandRequirements); } protected populateCommandRequirements(): void { const requirements: CommandRequirements = {}; - requirements.setup = CommandLineUtils.platformFlagIsAndroid( - this.flagValues.platform - ) - ? new AndroidEnvironmentRequirements( - this.logger, - this.flagValues.apilevel - ) + requirements.setup = CommandLineUtils.platformFlagIsAndroid(this.flagValues.platform) + ? new AndroidEnvironmentRequirements(this.logger, this.flagValues.apilevel) : new IOSEnvironmentRequirements(this.logger); + // eslint-disable-next-line no-underscore-dangle this._commandRequirements = requirements; } } diff --git a/src/common/AndroidEnvironmentRequirements.ts b/src/common/AndroidEnvironmentRequirements.ts index 4d09f40..8573a0c 100644 --- a/src/common/AndroidEnvironmentRequirements.ts +++ b/src/common/AndroidEnvironmentRequirements.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. @@ -5,21 +6,17 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ import { Logger, Messages, SfError } from '@salesforce/core'; -import util from 'util'; -import { AndroidUtils } from './AndroidUtils'; -import { PlatformConfig } from './PlatformConfig'; -import { Requirement, RequirementList } from './Requirements'; +import { AndroidUtils } from './AndroidUtils.js'; +import { PlatformConfig } from './PlatformConfig.js'; +import { Requirement, RequirementList } from './Requirements.js'; -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'requirement-android' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'requirement-android'); export class AndroidEnvironmentRequirements implements RequirementList { public requirements: Requirement[] = []; public enabled = true; - constructor(logger: Logger, apiLevel?: string) { + public constructor(logger: Logger, apiLevel?: string) { this.requirements = [ new AndroidSDKRootSetRequirement(logger), new Java8AvailableRequirement(logger), @@ -31,21 +28,16 @@ export class AndroidEnvironmentRequirements implements RequirementList { } } -// tslint:disable-next-line: max-classes-per-file export class AndroidSDKRootSetRequirement implements Requirement { public title: string; public fulfilledMessage: string; public unfulfilledMessage: string; public logger: Logger; - constructor(logger: Logger) { + public constructor(logger: Logger) { this.title = messages.getMessage('android:reqs:androidhome:title'); - this.fulfilledMessage = messages.getMessage( - 'android:reqs:androidhome:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'android:reqs:androidhome:unfulfilledMessage' - ); + this.fulfilledMessage = 'android:reqs:androidhome:fulfilledMessage'; + this.unfulfilledMessage = 'android:reqs:androidhome:unfulfilledMessage'; this.logger = logger; } @@ -56,37 +48,27 @@ export class AndroidSDKRootSetRequirement implements Requirement { const root = AndroidUtils.getAndroidSdkRoot(); if (root) { return Promise.resolve( - AndroidUtils.convertToUnixPath( - util.format( - this.fulfilledMessage, - root.rootSource, - root.rootLocation - ) - ) + messages.getMessage(this.fulfilledMessage, [ + AndroidUtils.convertToUnixPath(root.rootSource), + AndroidUtils.convertToUnixPath(root.rootLocation) + ]) ); } else { - return Promise.reject(new SfError(this.unfulfilledMessage)); + return Promise.reject(new SfError(messages.getMessage(this.unfulfilledMessage))); } } } -// tslint:disable-next-line: max-classes-per-file export class Java8AvailableRequirement implements Requirement { public title: string; public fulfilledMessage: string; public unfulfilledMessage: string; public logger: Logger; - constructor(logger: Logger) { - this.title = messages.getMessage( - 'android:reqs:androidsdkprerequisitescheck:title' - ); - this.fulfilledMessage = messages.getMessage( - 'android:reqs:androidsdkprerequisitescheck:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'android:reqs:androidsdkprerequisitescheck:unfulfilledMessage' - ); + public constructor(logger: Logger) { + this.title = messages.getMessage('android:reqs:androidsdkprerequisitescheck:title'); + this.fulfilledMessage = 'android:reqs:androidsdkprerequisitescheck:fulfilledMessage'; + this.unfulfilledMessage = 'android:reqs:androidsdkprerequisitescheck:unfulfilledMessage'; this.logger = logger; } @@ -94,36 +76,24 @@ export class Java8AvailableRequirement implements Requirement { * Verifies that prerequisites for Android SDK are met and that Java 8 is installed. */ public async checkFunction(): Promise { - return ( - AndroidUtils.androidSDKPrerequisitesCheck() - // eslint-disable-next-line @typescript-eslint/no-unused-vars - .then((result) => Promise.resolve(this.fulfilledMessage)) - .catch((error) => - Promise.reject( - new SfError( - util.format(this.unfulfilledMessage, error.message) - ) - ) - ) - ); + return AndroidUtils.androidSDKPrerequisitesCheck() + .then(() => Promise.resolve(messages.getMessage(this.fulfilledMessage))) + .catch((error) => + Promise.reject(new SfError(messages.getMessage(this.unfulfilledMessage, [error.message]))) + ); } } -// tslint:disable-next-line: max-classes-per-file export class AndroidSDKToolsInstalledRequirement implements Requirement { public title: string; public fulfilledMessage: string; public unfulfilledMessage: string; public logger: Logger; - constructor(logger: Logger) { + public constructor(logger: Logger) { this.title = messages.getMessage('android:reqs:cmdlinetools:title'); - this.fulfilledMessage = messages.getMessage( - 'android:reqs:cmdlinetools:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'android:reqs:cmdlinetools:unfulfilledMessage' - ); + this.fulfilledMessage = 'android:reqs:cmdlinetools:fulfilledMessage'; + this.unfulfilledMessage = 'android:reqs:cmdlinetools:unfulfilledMessage'; this.logger = logger; } @@ -131,44 +101,26 @@ export class AndroidSDKToolsInstalledRequirement implements Requirement { * Verifies that user has Android command line tools installed. */ public async checkFunction(): Promise { - return ( - AndroidUtils.fetchAndroidCmdLineToolsLocation() - .then((result) => - Promise.resolve( - AndroidUtils.convertToUnixPath( - util.format(this.fulfilledMessage, result) - ) - ) - ) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - .catch((error) => - Promise.reject(new SfError(this.unfulfilledMessage)) - ) - ); + return AndroidUtils.fetchAndroidCmdLineToolsLocation() + .then((result) => + Promise.resolve(messages.getMessage(this.fulfilledMessage, [AndroidUtils.convertToUnixPath(result)])) + ) + .catch(() => Promise.reject(new SfError(messages.getMessage(this.unfulfilledMessage)))); } } -// tslint:disable-next-line: max-classes-per-file -export class AndroidSDKPlatformToolsInstalledRequirement - implements Requirement -{ +export class AndroidSDKPlatformToolsInstalledRequirement implements Requirement { public title: string; public fulfilledMessage: string; public unfulfilledMessage: string; - private notFoundMessage: string; public logger: Logger; + private notFoundMessage: string; - constructor(logger: Logger) { + public constructor(logger: Logger) { this.title = messages.getMessage('android:reqs:platformtools:title'); - this.fulfilledMessage = messages.getMessage( - 'android:reqs:platformtools:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'android:reqs:platformtools:unfulfilledMessage' - ); - this.notFoundMessage = messages.getMessage( - 'android:reqs:platformtools:notFound' - ); + this.fulfilledMessage = 'android:reqs:platformtools:fulfilledMessage'; + this.unfulfilledMessage = 'android:reqs:platformtools:unfulfilledMessage'; + this.notFoundMessage = 'android:reqs:platformtools:notFound'; this.logger = logger; } @@ -178,30 +130,19 @@ export class AndroidSDKPlatformToolsInstalledRequirement public async checkFunction(): Promise { return AndroidUtils.fetchAndroidSDKPlatformToolsLocation() .then((result) => - Promise.resolve( - AndroidUtils.convertToUnixPath( - util.format(this.fulfilledMessage, result) - ) - ) + Promise.resolve(messages.getMessage(this.fulfilledMessage, [AndroidUtils.convertToUnixPath(result)])) ) .catch((error) => { if (error.status === 127) { return Promise.reject( - new SfError( - util.format( - this.notFoundMessage, - AndroidUtils.getAndroidPlatformTools() - ) - ) + new SfError(messages.getMessage(this.notFoundMessage, [AndroidUtils.getAndroidPlatformTools()])) ); } else { return Promise.reject( new SfError( - util.format( - this.unfulfilledMessage, - PlatformConfig.androidConfig() - .minSupportedRuntime - ) + messages.getMessage(this.unfulfilledMessage, [ + PlatformConfig.androidConfig().minSupportedRuntime + ]) ) ); } @@ -209,7 +150,6 @@ export class AndroidSDKPlatformToolsInstalledRequirement } } -// tslint:disable-next-line: max-classes-per-file export class PlatformAPIPackageRequirement implements Requirement { public title: string; public fulfilledMessage: string; @@ -217,14 +157,10 @@ export class PlatformAPIPackageRequirement implements Requirement { public logger: Logger; private apiLevel?: string; - constructor(logger: Logger, apiLevel?: string) { + public constructor(logger: Logger, apiLevel?: string) { this.title = messages.getMessage('android:reqs:platformapi:title'); - this.fulfilledMessage = messages.getMessage( - 'android:reqs:platformapi:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'android:reqs:platformapi:unfulfilledMessage' - ); + this.fulfilledMessage = 'android:reqs:platformapi:fulfilledMessage'; + this.unfulfilledMessage = 'android:reqs:platformapi:unfulfilledMessage'; this.logger = logger; this.apiLevel = apiLevel; } @@ -233,30 +169,20 @@ export class PlatformAPIPackageRequirement implements Requirement { * Verifies that user has a supported Android API package that also has matching supported emulator images installed. */ public async checkFunction(): Promise { - return ( - AndroidUtils.fetchSupportedAndroidAPIPackage(this.apiLevel) - .then((result) => - Promise.resolve( - util.format(this.fulfilledMessage, result.platformAPI) - ) - ) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - .catch((error) => - Promise.reject( - new SfError( - util.format( - this.unfulfilledMessage, - PlatformConfig.androidConfig() - .minSupportedRuntime - ) - ) + return AndroidUtils.fetchSupportedAndroidAPIPackage(this.apiLevel) + .then((result) => Promise.resolve(messages.getMessage(this.fulfilledMessage, [result.platformAPI]))) + .catch(() => + Promise.reject( + new SfError( + messages.getMessage(this.unfulfilledMessage, [ + PlatformConfig.androidConfig().minSupportedRuntime + ]) ) ) - ); + ); } } -// tslint:disable-next-line: max-classes-per-file export class EmulatorImagesRequirement implements Requirement { public title: string; public fulfilledMessage: string; @@ -264,14 +190,10 @@ export class EmulatorImagesRequirement implements Requirement { public logger: Logger; private apiLevel?: string; - constructor(logger: Logger, apiLevel?: string) { + public constructor(logger: Logger, apiLevel?: string) { this.title = messages.getMessage('android:reqs:emulatorimages:title'); - this.fulfilledMessage = messages.getMessage( - 'android:reqs:emulatorimages:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'android:reqs:emulatorimages:unfulfilledMessage' - ); + this.fulfilledMessage = 'android:reqs:emulatorimages:fulfilledMessage'; + this.unfulfilledMessage = 'android:reqs:emulatorimages:unfulfilledMessage'; this.logger = logger; this.apiLevel = apiLevel; } @@ -280,26 +202,16 @@ export class EmulatorImagesRequirement implements Requirement { * Verifies that user has at least one Android package with any of the supported emulator image targets (e.g. Google APIs, default, Google Play). */ public async checkFunction(): Promise { - return ( - AndroidUtils.fetchSupportedEmulatorImagePackage(this.apiLevel) - .then((result) => - Promise.resolve( - util.format(this.fulfilledMessage, result.path) + return AndroidUtils.fetchSupportedEmulatorImagePackage(this.apiLevel) + .then((result) => Promise.resolve(messages.getMessage(this.fulfilledMessage, [result.path]))) + .catch(() => + Promise.reject( + new SfError( + messages.getMessage(this.unfulfilledMessage, [ + PlatformConfig.androidConfig().supportedImages.join(',') + ]) ) ) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - .catch((error) => - Promise.reject( - new SfError( - util.format( - this.unfulfilledMessage, - PlatformConfig.androidConfig().supportedImages.join( - ',' - ) - ) - ) - ) - ) - ); + ); } } diff --git a/src/common/AndroidLauncher.ts b/src/common/AndroidLauncher.ts index 8dcb37b..6e28307 100644 --- a/src/common/AndroidLauncher.ts +++ b/src/common/AndroidLauncher.ts @@ -5,26 +5,18 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ import { Messages } from '@salesforce/core'; -import util from 'util'; -import { AndroidUtils } from './AndroidUtils'; -import { AndroidAppPreviewConfig, LaunchArgument } from './PreviewConfigFile'; -import { CommonUtils } from './CommonUtils'; -import { PreviewUtils } from './PreviewUtils'; +import { AndroidUtils } from './AndroidUtils.js'; +import { AndroidAppPreviewConfig, LaunchArgument } from './PreviewConfigFile.js'; +import { CommonUtils } from './CommonUtils.js'; +import { PreviewUtils } from './PreviewUtils.js'; -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); - -// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, -// or any library that is using the messages framework can also be loaded this way. -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); export class AndroidLauncher { private emulatorName: string; - constructor(emulatorName: string) { + public constructor(emulatorName: string) { this.emulatorName = emulatorName; } @@ -51,8 +43,7 @@ export class AndroidLauncher { serverPort: string, targetingLwrServer: boolean = false ): Promise { - const preferredPack = - await AndroidUtils.fetchSupportedEmulatorImagePackage(); + const preferredPack = await AndroidUtils.fetchSupportedEmulatorImagePackage(); const emuImage = preferredPack.platformEmulatorImage || 'default'; const androidApi = preferredPack.platformAPI; const abi = preferredPack.abi; @@ -60,47 +51,23 @@ export class AndroidLauncher { const emuName = this.emulatorName; CommonUtils.startCliAction( messages.getMessage('startPreviewAction'), - util.format(messages.getMessage('searchForDeviceStatus'), emuName) + messages.getMessage('searchForDeviceStatus', [emuName]) ); return AndroidUtils.hasEmulator(emuName) .then((result) => { if (!result) { - CommonUtils.updateCliAction( - util.format( - messages.getMessage('createDeviceStatus'), - emuName - ) - ); - return AndroidUtils.createNewVirtualDevice( - emuName, - emuImage, - androidApi, - device, - abi - ); + CommonUtils.updateCliAction(messages.getMessage('createDeviceStatus', [emuName])); + return AndroidUtils.createNewVirtualDevice(emuName, emuImage, androidApi, device, abi); } - CommonUtils.updateCliAction( - util.format( - messages.getMessage('foundDeviceStatus'), - emuName - ) - ); + CommonUtils.updateCliAction(messages.getMessage('foundDeviceStatus', [emuName])); return Promise.resolve(); }) .then(() => { - CommonUtils.updateCliAction( - util.format( - messages.getMessage('startDeviceStatus'), - emuName - ) - ); + CommonUtils.updateCliAction(messages.getMessage('startDeviceStatus', [emuName])); return AndroidUtils.startEmulator(emuName); }) .then((emulatorPort) => { - const useServer = PreviewUtils.useLwcServerForPreviewing( - targetApp, - appConfig - ); + const useServer = PreviewUtils.useLwcServerForPreviewing(targetApp, appConfig); const address = useServer ? 'http://10.0.2.2' : undefined; // TODO: dynamically determine server address const port = useServer ? serverPort : undefined; @@ -109,31 +76,18 @@ export class AndroidLauncher { if (targetingLwrServer) { url = `${address}:${port}`; } else { - const compPath = - PreviewUtils.prefixRouteIfNeeded(compName); + const compPath = PreviewUtils.prefixRouteIfNeeded(compName); url = `${address}:${port}/lwc/preview/${compPath}`; } - CommonUtils.updateCliAction( - util.format( - messages.getMessage('launchBrowserStatus'), - url - ) - ); + CommonUtils.updateCliAction(messages.getMessage('launchBrowserStatus', [url])); return AndroidUtils.launchURLIntent(url, emulatorPort); } else { - CommonUtils.updateCliAction( - util.format( - messages.getMessage('launchAppStatus'), - targetApp - ) - ); + CommonUtils.updateCliAction(messages.getMessage('launchAppStatus', [targetApp])); - const launchActivity = - (appConfig && appConfig.activity) || ''; + const launchActivity = appConfig?.activity ?? ''; - const targetAppArguments: LaunchArgument[] = - (appConfig && appConfig.launch_arguments) || []; + const targetAppArguments: LaunchArgument[] = appConfig?.launch_arguments ?? []; return AndroidUtils.launchNativeApp( compName, projectDir, @@ -152,9 +106,7 @@ export class AndroidLauncher { return Promise.resolve(); }) .catch((error) => { - CommonUtils.stopCliAction( - messages.getMessage('genericErrorStatus') - ); + CommonUtils.stopCliAction(messages.getMessage('genericErrorStatus')); throw error; }); } diff --git a/src/common/AndroidTypes.ts b/src/common/AndroidTypes.ts index 89014f3..4de0460 100644 --- a/src/common/AndroidTypes.ts +++ b/src/common/AndroidTypes.ts @@ -1,23 +1,23 @@ +/* eslint-disable @typescript-eslint/member-ordering */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ -import { Version } from './Common'; -import fs from 'fs'; +import fs from 'node:fs'; import { Logger, LoggerLevelValue } from '@salesforce/core'; +import { Version } from './Common.js'; -const ANDROID_PACKAGES_LOGGER_NAME = - 'force:lightning:local:androidtypes:androidpackages'; -const ANDROID_VIRTUAL_DEVICE_LOGGER_NAME = - 'force:lightning:local:androidtypes:androidvirtualdevice'; +const ANDROID_PACKAGES_LOGGER_NAME = 'force:lightning:local:androidtypes:androidpackages'; +const ANDROID_VIRTUAL_DEVICE_LOGGER_NAME = 'force:lightning:local:androidtypes:androidvirtualdevice'; export class AndroidPackages { /** * Initialize the logger used by AndroidPackages. */ - public static initializeLogger(level?: LoggerLevelValue) { + public static initializeLogger(level?: LoggerLevelValue): void { AndroidPackages.logger.setLevel(level); } @@ -27,15 +27,9 @@ export class AndroidPackages { * @param rawStringInput The string blob that is the output of `sdkmanager --list` command. * @returns An AndroidPackages object containing an array of platforms and system images. */ - public static parseRawPackagesString( - rawStringInput: string - ): AndroidPackages { - const startIndx = rawStringInput - .toLowerCase() - .indexOf('installed packages:', 0); - const endIndx = rawStringInput - .toLowerCase() - .indexOf('available packages:', startIndx); + public static parseRawPackagesString(rawStringInput: string): AndroidPackages { + const startIndx = rawStringInput.toLowerCase().indexOf('installed packages:', 0); + const endIndx = rawStringInput.toLowerCase().indexOf('available packages:', startIndx); const rawString = rawStringInput.substring(startIndx, endIndx); const packages: AndroidPackages = new AndroidPackages(); @@ -44,7 +38,7 @@ export class AndroidPackages { if (lines.length > 0) { let i = 0; for (; i < lines.length; i++) { - if (lines[i].toLowerCase().indexOf('path') > -1) { + if (lines[i].toLowerCase().includes('path')) { i = i + 2; // skip ---- and header break; // start of installed packages } @@ -54,22 +48,13 @@ export class AndroidPackages { const rawStringSplits: string[] = lines[i].split('|'); if (rawStringSplits.length > 1) { const path = rawStringSplits[0].trim(); - if ( - path.startsWith('platforms;android-') || - path.startsWith('system-images;android-') - ) { - const pathName = path - .replace('platforms;', '') - .replace('system-images;', ''); + if (path.startsWith('platforms;android-') || path.startsWith('system-images;android-')) { + const pathName = path.replace('platforms;', '').replace('system-images;', ''); let versionString = pathName.replace('android-', ''); - if (versionString.indexOf(';') >= 0) { - versionString = versionString.substring( - 0, - versionString.indexOf(';') - ); + if (versionString.includes(';')) { + versionString = versionString.substring(0, versionString.indexOf(';')); } - let version: Version | string | null = - Version.from(versionString); + let version: Version | string | null = Version.from(versionString); if (version === null) { this.logger.warn( `parseRawPackagesString(): '${versionString}' does not follow semantic versioning format... will consider it as a codename.` @@ -77,16 +62,8 @@ export class AndroidPackages { version = versionString; } const description = rawStringSplits[2].trim(); - const locationOfPack = - rawStringSplits.length > 2 - ? rawStringSplits[3].trim() - : ''; - const pkg = new AndroidPackage( - pathName, - version, - description, - locationOfPack - ); + const locationOfPack = rawStringSplits.length > 2 ? rawStringSplits[3].trim() : ''; + const pkg = new AndroidPackage(pathName, version, description, locationOfPack); if (path.startsWith('platforms;android-')) { packages.platforms.push(pkg); } else { @@ -95,7 +72,7 @@ export class AndroidPackages { } } - if (lines[i].indexOf('Available Packages:') > -1) { + if (lines[i].includes('Available Packages:')) { break; } } @@ -105,6 +82,7 @@ export class AndroidPackages { /** * Checks to see if the object is empty (i.e the platforms and system images are both empty) + * * @returns True if empty, false otherwise. */ public isEmpty(): boolean { @@ -113,19 +91,21 @@ export class AndroidPackages { /** * Creates a readable string of AndroidPackage object data. + * * @param packageArray The array of package objects to render. * @returns A readable string of package object data. */ - public static packageArrayAsString(packageArray: AndroidPackage[]) { + public static packageArrayAsString(packageArray: AndroidPackage[]): string { let packagesString = ''; for (const androidPackage of packageArray) { - packagesString += `${androidPackage}\n`; + packagesString += `${androidPackage.toString()}\n`; } return packagesString; } /** * A string representation of the different package data. + * * @returns The string containing the Android package data. */ public toString(): string { @@ -141,19 +121,18 @@ export class AndroidPackages { private static logger: Logger = new Logger(ANDROID_PACKAGES_LOGGER_NAME); } -// tslint:disable-next-line: max-classes-per-file export class AndroidPackage { - get platformAPI(): string { + public get platformAPI(): string { const tokens: string[] = this.path.split(';'); return tokens.length > 0 ? tokens[0] : ''; } - get platformEmulatorImage(): string { + public get platformEmulatorImage(): string { const tokens: string[] = this.path.split(';'); return tokens.length > 1 ? tokens[1] : ''; } - get abi(): string { + public get abi(): string { const tokens: string[] = this.path.split(';'); return tokens.length > 2 ? tokens[2] : ''; } @@ -163,12 +142,7 @@ export class AndroidPackage { public description: string; public location: string; - constructor( - path: string, - version: Version | string, - description: string, - location: string - ) { + public constructor(path: string, version: Version | string, description: string, location: string) { this.path = path; this.version = version; this.description = description; @@ -177,19 +151,21 @@ export class AndroidPackage { /** * A log-readable string of the AndroidPackage data. + * * @returns A readable string of the AndroidPackage data. */ public toString(): string { - return `path: ${this.path}, version: ${this.version}, description: ${this.description}, location: ${this.location}`; + return `path: ${this.path}, version: ${this.version.toString()}, description: ${this.description}, location: ${ + this.location + }`; } } -// tslint:disable-next-line: max-classes-per-file export class AndroidVirtualDevice { /** * Initialize the logger used by AndroidVirtualDevice. */ - public static initializeLogger(level?: LoggerLevelValue) { + public static initializeLogger(level?: LoggerLevelValue): void { AndroidVirtualDevice.logger.setLevel(level); } @@ -218,9 +194,7 @@ export class AndroidVirtualDevice { const targetAPI = configFile .split('\n') .filter((entry) => entry.startsWith('target=')) - .map((entry) => - entry.replace('target=', '').trim().toLowerCase() - ) + .map((entry) => entry.replace('target=', '').trim().toLowerCase()) .map((entry) => entry.replace('android-', '')); apiLevel = Version.from(targetAPI[0]); if (apiLevel === null) { @@ -233,16 +207,7 @@ export class AndroidVirtualDevice { // fetching apiLevel is a best effort, so ignore and continue } - devices.push( - new AndroidVirtualDevice( - name, - device, - path, - target, - api, - apiLevel! - ) - ); + devices.push(new AndroidVirtualDevice(name, device, path, target, api, apiLevel!)); } } @@ -273,8 +238,7 @@ export class AndroidVirtualDevice { private static getAvdDefinitions(rawString: string): string[][] { // get rid of the error sections (if any) const errIdx = rawString.indexOf('\n\n'); - const cleanedRawString = - errIdx > 0 ? rawString.substring(0, errIdx - 1) : rawString; + const cleanedRawString = errIdx > 0 ? rawString.substring(0, errIdx - 1) : rawString; const lowerCasedRawString = cleanedRawString.toLowerCase(); let position = 0; @@ -290,9 +254,7 @@ export class AndroidVirtualDevice { endIdx = sepIdx > -1 ? sepIdx - 1 : -1; let chunk = - endIdx > -1 - ? cleanedRawString.substring(startIdx, endIdx) - : cleanedRawString.substring(startIdx); + endIdx > -1 ? cleanedRawString.substring(startIdx, endIdx) : cleanedRawString.substring(startIdx); chunk = chunk.replace('Tag/ABI:', '\nTag/ABI:'); // put ABI info on a line of its own const split = chunk.split('\n'); results.push(split); @@ -324,7 +286,7 @@ export class AndroidVirtualDevice { public api: string; public apiLevel: Version | string; - constructor( + public constructor( name: string, deviceName: string, path: string, @@ -350,7 +312,5 @@ export class AndroidVirtualDevice { return `${this.displayName}, ${this.deviceName}, ${this.api}`; } - private static logger: Logger = new Logger( - ANDROID_VIRTUAL_DEVICE_LOGGER_NAME - ); + private static logger: Logger = new Logger(ANDROID_VIRTUAL_DEVICE_LOGGER_NAME); } diff --git a/src/common/AndroidUtils.ts b/src/common/AndroidUtils.ts index 5f97933..3cad39f 100644 --- a/src/common/AndroidUtils.ts +++ b/src/common/AndroidUtils.ts @@ -1,34 +1,27 @@ +/* eslint-disable no-await-in-loop */ +/* eslint-disable @typescript-eslint/member-ordering */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ +import * as childProcess from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; import { Logger, LoggerLevelValue, Messages, SfError } from '@salesforce/core'; -import * as childProcess from 'child_process'; -import fs from 'fs'; -import path from 'path'; -import util from 'util'; -import { - AndroidPackage, - AndroidPackages, - AndroidVirtualDevice -} from './AndroidTypes'; -import { Version } from './Common'; -import { CommonUtils } from './CommonUtils'; -import { PlatformConfig } from './PlatformConfig'; -import { LaunchArgument } from './PreviewConfigFile'; -import { PreviewUtils } from './PreviewUtils'; - -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); - -// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, -// or any library that is using the messages framework can also be loaded this way. -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' -); +import { AndroidPackage, AndroidPackages, AndroidVirtualDevice } from './AndroidTypes.js'; +import { Version } from './Common.js'; +import { CommonUtils } from './CommonUtils.js'; +import { PlatformConfig } from './PlatformConfig.js'; +import { LaunchArgument } from './PreviewConfigFile.js'; +import { PreviewUtils } from './PreviewUtils.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); const LOGGER_NAME = 'force:lightning:local:androidutils'; const WINDOWS_OS = 'win32'; @@ -41,16 +34,16 @@ export enum AndroidSDKRootSource { androidSDKRoot = 'ANDROID_SDK_ROOT' } -export interface AndroidSDKRoot { +export type AndroidSDKRoot = { rootLocation: string; rootSource: AndroidSDKRootSource; -} +}; export class AndroidUtils { /** * Initialized the logger used by AndroidUtils */ - public static initializeLogger(level?: LoggerLevelValue) { + public static initializeLogger(level?: LoggerLevelValue): void { AndroidUtils.logger.setLevel(level); } @@ -79,15 +72,13 @@ export class AndroidUtils { * @returns True if set, False otherwise. */ public static isJavaHomeSet(): boolean { - return process.env.JAVA_HOME - ? process.env.JAVA_HOME.trim().length > 0 - : false; + return process.env.JAVA_HOME ? process.env.JAVA_HOME.trim().length > 0 : false; } /** * Clears all caches that AndroidUtils uses. */ - public static clearCaches() { + public static clearCaches(): void { AndroidUtils.emulatorCommand = undefined; AndroidUtils.androidCmdLineToolsBin = undefined; AndroidUtils.androidPlatformTools = undefined; @@ -109,22 +100,16 @@ export class AndroidUtils { .then((result) => Promise.resolve(result)) .catch((error) => { const e: Error = error; - const stack = e.stack || ''; - const idx = stack.indexOf( - 'java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema' - ); + const stack = e.stack ?? ''; + const idx = stack.indexOf('java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema'); if (!AndroidUtils.isJavaHomeSet()) { return Promise.reject(new SfError('JAVA_HOME is not set.')); } else if (idx !== -1) { - return Promise.reject( - new SfError('unsupported Java version.') - ); + return Promise.reject(new SfError('unsupported Java version.')); } else if (error.status && error.status === 127) { return Promise.reject( - new SfError( - `SDK Manager not found. Expected at ${AndroidUtils.getSdkManagerCommand()}` - ) + new SfError(`SDK Manager not found. Expected at ${AndroidUtils.getSdkManagerCommand()}`) ); } else { return Promise.reject(error); @@ -142,10 +127,7 @@ export class AndroidUtils { return Promise.reject(new SfError('Android SDK root is not set.')); } - return CommonUtils.executeCommandAsync( - `${AndroidUtils.getSdkManagerCommand()} --version` - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ).then((result) => + return CommonUtils.executeCommandAsync(`${AndroidUtils.getSdkManagerCommand()} --version`).then(() => Promise.resolve(AndroidUtils.getAndroidCmdLineToolsBin()) ); } @@ -163,9 +145,7 @@ export class AndroidUtils { return CommonUtils.executeCommandAsync( `${AndroidUtils.getAdbShellCommand()} --version` // eslint-disable-next-line @typescript-eslint/no-unused-vars - ).then((result) => - Promise.resolve(AndroidUtils.getAndroidPlatformTools()) - ); + ).then((result) => Promise.resolve(AndroidUtils.getAndroidPlatformTools())); } /** @@ -179,27 +159,17 @@ export class AndroidUtils { } if (AndroidUtils.isCached()) { - this.logger.debug( - 'fetchInstalledPackages(): returning cached packages.' - ); + this.logger.debug('fetchInstalledPackages(): returning cached packages.'); return Promise.resolve(AndroidUtils.packageCache); } - this.logger.debug( - 'fetchInstalledPackages(): Packages not cached. Retrieving.' - ); - return CommonUtils.executeCommandAsync( - `${AndroidUtils.getSdkManagerCommand()} --list` - ).then((result) => { + this.logger.debug('fetchInstalledPackages(): Packages not cached. Retrieving.'); + return CommonUtils.executeCommandAsync(`${AndroidUtils.getSdkManagerCommand()} --list`).then((result) => { if (result.stdout && result.stdout.length > 0) { - const packages = AndroidPackages.parseRawPackagesString( - result.stdout - ); + const packages = AndroidPackages.parseRawPackagesString(result.stdout); AndroidUtils.packageCache = packages; } - this.logger.debug( - `fetchInstalledPackages(): Retrieved packages:\n${AndroidUtils.packageCache}` - ); + this.logger.debug(`fetchInstalledPackages(): Retrieved packages:\n${AndroidUtils.packageCache.toString()}`); return Promise.resolve(AndroidUtils.packageCache); }); } @@ -210,9 +180,7 @@ export class AndroidUtils { * @returns The supported Android device types. */ public static async getSupportedDevices(): Promise { - return Promise.resolve( - PlatformConfig.androidConfig().supportedDeviceTypes - ); + return Promise.resolve(PlatformConfig.androidConfig().supportedDeviceTypes); } /** @@ -222,14 +190,10 @@ export class AndroidUtils { */ public static async fetchEmulators(): Promise { let devices: AndroidVirtualDevice[] = []; - return CommonUtils.executeCommandAsync( - AndroidUtils.getAvdManagerCommand() + ' list avd' - ) + return CommonUtils.executeCommandAsync(AndroidUtils.getAvdManagerCommand() + ' list avd') .then((result) => { if (result.stdout && result.stdout.length > 0) { - devices = AndroidVirtualDevice.parseRawString( - result.stdout - ); + devices = AndroidVirtualDevice.parseRawString(result.stdout); } return Promise.resolve(devices); }) @@ -244,25 +208,21 @@ export class AndroidUtils { * * @returns An AndroidVirtualDevice object for the specified virtual device, or undefined if device not found. */ - public static async fetchEmulator( - emulatorName: string - ): Promise { - return AndroidUtils.resolveEmulatorImage(emulatorName).then( - async (resolvedEmulator) => { - if (!resolvedEmulator) { - return Promise.resolve(undefined); - } + public static async fetchEmulator(emulatorName: string): Promise { + return AndroidUtils.resolveEmulatorImage(emulatorName).then(async (resolvedEmulator) => { + if (!resolvedEmulator) { + return Promise.resolve(undefined); + } - const emulators = await AndroidUtils.fetchEmulators(); - for (const emulator of emulators) { - if (emulator.name === resolvedEmulator) { - return Promise.resolve(emulator); - } + const emulators = await AndroidUtils.fetchEmulators(); + for (const emulator of emulators) { + if (emulator.name === resolvedEmulator) { + return Promise.resolve(emulator); } - - return Promise.resolve(undefined); } - ); + + return Promise.resolve(undefined); + }); } /** @@ -275,19 +235,12 @@ export class AndroidUtils { public static async fetchAllAvailableApiPackages( mustHaveSupportedEmulatorImages: boolean ): Promise { - const configuredMinSupportedRuntime = - PlatformConfig.androidConfig().minSupportedRuntime; + const configuredMinSupportedRuntime = PlatformConfig.androidConfig().minSupportedRuntime; const minSupportedRuntime = Version.from(configuredMinSupportedRuntime); if (minSupportedRuntime === null) { - return Promise.reject( - new SfError( - `${configuredMinSupportedRuntime} is not a supported version format.` - ) - ); + return Promise.reject(new SfError(`${configuredMinSupportedRuntime} is not a supported version format.`)); } - this.logger.debug( - `fetchAllAvailableApiPackages(): minSupportedRuntime: ${minSupportedRuntime}` - ); + this.logger.debug(`fetchAllAvailableApiPackages(): minSupportedRuntime: ${minSupportedRuntime.toString()}`); return AndroidUtils.fetchInstalledPackages() .then((allPackages) => { @@ -303,7 +256,7 @@ export class AndroidUtils { Version.sameOrNewer(pkg.version, minSupportedRuntime) ); this.logger.debug( - `fetchAllAvailableApiPackages(): Installed platforms with versions >= ${minSupportedRuntime}:\n${AndroidPackages.packageArrayAsString( + `fetchAllAvailableApiPackages(): Installed platforms with versions >= ${minSupportedRuntime.toString()}:\n${AndroidPackages.packageArrayAsString( matchingPlatforms )}` ); @@ -327,25 +280,22 @@ export class AndroidUtils { if (mustHaveSupportedEmulatorImages) { for (const pkg of matchingPlatforms) { try { - const emulatorImage = - await AndroidUtils.packageWithRequiredEmulatorImages( - pkg - ); + const emulatorImage = await AndroidUtils.packageWithRequiredEmulatorImages(pkg); // if it has a supported emulator image then include it if (emulatorImage) { - this.logger.debug( - `Found supported emulator for platform: ${pkg}` - ); + this.logger.debug(`Found supported emulator for platform: ${pkg.toString()}`); results.push(pkg); } else { this.logger.debug( - `fetchAllAvailableApiPackages(): Package does not have an associated emulator image: ${pkg}` + `fetchAllAvailableApiPackages(): Package does not have an associated emulator image: ${pkg.toString()}` ); } } catch (error) { this.logger.warn( - `Could not find emulator image for Android API package ${pkg.path}: ${error}` + `Could not find emulator image for Android API package ${pkg.path}: ${( + error as Error + ).toString()}` ); } } @@ -354,9 +304,7 @@ export class AndroidUtils { } // Sort the packages with latest version by negating the comparison result - results.sort( - (a, b) => Version.compare(a.version, b.version) * -1 - ); + results.sort((a, b) => Version.compare(a.version, b.version) * -1); return Promise.resolve(results); }); } @@ -369,9 +317,7 @@ export class AndroidUtils { * on user's machine is fetched. Defaults to undefined. * @returns A supported Android API package. */ - public static async fetchSupportedAndroidAPIPackage( - apiLevel?: string - ): Promise { + public static async fetchSupportedAndroidAPIPackage(apiLevel?: string): Promise { let targetRuntime: Version | string | undefined; if (apiLevel !== undefined) { const parsedVersion = Version.from(apiLevel); @@ -385,36 +331,31 @@ export class AndroidUtils { } } - return AndroidUtils.fetchAllAvailableApiPackages(true).then( - (packages) => { - let matchingPlatforms = packages; - if (targetRuntime) { - matchingPlatforms = packages.filter((pkg) => - Version.same(pkg.version, targetRuntime!) - ); - if (matchingPlatforms.length < 1) { - return Promise.reject( - new SfError( - `Could not locate Android API package (with matching emulator images) for API level ${apiLevel}.` - ) - ); - } - } - + return AndroidUtils.fetchAllAvailableApiPackages(true).then((packages) => { + let matchingPlatforms = packages; + if (targetRuntime) { + matchingPlatforms = packages.filter((pkg) => Version.same(pkg.version, targetRuntime)); if (matchingPlatforms.length < 1) { return Promise.reject( new SfError( - `Could not locate a supported Android API package with matching emulator images. Minimum supported Android API package version is ${ - PlatformConfig.androidConfig() - .minSupportedRuntime - }` + `Could not locate Android API package (with matching emulator images) for API level ${apiLevel}.` ) ); } + } - return Promise.resolve(matchingPlatforms[0]); + if (matchingPlatforms.length < 1) { + return Promise.reject( + new SfError( + `Could not locate a supported Android API package with matching emulator images. Minimum supported Android API package version is ${ + PlatformConfig.androidConfig().minSupportedRuntime + }` + ) + ); } - ); + + return Promise.resolve(matchingPlatforms[0]); + }); } /** @@ -424,17 +365,13 @@ export class AndroidUtils { * When not defined, the latest supported API level that is installed on user's machine is used. Defaults to undefined. * @returns Android package of a supported emulator. */ - public static async fetchSupportedEmulatorImagePackage( - apiLevel?: string - ): Promise { + public static async fetchSupportedEmulatorImagePackage(apiLevel?: string): Promise { let installedAndroidPackage: AndroidPackage; return AndroidUtils.fetchSupportedAndroidAPIPackage(apiLevel) .then((pkg) => { installedAndroidPackage = pkg; - return AndroidUtils.packageWithRequiredEmulatorImages( - installedAndroidPackage - ); + return AndroidUtils.packageWithRequiredEmulatorImages(installedAndroidPackage); }) .then((emulatorImage) => { if (emulatorImage) { @@ -444,18 +381,14 @@ export class AndroidUtils { new SfError( `Could not locate an emulator image. Requires any one of these [${PlatformConfig.androidConfig().supportedImages.join( ',' - )} for ${[installedAndroidPackage.platformAPI]}]` + )} for ${installedAndroidPackage.platformAPI}]` ) ); } }) .catch((error) => { - this.logger.error( - `Could not find android emulator packages.\n${error}` - ); - return Promise.reject( - new SfError(`Could not find android emulator packages.`) - ); + this.logger.error(`Could not find android emulator packages.\n${error}`); + return Promise.reject(new SfError('Could not find android emulator packages.')); }); } @@ -466,9 +399,8 @@ export class AndroidUtils { * @returns True if an emulator with a given name is available, False otherwise. */ public static async hasEmulator(emulatorName: string): Promise { - return AndroidUtils.resolveEmulatorImage(emulatorName).then( - (resolvedEmulator) => - Promise.resolve(resolvedEmulator !== undefined) + return AndroidUtils.resolveEmulatorImage(emulatorName).then((resolvedEmulator) => + Promise.resolve(resolvedEmulator !== undefined) ); } @@ -514,7 +446,7 @@ export class AndroidUtils { child.stderr.on('error', (err) => { reject( new SfError( - `Could not create emulator. Command failed: ${createAvdCommand}\n${err}` + `Could not create emulator. Command failed: ${createAvdCommand}\n${err.message}` ) ); }); @@ -522,16 +454,16 @@ export class AndroidUtils { if (data.includes('Error:')) { reject( new SfError( - `Could not create emulator. Command failed: ${createAvdCommand}\n${data}` + `Could not create emulator. Command failed: ${createAvdCommand}\n${data.toString()}` ) ); } }); } else { - reject(new SfError(`Could not create emulator.`)); + reject(new SfError('Could not create emulator.')); } } catch (error) { - reject(new SfError(`Could not create emulator. ${error}`)); + reject(new SfError(`Could not create emulator. ${(error as Error).toString()}`)); } // eslint-disable-next-line @typescript-eslint/no-unused-vars }).then((resolve) => AndroidUtils.updateEmulatorConfig(resolvedName)); @@ -545,35 +477,24 @@ export class AndroidUtils { * @param waitForBoot Optional boolean indicating whether it should wait for the device to finish booting up. Defaults to true. * @returns The ADB port that the emulator was launched on. */ - public static async startEmulator( - emulatorName: string, - writable = false, - waitForBoot = true - ): Promise { + public static async startEmulator(emulatorName: string, writable = false, waitForBoot = true): Promise { let resolvedEmulatorName = emulatorName; return AndroidUtils.resolveEmulatorImage(emulatorName) .then((resolvedEmulator) => { // This shouldn't happen b/c we make sure an emulator exists // before calling this method, but keeping it just in case if (resolvedEmulator === undefined) { - return Promise.reject( - new SfError(`Invalid emulator: ${emulatorName}`) - ); + return Promise.reject(new SfError(`Invalid emulator: ${emulatorName}`)); } resolvedEmulatorName = resolvedEmulator; return AndroidUtils.emulatorHasPort(resolvedEmulator); }) .then(async (port) => { - const resolvedPortNumber = port - ? port - : await AndroidUtils.getNextAvailableAdbPort(); + const resolvedPortNumber = port ? port : await AndroidUtils.getNextAvailableAdbPort(); if (resolvedPortNumber === port) { // already is running on a port - const isWritable = - await AndroidUtils.isEmulatorSystemWritable( - resolvedPortNumber - ); + const isWritable = await AndroidUtils.isEmulatorSystemWritable(resolvedPortNumber); if (writable === false || isWritable === true) { // If we're not asked for a writable, or if it already @@ -582,30 +503,18 @@ export class AndroidUtils { } // mismatch... shut it down and relaunch it in the right mode - CommonUtils.updateCliAction( - messages.getMessage('notWritableSystemShutDownStatus') - ); + CommonUtils.updateCliAction(messages.getMessage('notWritableSystemShutDownStatus')); await AndroidUtils.stopEmulator(resolvedPortNumber); } - let msg = ''; + let msgKey = ''; if (resolvedPortNumber === port) { - msg = writable - ? messages.getMessage('emulatorRelaunchWritableStatus') - : messages.getMessage( - 'emulatorRelaunchNotWritableStatus' - ); + msgKey = writable ? 'emulatorRelaunchWritableStatus' : 'emulatorRelaunchNotWritableStatus'; } else { - msg = writable - ? messages.getMessage('emulatorLaunchWritableStatus') - : messages.getMessage( - 'emulatorLaunchNotWritableStatus' - ); + msgKey = writable ? 'emulatorLaunchWritableStatus' : 'emulatorLaunchNotWritableStatus'; } - CommonUtils.updateCliAction( - util.format(msg, resolvedEmulatorName, resolvedPortNumber) - ); + CommonUtils.updateCliAction(messages.getMessage(msgKey, [resolvedEmulatorName, resolvedPortNumber])); // We intentionally use spawn and ignore stdio here b/c emulator command can // spit out a bunch of output to stderr where they are not really errors. This @@ -620,15 +529,8 @@ export class AndroidUtils { child.unref(); if (waitForBoot) { - CommonUtils.updateCliAction( - util.format( - messages.getMessage('waitForBootStatus'), - resolvedEmulatorName - ) - ); - await AndroidUtils.waitUntilDeviceIsReady( - resolvedPortNumber - ); + CommonUtils.updateCliAction(messages.getMessage('waitForBootStatus', [resolvedEmulatorName])); + await AndroidUtils.waitUntilDeviceIsReady(resolvedPortNumber); } return Promise.resolve(resolvedPortNumber); @@ -641,14 +543,8 @@ export class AndroidUtils { * @param portNumber The ADB port of the emulator. * @param waitForPowerOff Optional boolean indicating whether it should wait for the device to shut down. Defaults to true. */ - public static async stopEmulator( - portNumber: number, - waitForPowerOff = true - ): Promise { - return AndroidUtils.executeAdbCommand( - 'shell reboot -p', - portNumber - ).then(() => { + public static async stopEmulator(portNumber: number, waitForPowerOff = true): Promise { + return AndroidUtils.executeAdbCommand('shell reboot -p', portNumber).then(() => { if (waitForPowerOff) { return AndroidUtils.waitUntilDeviceIsPoweredOff(portNumber); } else { @@ -663,19 +559,14 @@ export class AndroidUtils { * @param portNumber The ADB port of the emulator. * @param waitForBoot Optional boolean indicating whether it should wait for the device to boot up. Defaults to true. */ - public static async rebootEmulator( - portNumber: number, - waitForBoot = true - ): Promise { - return AndroidUtils.executeAdbCommand('shell reboot', portNumber).then( - () => { - if (waitForBoot) { - return AndroidUtils.waitUntilDeviceIsReady(portNumber); - } else { - return Promise.resolve(); - } + public static async rebootEmulator(portNumber: number, waitForBoot = true): Promise { + return AndroidUtils.executeAdbCommand('shell reboot', portNumber).then(() => { + if (waitForBoot) { + return AndroidUtils.waitUntilDeviceIsReady(portNumber); + } else { + return Promise.resolve(); } - ); + }); } /** @@ -684,27 +575,19 @@ export class AndroidUtils { * @param portNumber The ADB port of the Android virtual device. * @returns A boolean indicating whether the emulator on the given port was launched with -writable-system parameter */ - public static async isEmulatorSystemWritable( - portNumber: number - ): Promise { + public static async isEmulatorSystemWritable(portNumber: number): Promise { try { - const emuPath = ( - await AndroidUtils.executeAdbCommand('emu avd path', portNumber) - ) - .split('\n')[0] - .trim(); + const emuPath = (await AndroidUtils.executeAdbCommand('emu avd path', portNumber)).split('\n')[0].trim(); const paramFile = path.join(emuPath, 'emu-launch-params.txt'); const launchParams = fs.readFileSync(paramFile, 'utf8'); - return Promise.resolve(launchParams.includes('-writable-system')); + return launchParams.includes('-writable-system'); } catch (error) { - this.logger.warn( - `Unable to determine if emulator is system writable: ${error}` - ); + this.logger.warn(`Unable to determine if emulator is system writable: ${(error as Error).toString()}`); } - return Promise.resolve(false); + return false; } /** @@ -713,11 +596,9 @@ export class AndroidUtils { * @param portNumber The ADB port of the Android virtual device. * @returns The name of the AVD that is running on that specified port. */ - public static async fetchEmulatorNameFromPort( - portNumber: number - ): Promise { - return AndroidUtils.executeAdbCommand('emu avd name', portNumber).then( - (result) => result.split('\n')[0].trim() + public static async fetchEmulatorNameFromPort(portNumber: number): Promise { + return AndroidUtils.executeAdbCommand('emu avd name', portNumber).then((result) => + result.split('\n')[0].trim() ); } @@ -728,9 +609,7 @@ export class AndroidUtils { * @param emulatorName Name of the emulator to be launched (e.g Pixel XL, Nexus_6_API_30). * @returns The ADB port that the emulator was launched on with writable access. */ - public static async mountAsRootWritableSystem( - emulatorName: string - ): Promise { + public static async mountAsRootWritableSystem(emulatorName: string): Promise { let portNumber = 0; // First attempt to start the emulator with writable system. Since it is already running, startEmulator() will check @@ -741,96 +620,59 @@ export class AndroidUtils { .then((port) => { portNumber = port; // Now that emulator is launched with writable system, run root command - return AndroidUtils.executeAdbCommandWithRetry( - 'root', - portNumber - ); + return AndroidUtils.executeAdbCommandWithRetry('root', portNumber); }) .then(async () => { const emulator = await AndroidUtils.fetchEmulator(emulatorName); if (!emulator) { return Promise.reject( - new SfError( - `Unable to determine device info: Port = ${portNumber} , Name = ${emulatorName}` - ) + new SfError(`Unable to determine device info: Port = ${portNumber} , Name = ${emulatorName}`) ); } // For API 29 or higher there are a few more steps to be done before we can remount after rooting - if ( - Version.sameOrNewer(emulator.apiLevel, Version.from('29')!) - ) { + if (Version.sameOrNewer(emulator.apiLevel, Version.from('29')!)) { const verificationIsAlreadyDisabled = ( - await AndroidUtils.executeAdbCommandWithRetry( - 'shell avbctl get-verification', - portNumber - ) + await AndroidUtils.executeAdbCommandWithRetry('shell avbctl get-verification', portNumber) ).includes('disabled'); const verityIsAlreadyDisabled = ( - await AndroidUtils.executeAdbCommandWithRetry( - 'shell avbctl get-verity', - portNumber - ) + await AndroidUtils.executeAdbCommandWithRetry('shell avbctl get-verity', portNumber) ).includes('disabled'); - if ( - !verificationIsAlreadyDisabled || - !verityIsAlreadyDisabled - ) { - CommonUtils.updateCliAction( - messages.getMessage('disableAVBVerityStatus') - ); + if (!verificationIsAlreadyDisabled || !verityIsAlreadyDisabled) { + CommonUtils.updateCliAction(messages.getMessage('disableAVBVerityStatus')); } if (!verificationIsAlreadyDisabled) { // Disable Android Verified Boot - await AndroidUtils.executeAdbCommandWithRetry( - 'shell avbctl disable-verification', - portNumber - ); + await AndroidUtils.executeAdbCommandWithRetry('shell avbctl disable-verification', portNumber); } if (!verityIsAlreadyDisabled) { // Disable Verity - await AndroidUtils.executeAdbCommandWithRetry( - 'disable-verity', - portNumber - ); + await AndroidUtils.executeAdbCommandWithRetry('disable-verity', portNumber); } // If AVB and Verify were not disabled already and we had to run // commands to disable them, then reboot for changes to take effect. - if ( - !verificationIsAlreadyDisabled || - !verityIsAlreadyDisabled - ) { - CommonUtils.updateCliAction( - messages.getMessage('rebootChangesStatus') - ); + if (!verificationIsAlreadyDisabled || !verityIsAlreadyDisabled) { + CommonUtils.updateCliAction(messages.getMessage('rebootChangesStatus')); // Reboot for changes to take effect await AndroidUtils.rebootEmulator(portNumber, true); // Root again - await AndroidUtils.executeAdbCommandWithRetry( - 'root', - portNumber - ); + await AndroidUtils.executeAdbCommandWithRetry('root', portNumber); } } return Promise.resolve(); }) .then(() => { - CommonUtils.updateCliAction( - messages.getMessage('remountSystemWritableStatus') - ); + CommonUtils.updateCliAction(messages.getMessage('remountSystemWritableStatus')); // Now we're ready to remount and truly have root & writable access to system - return AndroidUtils.executeAdbCommandWithRetry( - 'remount', - portNumber - ); + return AndroidUtils.executeAdbCommandWithRetry('remount', portNumber); }) .then(() => Promise.resolve(portNumber)); } @@ -840,9 +682,7 @@ export class AndroidUtils { * * @param portNumber The ADB port of the Android virtual device. */ - public static async waitUntilDeviceIsReady( - portNumber: number - ): Promise { + public static async waitUntilDeviceIsReady(portNumber: number): Promise { const quote = process.platform === WINDOWS_OS ? '"' : "'"; const command = `wait-for-device shell ${quote}while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;${quote}`; const timeout = PlatformConfig.androidConfig().deviceReadinessWaitTime; @@ -850,10 +690,7 @@ export class AndroidUtils { const waitUntilReadyPromise = CommonUtils.promiseWithTimeout( timeout, AndroidUtils.executeAdbCommand(command, portNumber), - util.format( - messages.getMessage('bootTimeOut'), - `emulator-${portNumber}` - ) + messages.getMessage('bootTimeOut', [`emulator-${portNumber}`]) ); return waitUntilReadyPromise.then(() => Promise.resolve()); @@ -865,9 +702,7 @@ export class AndroidUtils { * * @param portNumber The ADB port of the Android virtual device. */ - public static async waitUntilDeviceIsPoweredOff( - portNumber: number - ): Promise { + public static async waitUntilDeviceIsPoweredOff(portNumber: number): Promise { const command = process.platform === WINDOWS_OS ? `powershell -Command "while($(adb devices | findstr emulator-${portNumber})){ Start-Sleep -s 1 }"` @@ -877,17 +712,14 @@ export class AndroidUtils { const waitUntilReadyPromise = CommonUtils.promiseWithTimeout( timeout, CommonUtils.executeCommandAsync(command), - util.format( - messages.getMessage('powerOffTimeOut'), - `emulator-${portNumber}` - ) + messages.getMessage('powerOffTimeOut', [`emulator-${portNumber}`]) ); - return waitUntilReadyPromise.then(() => { + return waitUntilReadyPromise.then(() => // It may often be the case that the device is removed from 'adb devices' list too quickly // specially on Windows platform. So we also wait an extra 5 seconds. - return CommonUtils.delay(5000); - }); + CommonUtils.delay(5000) + ); } /** @@ -896,10 +728,7 @@ export class AndroidUtils { * @param command The command to be executed. This should not include 'adb' command itself. * @param portNumber The ADB port of the Android virtual device. */ - public static async executeAdbCommand( - command: string, - portNumber: number - ): Promise { + public static async executeAdbCommand(command: string, portNumber: number): Promise { return AndroidUtils.executeAdbCommandWithRetry(command, portNumber, 0); } @@ -926,16 +755,16 @@ export class AndroidUtils { stdout: '', stderr: '' }; - let err: any; + let err: Error | undefined; try { result = await CommonUtils.executeCommandAsync(adbCmd); } catch (error) { - err = error; + err = error as Error; } allOutput = - (err ? err : '') + + (err ? err.toString() : '') + (result.stderr ? '\n' + result.stderr : '') + (result.stdout ? '\n' + result.stdout : ''); @@ -945,9 +774,9 @@ export class AndroidUtils { // all outputs into one and then explicitly check to see if an error has occurred or not. if (allOutput && allOutput.toLowerCase().includes('error:')) { this.logger.warn( - `ADB command '${adbCmd}' failed. Retrying ${ - numRetries - i - } more times.\n${result.stderr}\n${result.stdout}` + `ADB command '${adbCmd}' failed. Retrying ${numRetries - i} more times.\n${result.stderr}\n${ + result.stdout + }` ); if (i < numRetries) { // If we still have more retries left, delay and retry @@ -968,18 +797,13 @@ export class AndroidUtils { * @param url The URL to be launched. * @param portNumber The ADB port of an Android virtual device. */ - public static async launchURLIntent( - url: string, - portNumber: number - ): Promise { + public static async launchURLIntent(url: string, portNumber: number): Promise { const openUrlCommand = `shell am start -a android.intent.action.VIEW -d ${url}`; CommonUtils.startCliAction( messages.getMessage('launchBrowserAction'), - util.format(messages.getMessage('openBrowserWithUrlStatus'), url) - ); - return AndroidUtils.executeAdbCommand(openUrlCommand, portNumber).then( - () => Promise.resolve() + messages.getMessage('openBrowserWithUrlStatus', [url]) ); + return AndroidUtils.executeAdbCommand(openUrlCommand, portNumber).then(() => Promise.resolve()); } /** @@ -1008,21 +832,12 @@ export class AndroidUtils { ): Promise { let thePromise: Promise; if (appBundlePath && appBundlePath.trim().length > 0) { - const installMsg = util.format( - messages.getMessage('installAppStatus'), - appBundlePath.trim() - ); + const installMsg = messages.getMessage('installAppStatus', [appBundlePath.trim()]); AndroidUtils.logger.info(installMsg); - CommonUtils.startCliAction( - messages.getMessage('launchAppAction'), - installMsg - ); + CommonUtils.startCliAction(messages.getMessage('launchAppAction'), installMsg); const pathQuote = process.platform === WINDOWS_OS ? '"' : "'"; const installCommand = `install -r -t ${pathQuote}${appBundlePath.trim()}${pathQuote}`; - thePromise = AndroidUtils.executeAdbCommand( - installCommand, - portNumber - ); + thePromise = AndroidUtils.executeAdbCommand(installCommand, portNumber); } else { thePromise = Promise.resolve(''); } @@ -1051,25 +866,17 @@ export class AndroidUtils { ' -c android.intent.category.LAUNCHER' + ` ${launchArgs}`; - const launchMsg = util.format( - messages.getMessage('launchAppStatus'), - targetApp - ); + const launchMsg = messages.getMessage('launchAppStatus', [targetApp]); AndroidUtils.logger.info(launchMsg); CommonUtils.updateCliAction(launchMsg); - return AndroidUtils.executeAdbCommand( - launchCommand, - portNumber - ); + return AndroidUtils.executeAdbCommand(launchCommand, portNumber); }) .then(() => Promise.resolve()); } // This method is public for testing purposes. - public static async updateEmulatorConfig( - emulatorName: string - ): Promise { + public static async updateEmulatorConfig(emulatorName: string): Promise { return AndroidUtils.readEmulatorConfig(emulatorName).then((config) => { if (config.size === 0) { // If we cannot edit the AVD config, fail silently. @@ -1081,20 +888,14 @@ export class AndroidUtils { // Otherwise the device may not be able to launch via AVD Manager. const networkLatency = config.get('runtime.network.latency'); if (networkLatency) { - config.set( - 'runtime.network.latency', - networkLatency.trim().toLocaleLowerCase() - ); + config.set('runtime.network.latency', networkLatency.trim().toLocaleLowerCase()); } // Ensure value for runtime.network.speed is in lowercase. // Otherwise the device may not be able to launch via AVD Manager. const networkSpeed = config.get('runtime.network.speed'); if (networkSpeed) { - config.set( - 'runtime.network.speed', - networkSpeed.trim().toLocaleLowerCase() - ); + config.set('runtime.network.speed', networkSpeed.trim().toLocaleLowerCase()); } // Utilize hardware. @@ -1103,7 +904,7 @@ export class AndroidUtils { config.set('hw.gpu.enabled', 'yes'); // Give emulator the appropriate skin. - let skinName = config.get('hw.device.name') || ''; + let skinName = config.get('hw.device.name') ?? ''; if (skinName) { if (skinName === 'pixel') { skinName = 'pixel_silver'; @@ -1112,12 +913,7 @@ export class AndroidUtils { } const sdkRoot = AndroidUtils.getAndroidSdkRoot(); config.set('skin.name', skinName); - config.set( - 'skin.path', - `${ - (sdkRoot && sdkRoot.rootLocation) || '' - }/skins/${skinName}` - ); + config.set('skin.path', `${sdkRoot?.rootLocation ?? ''}/skins/${skinName}`); config.set('skin.dynamic', 'yes'); config.set('showDeviceFrame', 'yes'); } @@ -1135,10 +931,7 @@ export class AndroidUtils { public static getAndroidPlatformTools(): string { if (!AndroidUtils.androidPlatformTools) { const sdkRoot = AndroidUtils.getAndroidSdkRoot(); - AndroidUtils.androidPlatformTools = path.join( - (sdkRoot && sdkRoot.rootLocation) || '', - 'platform-tools' - ); + AndroidUtils.androidPlatformTools = path.join(sdkRoot?.rootLocation ?? '', 'platform-tools'); } return AndroidUtils.androidPlatformTools; @@ -1153,12 +946,8 @@ export class AndroidUtils { */ public static getAndroidSdkRoot(): AndroidSDKRoot | undefined { if (!AndroidUtils.sdkRoot) { - const home = - process.env.ANDROID_HOME && process.env.ANDROID_HOME.trim(); - - const root = - process.env.ANDROID_SDK_ROOT && - process.env.ANDROID_SDK_ROOT.trim(); + const home = process.env.ANDROID_HOME?.trim(); + const root = process.env.ANDROID_SDK_ROOT?.trim(); if (home && fs.existsSync(home)) { AndroidUtils.sdkRoot = { @@ -1185,10 +974,7 @@ export class AndroidUtils { public static getAndroidCmdLineToolsBin(): string { if (!AndroidUtils.androidCmdLineToolsBin) { const sdkRoot = AndroidUtils.getAndroidSdkRoot(); - AndroidUtils.androidCmdLineToolsBin = path.join( - (sdkRoot && sdkRoot.rootLocation) || '', - 'cmdline-tools' - ); + AndroidUtils.androidCmdLineToolsBin = path.join(sdkRoot?.rootLocation ?? '', 'cmdline-tools'); // It is possible to install various versions of the command line tools side-by-side // In this case the directory structure would be based on tool versions: @@ -1202,9 +988,7 @@ export class AndroidUtils { // Below, we get the list of all directories, then sort them descending and grab the first one. // This would either resolve to 'latest' or the latest versioned folder name if (fs.existsSync(AndroidUtils.androidCmdLineToolsBin)) { - const content = fs.readdirSync( - AndroidUtils.androidCmdLineToolsBin - ); + const content = fs.readdirSync(AndroidUtils.androidCmdLineToolsBin); if (content && content.length > 0) { content.sort((a, b) => (a > b ? -1 : 1)); @@ -1228,11 +1012,7 @@ export class AndroidUtils { public static getEmulatorCommand(): string { if (!AndroidUtils.emulatorCommand) { const sdkRoot = AndroidUtils.getAndroidSdkRoot(); - AndroidUtils.emulatorCommand = path.join( - (sdkRoot && sdkRoot.rootLocation) || '', - 'emulator', - 'emulator' - ); + AndroidUtils.emulatorCommand = path.join(sdkRoot?.rootLocation ?? '', 'emulator', 'emulator'); } return AndroidUtils.emulatorCommand; @@ -1261,10 +1041,7 @@ export class AndroidUtils { */ public static getAdbShellCommand(): string { if (!AndroidUtils.adbShellCommand) { - AndroidUtils.adbShellCommand = path.join( - AndroidUtils.getAndroidPlatformTools(), - ANDROID_ADB_NAME - ); + AndroidUtils.adbShellCommand = path.join(AndroidUtils.getAndroidPlatformTools(), ANDROID_ADB_NAME); } return AndroidUtils.adbShellCommand; @@ -1290,14 +1067,10 @@ export class AndroidUtils { * Given an emulator name, this method checks to see if it is targeting Google Play or not. * If not then the method resolves otherwise it will reject. */ - public static async ensureDeviceIsNotGooglePlay( - emulatorName: string - ): Promise { + public static async ensureDeviceIsNotGooglePlay(emulatorName: string): Promise { return AndroidUtils.fetchEmulator(emulatorName).then((device) => { if (!device) { - return Promise.reject( - new SfError(`Device ${emulatorName} not found.`) - ); + return Promise.reject(new SfError(`Device ${emulatorName} not found.`)); } else if (device.target.toLowerCase().includes('play')) { return Promise.reject( new SfError( @@ -1320,9 +1093,7 @@ export class AndroidUtils { private static sdkManagerCommand: string | undefined; private static sdkRoot: AndroidSDKRoot | undefined; - private static async emulatorHasPort( - emulatorName: string - ): Promise { + private static async emulatorHasPort(emulatorName: string): Promise { try { const ports = await AndroidUtils.getAllCurrentlyUsedAdbPorts(); for (const port of ports) { @@ -1332,9 +1103,7 @@ export class AndroidUtils { } } } catch (error) { - this.logger.warn( - `Unable to determine if emulator is already running: ${error}` - ); + this.logger.warn(`Unable to determine if emulator is already running: ${(error as Error).toString()}`); } return null; @@ -1358,9 +1127,7 @@ export class AndroidUtils { if (result.stdout) { ports = result.stdout .split('\n') - .filter((avd: string) => - avd.toLowerCase().startsWith('emulator') - ) + .filter((avd: string) => avd.toLowerCase().startsWith('emulator')) .map((value) => { const array = value.match(/\d+/); const portNumbers = array ? array.map(Number) : [0]; @@ -1374,16 +1141,11 @@ export class AndroidUtils { private static async packageWithRequiredEmulatorImages( androidPackage: AndroidPackage ): Promise { - const installedSystemImages = - await AndroidUtils.fetchInstalledSystemImages(); + const installedSystemImages = await AndroidUtils.fetchInstalledSystemImages(); const platformAPI = androidPackage.platformAPI; - const supportedImages = - PlatformConfig.androidConfig().supportedImages.join('|'); - const supportedArchitectures = - PlatformConfig.androidConfig().supportedArchitectures.join('|'); - const regex = RegExp( - `.*(${platformAPI}.*);(${supportedImages});(${supportedArchitectures})` - ); + const supportedImages = PlatformConfig.androidConfig().supportedImages.join('|'); + const supportedArchitectures = PlatformConfig.androidConfig().supportedArchitectures.join('|'); + const regex = RegExp(`.*(${platformAPI}.*);(${supportedImages});(${supportedArchitectures})`); for (const img of installedSystemImages) { if (img.path.match(regex) !== null) { @@ -1394,11 +1156,7 @@ export class AndroidUtils { return Promise.resolve(undefined); } - private static systemImagePath( - platformAPI: string, - emuImage: string, - abi: string - ): string { + private static systemImagePath(platformAPI: string, emuImage: string, abi: string): string { const pathName = `system-images;${platformAPI};${emuImage};${abi}`; if (process.platform === WINDOWS_OS) { return pathName; @@ -1406,19 +1164,13 @@ export class AndroidUtils { return `'${pathName}'`; } - private static async fetchInstalledSystemImages(): Promise< - AndroidPackage[] - > { - return AndroidUtils.fetchInstalledPackages().then( - (packages) => packages.systemImages - ); + private static async fetchInstalledSystemImages(): Promise { + return AndroidUtils.fetchInstalledPackages().then((packages) => packages.systemImages); } // NOTE: detaching a process in windows seems to detach the streams. Prevent spawn from detaching when // used in Windows OS for special handling of some commands (adb). - private static spawnChild( - command: string - ): childProcess.ChildProcessWithoutNullStreams { + private static spawnChild(command: string): childProcess.ChildProcessWithoutNullStreams { if (process.platform === WINDOWS_OS) { const child = childProcess.spawn(command, { shell: true }); return child; @@ -1435,23 +1187,16 @@ export class AndroidUtils { // The user can provide us with emulator name as an ID (Pixel_XL) or as display name (Pixel XL). // This method can be used to resolve a display name back to an id since emulator commands // work with IDs not display names. - private static async resolveEmulatorImage( - emulatorName: string - ): Promise { + private static async resolveEmulatorImage(emulatorName: string): Promise { const emulatorDisplayName = emulatorName.replace(/[_-]/gi, ' ').trim(); // eg. Pixel_XL --> Pixel XL, tv-emulator --> tv emulator - return CommonUtils.executeCommandAsync( - `${AndroidUtils.getEmulatorCommand()} -list-avds` - ) + return CommonUtils.executeCommandAsync(`${AndroidUtils.getEmulatorCommand()} -list-avds`) .then((result) => { const listOfAVDs = result.stdout.split('\n'); for (const avd of listOfAVDs) { const avdDisplayName = avd.replace(/[_-]/gi, ' ').trim(); - if ( - avd === emulatorName || - avdDisplayName === emulatorDisplayName - ) { + if (avd === emulatorName || avdDisplayName === emulatorDisplayName) { return Promise.resolve(avd.trim()); } } @@ -1463,21 +1208,13 @@ export class AndroidUtils { }); } - private static async readEmulatorConfig( - emulatorName: string - ): Promise> { + private static readEmulatorConfig(emulatorName: string): Promise> { const filePath = CommonUtils.resolveUserHomePath( - path.join( - `~`, - '.android', - 'avd', - `${emulatorName}.avd`, - 'config.ini' - ) + path.join('~', '.android', 'avd', `${emulatorName}.avd`, 'config.ini') ); try { const configFile = fs.readFileSync(filePath, 'utf8'); - const configMap = new Map(); + const configMap = new Map(); for (const line of configFile.split('\n')) { const config = line.split('='); if (config.length > 1) { @@ -1485,41 +1222,28 @@ export class AndroidUtils { } } - return configMap; + return Promise.resolve(configMap); } catch (error) { - AndroidUtils.logger.warn( - `Unable to read emulator config ${filePath}: ${error}` - ); - return new Map(); + AndroidUtils.logger.warn(`Unable to read emulator config ${filePath}: ${(error as Error).toString()}`); + return Promise.resolve(new Map()); } } - private static writeEmulatorConfig( - emulatorName: string, - config: Map - ): void { + private static writeEmulatorConfig(emulatorName: string, config: Map): void { let configString = ''; // This looks wrong, but the callback signature of forEach is function(value,key,map). config.forEach((value, key) => { configString += key + '=' + value + '\n'; }); const filePath = CommonUtils.resolveUserHomePath( - path.join( - `~`, - '.android', - 'avd', - `${emulatorName}.avd`, - 'config.ini' - ) + path.join('~', '.android', 'avd', `${emulatorName}.avd`, 'config.ini') ); try { fs.writeFileSync(filePath, configString, 'utf8'); } catch (error) { // If we cannot edit the AVD config, fail silently. // This will be a degraded experience but should still work. - AndroidUtils.logger.warn( - `Unable to write emulator config to ${filePath}: ${error}` - ); + AndroidUtils.logger.warn(`Unable to write emulator config to ${filePath}: ${(error as Error).toString()}`); } } } diff --git a/src/common/BaseCommand.ts b/src/common/BaseCommand.ts index 14b1cb8..101745e 100644 --- a/src/common/BaseCommand.ts +++ b/src/common/BaseCommand.ts @@ -1,3 +1,11 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable class-methods-use-this */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/member-ordering */ +/* eslint-disable no-underscore-dangle */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + /* * Copyright (c) 2023, salesforce.com, inc. * All rights reserved. @@ -6,14 +14,11 @@ */ import { SfCommand } from '@salesforce/sf-plugins-core'; import { Logger, LoggerLevel } from '@salesforce/core'; -import { CommandLineUtils } from './Common'; -import { LoggerSetup } from './LoggerSetup'; -import { HasRequirements, CommandRequirements } from './Requirements'; - -export abstract class BaseCommand - extends SfCommand - implements HasRequirements -{ +import { CommandLineUtils } from './Common.js'; +import { LoggerSetup } from './LoggerSetup.js'; +import { HasRequirements, CommandRequirements } from './Requirements.js'; + +export abstract class BaseCommand extends SfCommand implements HasRequirements { protected _commandName = 'BaseCommand'; public get commandName(): string { return this._commandName; @@ -69,8 +74,8 @@ export abstract class BaseCommand // if a flag has a `validate` function defined. If so then we // mark it to use `CommandLineUtils.flagParser` as a parser, // which will execute the validation function. - private injectFlagParser() { - const flags = (this.constructor).flags; + private injectFlagParser(): void { + const flags = (this.constructor as typeof SfCommand).flags; const flagEntries = Object.entries(flags); flagEntries.forEach((flag) => { // Object.entries returns an array of KeyValue pairs where item[0] @@ -82,10 +87,9 @@ export abstract class BaseCommand // If so then we override the default parser with our parser which runs // the validation check and only accepts the flag value if validation passes. const configEntries = Object.entries(flag[1]); - const hasValidate = configEntries.find( - (keyValuePair) => keyValuePair[0] === 'validate' - ); + const hasValidate = configEntries.find((keyValuePair) => keyValuePair[0] === 'validate'); if (hasValidate) { + // eslint-disable-next-line @typescript-eslint/unbound-method, no-param-reassign flag[1].parse = CommandLineUtils.flagParser; } }); diff --git a/src/common/Common.ts b/src/common/Common.ts index af3866a..033a210 100644 --- a/src/common/Common.ts +++ b/src/common/Common.ts @@ -1,3 +1,9 @@ +/* eslint-disable @typescript-eslint/member-ordering */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/unbound-method */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. @@ -6,22 +12,10 @@ */ import { Flags, SfCommand } from '@salesforce/sf-plugins-core'; import { Logger, LoggerLevel, Messages, SfError } from '@salesforce/core'; -import util from 'util'; -import { - CustomOptions, - FlagParserContext, - OptionFlag -} from '@oclif/core/lib/interfaces/parser'; - -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); - -// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, -// or any library that is using the messages framework can also be loaded this way. -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' -); +import { CustomOptions, FlagParserContext, OptionFlag } from '@oclif/core/lib/interfaces/parser.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); const LOGGER_NAME = 'force:lightning:local:common'; @@ -29,10 +23,7 @@ export class MapUtils { /** * Enables filtering operation on Map types. */ - public static filter( - map: Map, - predicate: (k: K, v: V) => boolean - ) { + public static filter(map: Map, predicate: (k: K, v: V) => boolean): Map { const aMap = new Map(); if (map == null) { return aMap; @@ -47,12 +38,11 @@ export class MapUtils { } } -// tslint:disable-next-line: max-classes-per-file export class SetUtils { /** * Enables filtering operation on Set types. */ - public static filter(set: Set, predicate: (v: V) => boolean) { + public static filter(set: Set, predicate: (v: V) => boolean): Set { const aSet = new Set(); if (set == null) { return aSet; @@ -74,7 +64,6 @@ export enum FlagsConfigType { Json } -// tslint:disable-next-line: max-classes-per-file export class CommandLineUtils { public static IOS_FLAG = 'ios'; public static ANDROID_FLAG = 'android'; @@ -82,6 +71,7 @@ export class CommandLineUtils { /** * Checks to see if a flag is targeting iOS. + * * @param input The input flag. * @returns True if flag is targeting iOS. */ @@ -91,28 +81,27 @@ export class CommandLineUtils { /** * Checks to see if a flag is targeting Android. + * * @param input The input flag. * @returns True if flag is targeting Android. */ public static platformFlagIsAndroid(input: string): boolean { - return ( - (input ?? '').trim().toLowerCase() === CommandLineUtils.ANDROID_FLAG - ); + return (input ?? '').trim().toLowerCase() === CommandLineUtils.ANDROID_FLAG; } /** * Checks to see if a flag is targeting Desktop. + * * @param input The input flag. * @returns True if flag is targeting Desktop. */ public static platformFlagIsDesktop(input: string): boolean { - return ( - (input ?? '').trim().toLowerCase() === CommandLineUtils.DESKTOP_FLAG - ); + return (input ?? '').trim().toLowerCase() === CommandLineUtils.DESKTOP_FLAG; } /** * Helper method for resolving flag values. + * * @param flag The input flag. * @param defaultValue The default value for a flag. * @returns If the input flag can be cast to a string that is not undefined/null/empty then @@ -129,35 +118,26 @@ export class CommandLineUtils { /** * Checks to see if a platform flag has a valid value. + * * @param platformFlag The platform flag. * @param includeDesktop Indicates whether Desktop is allowed as a target platform. Defaults to false. * @returns True if flag is valid. */ - public static platformFlagIsValid( - platformFlag: string, - includeDesktop = false - ) { + public static platformFlagIsValid(platformFlag: string, includeDesktop = false): boolean { return ( CommandLineUtils.platformFlagIsIOS(platformFlag) || CommandLineUtils.platformFlagIsAndroid(platformFlag) || - (includeDesktop && - CommandLineUtils.platformFlagIsDesktop(platformFlag)) + (includeDesktop && CommandLineUtils.platformFlagIsDesktop(platformFlag)) ); } - public static createFlag( - type: FlagsConfigType, - isRequired: boolean, - supportsDesktop = false - ): any { + public static createFlag(type: FlagsConfigType, isRequired: boolean, supportsDesktop = false): any { switch (type) { case FlagsConfigType.ApiLevel: return { apilevel: Flags.string({ char: 'l', - description: messages.getMessage( - 'apiLevelFlagDescription' - ), + description: messages.getMessage('apiLevelFlagDescription'), required: isRequired, validate: CommandLineUtils.validateApiLevelFlag }) @@ -167,12 +147,8 @@ export class CommandLineUtils { platform: Flags.string({ char: 'p', description: supportsDesktop - ? messages.getMessage( - 'platformFlagIncludingDesktopDescription' - ) - : messages.getMessage( - 'platformFlagMobileOnlyDescription' - ), + ? messages.getMessage('platformFlagIncludingDesktopDescription') + : messages.getMessage('platformFlagMobileOnlyDescription'), required: isRequired, validate: supportsDesktop ? CommandLineUtils.validatePlatformFlagIncludingDesktop @@ -182,14 +158,10 @@ export class CommandLineUtils { case FlagsConfigType.LogLevel: return { loglevel: Flags.string({ - description: messages.getMessage( - 'logLevelFlagDescription' - ), + description: messages.getMessage('logLevelFlagDescription'), required: false, default: LoggerLevel[LoggerLevel.WARN], - validate: (level: string) => - level && - (LoggerLevel)[level.trim().toUpperCase()] + validate: (level: string) => level && (LoggerLevel as any)[level.trim().toUpperCase()] }) }; case FlagsConfigType.Json: @@ -213,24 +185,18 @@ export class CommandLineUtils { if (validateFunction && !validateFunction(input)) { // get the examples array (if any) and reduce it // to only keep the string examples - const examples = (( - context.constructor - )).examples?.reduce((results: string[], item: any) => { - if (typeof item === 'string') { - results.push(item.toString()); - } - return results; - }, []); + const examples = (context.constructor as typeof SfCommand).examples?.reduce( + (results: string[], item: any) => { + if (typeof item === 'string') { + results.push(item.toString()); + } + return results; + }, + [] + ); return Promise.reject( - new SfError( - util.format( - messages.getMessage('error:invalidFlagValue'), - input - ), - undefined, - examples - ) + new SfError(messages.getMessage('error:invalidFlagValue', [input]), undefined, examples) ); } @@ -250,11 +216,11 @@ export class CommandLineUtils { } } -// tslint:disable-next-line: max-classes-per-file export class Version { /** * Creates a Version object from a string that follows a basic versioning syntax * of x[.y[.z]] or x[-y[-z]]. + * * @param input A version string that follows the basic syntax of x[.y[.z]] or x[-y[-z]]. * @returns A Version object from the parsed data, or null if the string does not follow * the format. @@ -277,18 +243,9 @@ export class Version { return null; } - const major = - versionMatch.groups?.Major !== undefined - ? Number.parseInt(versionMatch.groups.Major, 10) - : 0; - const minor = - versionMatch.groups?.Minor !== undefined - ? Number.parseInt(versionMatch.groups.Minor, 10) - : 0; - const patch = - versionMatch.groups?.Patch !== undefined - ? Number.parseInt(versionMatch.groups.Patch, 10) - : 0; + const major = versionMatch.groups?.Major !== undefined ? Number.parseInt(versionMatch.groups.Major, 10) : 0; + const minor = versionMatch.groups?.Minor !== undefined ? Number.parseInt(versionMatch.groups.Minor, 10) : 0; + const patch = versionMatch.groups?.Patch !== undefined ? Number.parseInt(versionMatch.groups.Patch, 10) : 0; return new Version(major, minor, patch); } @@ -297,7 +254,7 @@ export class Version { public readonly minor: number; public readonly patch: number; - constructor(major: number, minor: number, patch: number) { + public constructor(major: number, minor: number, patch: number) { this.major = major; this.minor = minor; this.patch = patch; @@ -305,6 +262,7 @@ export class Version { /** * Compares 2 version objects and returns true if they are the same. + * * @param v1 The first version object (can be of type Version or string) * @param v2 The second version object (can be of type Version or string) * @returns True if the inputs represent the same version. @@ -316,20 +274,19 @@ export class Version { /** * Compares 2 version objects and returns true if the first version is same or newer than the second version. + * * @param v1 The first version object (can be of type Version or string) * @param v2 The second version object (can be of type Version or string) * @returns True if the first version is same or newer than the second version. * @throws comparing 2 versions of type string is not supported and an error will be thrown. */ - public static sameOrNewer( - v1: Version | string, - v2: Version | string - ): boolean { + public static sameOrNewer(v1: Version | string, v2: Version | string): boolean { return Version.compare(v1, v2) >= 0; } /** * Compares 2 version objects and returns a number indicating the comparison result. + * * @param v1 The first version object (can be of type Version or string) * @param v2 The second version object (can be of type Version or string) * @returns -1 if first version is older, 0 if it is the same, and 1 if it is newer. @@ -350,7 +307,7 @@ export class Version { ) { return 0; } - throw new Error('Comparing 2 codename versions is not supported.'); + throw new Error(messages.getMessage('error:version:codename:comparing')); } else if (version1 === null) { // v1 is a codenamed version and since on Android codenamed versions are always // the "bleeding edge" (i.e the latest) then it will always be newer than v2. @@ -361,10 +318,8 @@ export class Version { return -1; } else { // they are both semver so convert to number and compare - const num1 = - version1.major * 100 + version1.minor * 10 + version1.patch; - const num2 = - version2.major * 100 + version2.minor * 10 + version2.patch; + const num1 = version1.major * 100 + version1.minor * 10 + version1.patch; + const num2 = version2.major * 100 + version2.minor * 10 + version2.patch; if (num1 === num2) { return 0; @@ -378,6 +333,7 @@ export class Version { /** * Logging-friendly format is x.y.z. + * * @returns String representation of the version, i.e. x.y.z. */ public toString(): string { diff --git a/src/common/CommonUtils.ts b/src/common/CommonUtils.ts index 5a2f38c..2070083 100644 --- a/src/common/CommonUtils.ts +++ b/src/common/CommonUtils.ts @@ -1,32 +1,31 @@ +/* eslint-disable @typescript-eslint/member-ordering */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ +import * as childProcess from 'node:child_process'; +import fs from 'node:fs'; +import http from 'node:http'; +import https from 'node:https'; +import util from 'node:util'; +import path from 'node:path'; +import os from 'node:os'; import { Logger, LoggerLevelValue, Messages, SfError } from '@salesforce/core'; -import * as childProcess from 'child_process'; import { ux } from '@oclif/core'; -import fs from 'fs'; -import http from 'http'; -import https from 'https'; -import util from 'util'; -import path from 'path'; -import os from 'os'; type StdioOptions = childProcess.StdioOptions; const LOGGER_NAME = 'force:lightning:local:commonutils'; -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); - -// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, -// or any library that is using the messages framework can also be loaded this way. -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); export class CommonUtils { public static DEFAULT_LWC_SERVER_PORT = '3333'; @@ -34,7 +33,7 @@ export class CommonUtils { /** * Initializes the logger used by CommonUtils for logging activities. */ - public static initializeLogger(level?: LoggerLevelValue) { + public static initializeLogger(level?: LoggerLevelValue): void { CommonUtils.logger.setLevel(level); } @@ -86,10 +85,11 @@ export class CommonUtils { * @param action Title of the action. * @param status Optional status message for the action. */ - public static startCliAction(action: string, status?: string) { + public static startCliAction(action: string, status?: string): void { if (process.stdout?.isTTY === true) { ux.action.start(action, status, { stdout: true }); } else { + // eslint-disable-next-line no-console console.log(`${action}... ${status ?? ''}`); } } @@ -100,16 +100,15 @@ export class CommonUtils { * * @param status Status message for the action. */ - public static updateCliAction(status: string) { + public static updateCliAction(status: string): void { const task = ux.action.task; if (!task || !task.active) { CommonUtils.startCliAction(status); + } else if (process.stdout?.isTTY === true) { + task.status = status; } else { - if (process.stdout?.isTTY === true) { - task.status = status; - } else { - console.log(`${task.action}... ${status ?? ''}`); - } + // eslint-disable-next-line no-console + console.log(`${task.action}... ${status ?? ''}`); } } @@ -118,7 +117,7 @@ export class CommonUtils { * * @param message Optional status message for the action. */ - public static stopCliAction(message?: string) { + public static stopCliAction(message?: string): void { ux.action.stop(message); } @@ -132,11 +131,7 @@ export class CommonUtils { public static resolveUserHomePath(inputPath: string): string { let newPath = inputPath.trim(); if (newPath.startsWith('~')) { - const userHome = - process.env.HOME || - process.env.HOMEPATH || - process.env.USERPROFILE || - ''; + const userHome = process.env.HOME ?? process.env.HOMEPATH ?? process.env.USERPROFILE ?? ''; newPath = newPath.replace('~', userHome); } return newPath; @@ -148,6 +143,7 @@ export class CommonUtils { * @param file The path to the JSON file. * @returns Content of the file as JSON object. */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any public static loadJsonFromFile(file: string): any { const fileContent = fs.readFileSync(file, 'utf8'); const json = JSON.parse(fileContent); @@ -165,10 +161,7 @@ export class CommonUtils { * @param variables List of token names and values. * @returns Resolved string. */ - public static replaceTokens( - template: string, - variables: { [name: string]: string } - ): string { + public static replaceTokens(template: string, variables: { [name: string]: string }): string { const regex = /\$\{\w+\}/g; return template.replace(regex, (match) => { const key = match.slice(2, -1); @@ -189,21 +182,15 @@ export class CommonUtils { const folderPrefix = 'lwc-mobile-'; const tempFolderPath = path.join(os.tmpdir(), folderPrefix); return mkdtemp(tempFolderPath) - .then((folder) => { - return Promise.resolve(folder); - }) - .catch((error) => { - return Promise.reject( + .then((folder) => Promise.resolve(folder)) + .catch((error) => + Promise.reject( new SfError( - util.format( - 'Could not create a temp folder at %s: %s', - tempFolderPath, - error - ), + messages.getMessage('error:tempfolder:create', [tempFolderPath, error]), 'lwc-dev-mobile-core' ) - ); - }); + ) + ); } /** @@ -237,35 +224,29 @@ export class CommonUtils { * @param command The command to be executed. * @returns A promise containing the results of stdout and stderr */ - public static async executeCommandAsync( - command: string - ): Promise<{ stdout: string; stderr: string }> { - return new Promise<{ stdout: string; stderr: string }>( - (resolve, reject) => { - CommonUtils.logger.debug(`Executing command: '${command}'`); - childProcess.exec(command, (error, stdout, stderr) => { - if (error) { - CommonUtils.logger.error( - `Error executing command '${command}':` - ); - - // also include stderr & stdout for more detailed error - let msg = error.message; - if (stderr && stderr.length > 0) { - msg = `${msg}\nstderr:\n${stderr}`; - } - if (stdout && stdout.length > 0) { - msg = `${msg}\nstdout:\n${stdout}`; - } - - CommonUtils.logger.error(msg); - reject(error); - } else { - resolve({ stdout, stderr }); + public static async executeCommandAsync(command: string): Promise<{ stdout: string; stderr: string }> { + return new Promise<{ stdout: string; stderr: string }>((resolve, reject) => { + CommonUtils.logger.debug(`Executing command: '${command}'`); + childProcess.exec(command, (error, stdout, stderr) => { + if (error) { + CommonUtils.logger.error(`Error executing command '${command}':`); + + // also include stderr & stdout for more detailed error + let msg = error.message; + if (stderr && stderr.length > 0) { + msg = `${msg}\nstderr:\n${stderr}`; } - }); - } - ); + if (stdout && stdout.length > 0) { + msg = `${msg}\nstdout:\n${stdout}`; + } + + CommonUtils.logger.error(msg); + reject(error); + } else { + resolve({ stdout, stderr }); + } + }); + }); } /** @@ -281,52 +262,47 @@ export class CommonUtils { args: string[] = [], stdioOptions: StdioOptions = ['ignore', 'pipe', 'ignore'] ): Promise<{ stdout: string; stderr: string }> { - return new Promise<{ stdout: string; stderr: string }>( - (resolve, reject) => { - const capturedStdout: string[] = []; - const capturedStderr: string[] = []; + return new Promise<{ stdout: string; stderr: string }>((resolve, reject) => { + const capturedStdout: string[] = []; + const capturedStderr: string[] = []; - const fullCommand = - args.length > 0 ? `${command} ${args.join(' ')}` : command; + const fullCommand = args.length > 0 ? `${command} ${args.join(' ')}` : command; - CommonUtils.logger.debug(`Executing command: '${fullCommand}'`); + CommonUtils.logger.debug(`Executing command: '${fullCommand}'`); - const prc = childProcess.spawn(command, args, { - shell: true, - stdio: stdioOptions - }); - - prc.stdout?.on('data', (data) => { - capturedStdout.push(data.toString()); - }); - - prc.stderr?.on('data', (data) => { - capturedStderr.push(data.toString()); - }); - - prc.on('close', (code) => { - if (code !== 0) { - CommonUtils.logger.error( - `Error executing command '${fullCommand}':` - ); - - // also include stderr & stdout for more detailed error - let msg = `stderr:\n${capturedStderr.join()}`; - if (capturedStdout.length > 0) { - msg = `${msg}\nstdout:\n${capturedStdout}`; - } - - CommonUtils.logger.error(msg); - reject(new Error(capturedStderr.join())); - } else { - resolve({ - stdout: capturedStdout.join(), - stderr: capturedStderr.join() - }); + const prc = childProcess.spawn(command, args, { + shell: true, + stdio: stdioOptions + }); + + prc.stdout?.on('data', (data) => { + capturedStdout.push(data.toString()); + }); + + prc.stderr?.on('data', (data) => { + capturedStderr.push(data.toString()); + }); + + prc.on('close', (code) => { + if (code !== 0) { + CommonUtils.logger.error(`Error executing command '${fullCommand}':`); + + // also include stderr & stdout for more detailed error + let msg = `stderr:\n${capturedStderr.join()}`; + if (capturedStdout.length > 0) { + msg = `${msg}\nstdout:\n${capturedStdout}`; } - }); - } - ); + + CommonUtils.logger.error(msg); + reject(new Error(capturedStderr.join())); + } else { + resolve({ + stdout: capturedStdout.join(), + stderr: capturedStderr.join() + }); + } + }); + }); } /** @@ -335,16 +311,11 @@ export class CommonUtils { * @returns A Promise that launches the desktop browser and navigates to the provided URL. */ public static async launchUrlInDesktopBrowser(url: string): Promise { - const openCmd = - process.platform === 'darwin' - ? 'open' - : process.platform === 'win32' - ? 'start' - : 'xdg-open'; + const openCmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open'; CommonUtils.startCliAction( messages.getMessage('launchBrowserAction'), - util.format(messages.getMessage('openBrowserWithUrlStatus'), url) + messages.getMessage('openBrowserWithUrlStatus', [url]) ); return CommonUtils.executeCommandAsync(`${openCmd} ${url}`).then(() => { CommonUtils.stopCliAction(); @@ -360,9 +331,7 @@ export class CommonUtils { */ public static async isLwcServerPluginInstalled(): Promise { const command = 'sfdx force:lightning:lwc:start --help'; - return CommonUtils.executeCommandAsync(command).then(() => - Promise.resolve() - ); + return CommonUtils.executeCommandAsync(command).then(() => Promise.resolve()); } /** @@ -383,15 +352,9 @@ export class CommonUtils { const startIndex = output.indexOf(portPattern); let port = CommonUtils.DEFAULT_LWC_SERVER_PORT; if (startIndex > 0) { - const endIndex = output.indexOf( - '\n', - startIndex + portPattern.length - ); + const endIndex = output.indexOf('\n', startIndex + portPattern.length); if (endIndex > startIndex) { - port = output.substring( - startIndex + portPattern.length, - endIndex - ); + port = output.substring(startIndex + portPattern.length, endIndex); } else { port = output.substr(startIndex + portPattern.length); } @@ -399,9 +362,7 @@ export class CommonUtils { return Promise.resolve(port.trim()); }) .catch((error) => { - CommonUtils.logger.warn( - `Unable to determine server port: ${error}` - ); + CommonUtils.logger.warn(`Unable to determine server port: ${error}`); return Promise.resolve(undefined); }); } @@ -410,20 +371,16 @@ export class CommonUtils { * Downloads a resource from a given url into a destination file. */ public static async downloadFile(url: string, dest: string): Promise { - const finalUrl = url.toLowerCase().startsWith('http') - ? url - : `http://${url}`; + const finalUrl = url.toLowerCase().startsWith('http') ? url : `http://${url}`; - const protocol = finalUrl.toLowerCase().startsWith('https') - ? https - : http; + const protocol = finalUrl.toLowerCase().startsWith('https') ? https : http; return new Promise((resolve, reject) => { const destFile = fs.createWriteStream(dest); const request = protocol.get(finalUrl, (response) => { if (response.statusCode !== 200) { - const msg = `Error downloading ${finalUrl} - ${response.socket}: ${response.statusMessage}`; + const msg = `Error downloading ${finalUrl}: ${response.statusMessage}`; this.logger.error(msg); fs.unlink(dest, () => reject(new Error(msg))); return; @@ -455,14 +412,11 @@ export class CommonUtils { /** * Creates a text file at a destination location with the given content */ - public static async createTextFile( - dest: string, - content: string - ): Promise { + public static async createTextFile(dest: string, content: string): Promise { return new Promise((resolve, reject) => { - fs.writeFile(dest, content, function (err) { + fs.writeFile(dest, content, (err) => { if (err) { - const msg = `Error creating file ${dest} - ${err}`; + const msg = `Error creating file ${dest} - ${err.message}`; CommonUtils.logger.error(msg); reject(err); } @@ -474,11 +428,11 @@ export class CommonUtils { /** * Creates a text file at a destination location with the given content */ - public static async readTextFile(path: string): Promise { + public static async readTextFile(filePath: string): Promise { return new Promise((resolve, reject) => { - fs.readFile(path, function (err, data) { + fs.readFile(filePath, (err, data) => { if (err) { - const msg = `Error reading file ${path} - ${err}`; + const msg = `Error reading file ${filePath} - ${err.message}`; CommonUtils.logger.error(msg); reject(err); } @@ -497,10 +451,7 @@ export class CommonUtils { * @param filterRegEx Optional regular expression to use for further filtering the results. * @returns Array of file paths that are contained under the provided input path. */ - public static enumerateFiles( - atPath: string, - filterRegEx?: RegExp - ): string[] { + public static enumerateFiles(atPath: string, filterRegEx?: RegExp): string[] { const inputPath = path.normalize(atPath); const stat = fs.statSync(inputPath); @@ -508,10 +459,7 @@ export class CommonUtils { const filterFunc = (input: string): string | undefined => { const trimmed = input.trim(); - return (filterRegEx && !filterRegEx.test(trimmed)) || - trimmed.length === 0 - ? undefined - : trimmed; + return (filterRegEx && !filterRegEx.test(trimmed)) ?? trimmed.length === 0 ? undefined : trimmed; }; if (stat.isFile()) { @@ -526,10 +474,7 @@ export class CommonUtils { items.forEach((item) => { const itemPath = path.join(inputPath, item.name); if (item.isDirectory()) { - files = [ - ...files, - ...this.enumerateFiles(itemPath, filterRegEx) - ]; + files = [...files, ...this.enumerateFiles(itemPath, filterRegEx)]; } else { const result = filterFunc(itemPath); if (result) { diff --git a/src/common/IOSEnvironmentRequirements.ts b/src/common/IOSEnvironmentRequirements.ts index 8fe139e..53c6017 100644 --- a/src/common/IOSEnvironmentRequirements.ts +++ b/src/common/IOSEnvironmentRequirements.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. @@ -5,22 +7,18 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ import { Logger, Messages, SfError } from '@salesforce/core'; -import util from 'util'; -import { CommonUtils } from './CommonUtils'; -import { IOSUtils } from './IOSUtils'; -import { PlatformConfig } from './PlatformConfig'; -import { Requirement, RequirementList } from './Requirements'; +import { CommonUtils } from './CommonUtils.js'; +import { IOSUtils } from './IOSUtils.js'; +import { PlatformConfig } from './PlatformConfig.js'; +import { Requirement, RequirementList } from './Requirements.js'; -Messages.importMessagesDirectory(__dirname); -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'requirement-ios' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'requirement-ios'); export class IOSEnvironmentRequirements implements RequirementList { public requirements: Requirement[] = []; public enabled = true; - constructor(logger: Logger) { + public constructor(logger: Logger) { this.requirements = [ new SupportedEnvironmentRequirement(logger), new XcodeInstalledRequirement(logger), @@ -29,26 +27,22 @@ export class IOSEnvironmentRequirements implements RequirementList { } } -// tslint:disable-next-line: max-classes-per-file export class SupportedEnvironmentRequirement implements Requirement { public title: string; public fulfilledMessage: string; public unfulfilledMessage: string; public logger: Logger; - constructor(logger: Logger) { + public constructor(logger: Logger) { this.title = messages.getMessage('ios:reqs:macos:title'); - this.fulfilledMessage = messages.getMessage( - 'ios:reqs:macos:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'ios:reqs:macos:unfulfilledMessage' - ); + this.fulfilledMessage = 'ios:reqs:macos:fulfilledMessage'; + this.unfulfilledMessage = 'ios:reqs:macos:unfulfilledMessage'; this.logger = logger; } /** * Verifies that user environment is MacOS. + * * @returns True if user environment is MacOS. */ public async checkFunction(): Promise { @@ -58,48 +52,39 @@ export class SupportedEnvironmentRequirement implements Requirement { .then((result) => { const output = result.stdout.trim(); if (output === 'Darwin') { - return Promise.resolve(this.fulfilledMessage); + return Promise.resolve(messages.getMessage(this.fulfilledMessage)); } else { - return Promise.reject( - new SfError( - util.format(this.unfulfilledMessage, output) - ) - ); + return Promise.reject(new SfError(messages.getMessage(this.unfulfilledMessage, [output]))); } }) - .catch((error) => { - return Promise.reject( + .catch((error) => + Promise.reject( new SfError( - util.format( - this.unfulfilledMessage, + messages.getMessage(this.unfulfilledMessage, [ `command '${unameCommand}' failed: ${error}, error code: ${error.code}` - ) + ]) ) - ); - }); + ) + ); } } -// tslint:disable-next-line: max-classes-per-file export class XcodeInstalledRequirement implements Requirement { public title: string; public fulfilledMessage: string; public unfulfilledMessage: string; public logger: Logger; - constructor(logger: Logger) { + public constructor(logger: Logger) { this.title = messages.getMessage('ios:reqs:xcode:title'); - this.fulfilledMessage = messages.getMessage( - 'ios:reqs:xcode:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'ios:reqs:xcode:unfulfilledMessage' - ); + this.fulfilledMessage = 'ios:reqs:xcode:fulfilledMessage'; + this.unfulfilledMessage = 'ios:reqs:xcode:unfulfilledMessage'; this.logger = logger; } /** * Verifies that user has installed the full Xcode and not just the command line tools. + * * @returns True if user has installed the full Xcode. */ public async checkFunction(): Promise { @@ -108,56 +93,38 @@ export class XcodeInstalledRequirement implements Requirement { return CommonUtils.executeCommandAsync(xcodeBuildCommand) .then((result) => { if (result.stdout && result.stdout.length > 0) { - const xcodeDetails = result.stdout - .trim() - .replace(/\n/gi, ' '); - return Promise.resolve( - util.format(this.fulfilledMessage, xcodeDetails) - ); + const xcodeDetails = result.stdout.trim().replace(/\n/gi, ' '); + return Promise.resolve(messages.getMessage(this.fulfilledMessage, [xcodeDetails])); } else { return Promise.reject( - new SfError( - util.format( - this.unfulfilledMessage, - `${result.stderr || 'None'}` - ) - ) + new SfError(messages.getMessage(this.unfulfilledMessage, [`${result.stderr ?? 'None'}`])) ); } }) - .catch((error) => { - return Promise.reject( - new SfError( - util.format( - this.unfulfilledMessage, - `${error}, error code: ${error.code}` - ) - ) - ); - }); + .catch((error) => + Promise.reject( + new SfError(messages.getMessage(this.unfulfilledMessage, [`${error}, error code: ${error.code}`])) + ) + ); } } -// tslint:disable-next-line: max-classes-per-file export class SupportedSimulatorRuntimeRequirement implements Requirement { public title: string; public fulfilledMessage: string; public unfulfilledMessage: string; public logger: Logger; - constructor(logger: Logger) { + public constructor(logger: Logger) { this.title = messages.getMessage('ios:reqs:simulator:title'); - this.fulfilledMessage = messages.getMessage( - 'ios:reqs:simulator:fulfilledMessage' - ); - this.unfulfilledMessage = messages.getMessage( - 'ios:reqs:simulator:unfulfilledMessage' - ); + this.fulfilledMessage = 'ios:reqs:simulator:fulfilledMessage'; + this.unfulfilledMessage = 'ios:reqs:simulator:unfulfilledMessage'; this.logger = logger; } /** * Verifies that user has at least one runtime that is supported. + * * @returns True if user has at least one runtime that is supported. */ public async checkFunction(): Promise { @@ -165,34 +132,25 @@ export class SupportedSimulatorRuntimeRequirement implements Requirement { return IOSUtils.getSupportedRuntimes() .then((supportedRuntimes) => { if (supportedRuntimes.length > 0) { - return Promise.resolve( - util.format(this.fulfilledMessage, supportedRuntimes) - ); + return Promise.resolve(messages.getMessage(this.fulfilledMessage, supportedRuntimes)); } else { return Promise.reject( new SfError( - util.format( - this.unfulfilledMessage, - `iOS-${ - PlatformConfig.iOSConfig() - .minSupportedRuntime - }` - ) + messages.getMessage(this.unfulfilledMessage, [ + `iOS-${PlatformConfig.iOSConfig().minSupportedRuntime}` + ]) ) ); } }) - .catch((error) => { - return Promise.reject( + .catch((error) => + Promise.reject( new SfError( - util.format( - this.unfulfilledMessage, - `iOS-${ - PlatformConfig.iOSConfig().minSupportedRuntime - } error:${error}` - ) + messages.getMessage(this.unfulfilledMessage, [ + `iOS-${PlatformConfig.iOSConfig().minSupportedRuntime} error:${error}` + ]) ) - ); - }); + ) + ); } } diff --git a/src/common/IOSLauncher.ts b/src/common/IOSLauncher.ts index a0f2c2f..c9c2473 100644 --- a/src/common/IOSLauncher.ts +++ b/src/common/IOSLauncher.ts @@ -5,26 +5,18 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ import { Messages } from '@salesforce/core'; -import util from 'util'; -import { IOSUtils } from './IOSUtils'; -import { IOSAppPreviewConfig, LaunchArgument } from './PreviewConfigFile'; -import { CommonUtils } from './CommonUtils'; -import { PreviewUtils } from './PreviewUtils'; +import { IOSUtils } from './IOSUtils.js'; +import { IOSAppPreviewConfig, LaunchArgument } from './PreviewConfigFile.js'; +import { CommonUtils } from './CommonUtils.js'; +import { PreviewUtils } from './PreviewUtils.js'; -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); - -// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, -// or any library that is using the messages framework can also be loaded this way. -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); export class IOSLauncher { private simulatorName: string; - constructor(simulatorName: string) { + public constructor(simulatorName: string) { this.simulatorName = simulatorName; } @@ -52,56 +44,29 @@ export class IOSLauncher { targetingLwrServer: boolean = false ): Promise { const availableDevices: string[] = await IOSUtils.getSupportedDevices(); - const supportedRuntimes: string[] = - await IOSUtils.getSupportedRuntimes(); - const currentSimulator = await IOSUtils.getSimulator( - this.simulatorName - ); - const currentSimulatorUDID: string | null = - currentSimulator && currentSimulator.udid; + const supportedRuntimes: string[] = await IOSUtils.getSupportedRuntimes(); + const currentSimulator = await IOSUtils.getSimulator(this.simulatorName); + const currentSimulatorUDID = currentSimulator?.udid; let deviceUDID = ''; CommonUtils.startCliAction( messages.getMessage('startPreviewAction'), - util.format( - messages.getMessage('searchForDeviceStatus'), - this.simulatorName - ) + messages.getMessage('searchForDeviceStatus', [this.simulatorName]) ); if (!currentSimulatorUDID || currentSimulatorUDID.length === 0) { - CommonUtils.updateCliAction( - util.format( - messages.getMessage('createDeviceStatus'), - this.simulatorName - ) - ); - deviceUDID = await IOSUtils.createNewDevice( - this.simulatorName, - availableDevices[0], - supportedRuntimes[0] - ); + CommonUtils.updateCliAction(messages.getMessage('createDeviceStatus', [this.simulatorName])); + deviceUDID = await IOSUtils.createNewDevice(this.simulatorName, availableDevices[0], supportedRuntimes[0]); } else { - CommonUtils.updateCliAction( - util.format( - messages.getMessage('foundDeviceStatus'), - this.simulatorName - ) - ); + CommonUtils.updateCliAction(messages.getMessage('foundDeviceStatus', [this.simulatorName])); deviceUDID = currentSimulatorUDID; } CommonUtils.updateCliAction( - util.format( - messages.getMessage('startDeviceStatus'), - `${this.simulatorName} (${deviceUDID})` - ) + messages.getMessage('startDeviceStatus', [`${this.simulatorName} (${deviceUDID})`]) ); return IOSUtils.bootDevice(deviceUDID) .then(() => IOSUtils.launchSimulatorApp()) .then(() => { - const useServer = PreviewUtils.useLwcServerForPreviewing( - targetApp, - appConfig - ); + const useServer = PreviewUtils.useLwcServerForPreviewing(targetApp, appConfig); const address = useServer ? 'http://localhost' : undefined; // TODO: dynamically determine server address const port = useServer ? serverPort : undefined; @@ -110,27 +75,15 @@ export class IOSLauncher { if (targetingLwrServer) { url = `${address}:${port}`; } else { - const compPath = - PreviewUtils.prefixRouteIfNeeded(compName); + const compPath = PreviewUtils.prefixRouteIfNeeded(compName); url = `${address}:${port}/lwc/preview/${compPath}`; } - CommonUtils.updateCliAction( - util.format( - messages.getMessage('launchBrowserStatus'), - url - ) - ); + CommonUtils.updateCliAction(messages.getMessage('launchBrowserStatus', [url])); return IOSUtils.launchURLInBootedSimulator(deviceUDID, url); } else { - CommonUtils.updateCliAction( - util.format( - messages.getMessage('launchAppStatus'), - targetApp - ) - ); - const targetAppArguments: LaunchArgument[] = - (appConfig && appConfig.launch_arguments) || []; + CommonUtils.updateCliAction(messages.getMessage('launchAppStatus', [targetApp])); + const targetAppArguments: LaunchArgument[] = appConfig?.launch_arguments ?? []; return IOSUtils.launchAppInBootedSimulator( deviceUDID, compName, @@ -148,9 +101,7 @@ export class IOSLauncher { return Promise.resolve(); }) .catch((error) => { - CommonUtils.stopCliAction( - messages.getMessage('genericErrorStatus') - ); + CommonUtils.stopCliAction(messages.getMessage('genericErrorStatus')); throw error; }); } diff --git a/src/common/IOSTypes.ts b/src/common/IOSTypes.ts index 9c3e580..b9e84d0 100644 --- a/src/common/IOSTypes.ts +++ b/src/common/IOSTypes.ts @@ -1,3 +1,8 @@ +/* eslint-disable @typescript-eslint/member-ordering */ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. @@ -13,10 +18,7 @@ export class IOSSimulatorDevice { * @param supportedRuntimes String array including the runtimes that are supported. * @returns An array of IOSSimulatorDevice objects containing information about each simulator. */ - public static parseJSONString( - jsonString: string, - supportedRuntimes: string[] - ): IOSSimulatorDevice[] { + public static parseJSONString(jsonString: string, supportedRuntimes: string[]): IOSSimulatorDevice[] { const DEVICES_KEY = 'devices'; const NAME_KEY = 'name'; const UDID_KEY = 'udid'; @@ -29,11 +31,9 @@ export class IOSSimulatorDevice { const simDevices: IOSSimulatorDevice[] = []; - const devicesJSON: any = JSON.parse(jsonString); - const runtimeDevices: any[] = devicesJSON[DEVICES_KEY] || []; - let runtimes: any[] = Object.keys(runtimeDevices).filter((key) => { - return key && key.match(runtimeMatchRegex); - }); + const devicesJSON = JSON.parse(jsonString); + const runtimeDevices = devicesJSON[DEVICES_KEY] || []; + let runtimes = Object.keys(runtimeDevices).filter((key) => key?.match(runtimeMatchRegex)); runtimes = runtimes.sort().reverse(); for (const runtimeIdentifier of runtimes) { @@ -55,13 +55,7 @@ export class IOSSimulatorDevice { // if someone starts a device by name (eg. iPhone 11), rather than udid, then the newer // version of iOS will be chosen as it will be first on the list. return simDevices.sort((a, b) => - a.name == b.name - ? a.runtimeId > b.runtimeId - ? -1 - : 1 - : a.name < b.name - ? -1 - : 1 + a.name === b.name ? (a.runtimeId > b.runtimeId ? -1 : 1) : a.name < b.name ? -1 : 1 ); } @@ -71,13 +65,7 @@ export class IOSSimulatorDevice { public runtimeId: string; public isAvailable: boolean; - constructor( - name: string, - udid: string, - state: string, - runtimeId: string, - isAvailable: boolean - ) { + public constructor(name: string, udid: string, state: string, runtimeId: string, isAvailable: boolean) { const runtime: string = runtimeId .replace('com.apple.CoreSimulator.SimRuntime.', '') // com.apple.CoreSimulator.SimRuntime.iOS-13-3-2 --> iOS-13-3-2 .replace('-', ' ') // iOS-13-3-2 --> iOS 13-3-2 diff --git a/src/common/IOSUtils.ts b/src/common/IOSUtils.ts index 4d98398..c1e6a0b 100644 --- a/src/common/IOSUtils.ts +++ b/src/common/IOSUtils.ts @@ -1,3 +1,10 @@ +/* eslint-disable @typescript-eslint/member-ordering */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. @@ -5,23 +12,15 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ import { Logger, LoggerLevelValue, Messages, SfError } from '@salesforce/core'; -import util from 'util'; -import { Version } from '../common/Common'; -import { CommonUtils } from './CommonUtils'; -import { IOSSimulatorDevice } from './IOSTypes'; -import { PlatformConfig } from './PlatformConfig'; -import { LaunchArgument } from './PreviewConfigFile'; -import { PreviewUtils } from './PreviewUtils'; - -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); +import { Version } from '../common/Common.js'; +import { CommonUtils } from './CommonUtils.js'; +import { IOSSimulatorDevice } from './IOSTypes.js'; +import { PlatformConfig } from './PlatformConfig.js'; +import { LaunchArgument } from './PreviewConfigFile.js'; +import { PreviewUtils } from './PreviewUtils.js'; -// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, -// or any library that is using the messages framework can also be loaded this way. -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); const XCRUN_CMD = '/usr/bin/xcrun'; const DEVICE_TYPE_PREFIX = 'com.apple.CoreSimulator.SimDeviceType'; @@ -32,7 +31,7 @@ export class IOSUtils { /** * Initialized the logger used by IOSUtils */ - public static initializeLogger(level?: LoggerLevelValue) { + public static initializeLogger(level?: LoggerLevelValue): void { IOSUtils.logger.setLevel(level); } @@ -42,10 +41,7 @@ export class IOSUtils { * @param udid The UDID of the simulator to launch. * @param waitForBoot Optional boolean indicating whether it should wait for the device to boot up. Defaults to true. */ - public static async bootDevice( - udid: string, - waitForBoot = true - ): Promise { + public static async bootDevice(udid: string, waitForBoot = true): Promise { const command = `${XCRUN_CMD} simctl boot ${udid}`; return CommonUtils.executeCommandAsync(command) .then(() => { @@ -57,11 +53,7 @@ export class IOSUtils { }) .catch((error) => { if (!IOSUtils.isDeviceAlreadyBootedError(error)) { - return Promise.reject( - new SfError( - `The command '${command}' failed to execute ${error}` - ) - ); + return Promise.reject(new SfError(`The command '${command}' failed to execute ${error}`)); } else { return Promise.resolve(); } @@ -75,21 +67,11 @@ export class IOSUtils { * @param deviceType The type of device to use for the simulator (e.g iPhone-8) * @param runtime The runtime to use for the device (e.g iOS-13) */ - public static async createNewDevice( - simulatorName: string, - deviceType: string, - runtime: string - ): Promise { + public static async createNewDevice(simulatorName: string, deviceType: string, runtime: string): Promise { const command = `${XCRUN_CMD} simctl create '${simulatorName}' ${DEVICE_TYPE_PREFIX}.${deviceType} ${RUNTIME_TYPE_PREFIX}.${runtime}`; return CommonUtils.executeCommandAsync(command) .then((result) => Promise.resolve(result.stdout.trim())) - .catch((error) => - Promise.reject( - new SfError( - `The command '${command}' failed to execute ${error}` - ) - ) - ); + .catch((error) => Promise.reject(new SfError(`The command '${command}' failed to execute ${error}`))); } /** @@ -98,9 +80,7 @@ export class IOSUtils { * @param simulatorIdentifier The udid or the name for the simulator. * @returns An IOSSimulatorDevice object containing the info of a simulator, or NULL if not found. */ - public static async getSimulator( - simulatorIdentifier: string - ): Promise { + public static async getSimulator(simulatorIdentifier: string): Promise { return IOSUtils.getSupportedSimulators() .then((devices) => { for (const device of devices) { @@ -111,9 +91,7 @@ export class IOSUtils { } } - IOSUtils.logger.info( - `Unable to find simulator: ${simulatorIdentifier}` - ); + IOSUtils.logger.info(`Unable to find simulator: ${simulatorIdentifier}`); return Promise.resolve(null); }) .catch((error) => { @@ -127,23 +105,16 @@ export class IOSUtils { * * @returns An array of IOSSimulatorDevice objects containing the info about the supported simulators. */ - public static async getSupportedSimulators(): Promise< - IOSSimulatorDevice[] - > { + public static async getSupportedSimulators(): Promise { let supportedRuntimes: string[] = []; return IOSUtils.getSupportedRuntimes() .then((runtimes) => { supportedRuntimes = runtimes; - return CommonUtils.executeCommandAsync( - `${XCRUN_CMD} simctl list --json devices available` - ); + return CommonUtils.executeCommandAsync(`${XCRUN_CMD} simctl list --json devices available`); }) .then((result) => { - const devices = IOSSimulatorDevice.parseJSONString( - result.stdout, - supportedRuntimes - ); + const devices = IOSSimulatorDevice.parseJSONString(result.stdout, supportedRuntimes); return Promise.resolve(devices); }) @@ -165,36 +136,21 @@ export class IOSUtils { const identifier = 'identifier'; const deviceTypesKey = 'devicetypes'; const deviceMatchRegex = /SimDeviceType.iPhone-[8,1,X]/; - const devicesObj: any = JSON.parse(result.stdout); + const devicesObj = JSON.parse(result.stdout); + // eslint-disable-next-line @typescript-eslint/no-explicit-any const devices: any[] = devicesObj[deviceTypesKey] || []; - const matchedDevices: any[] = devices.filter((entry) => { - return ( - entry[identifier] && - entry[identifier].match(deviceMatchRegex) - ); - }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const matchedDevices: any[] = devices.filter((entry) => entry[identifier]?.match(deviceMatchRegex)); if (matchedDevices) { - return Promise.resolve( - matchedDevices.map( - (entry) => entry.identifier.split('.')[4] - ) - ); + return Promise.resolve(matchedDevices.map((entry) => entry.identifier.split('.')[4])); } else { return Promise.reject( - new SfError( - `Could not find any available devices. Command '${cmd}' returned an empty list.` - ) + new SfError(`Could not find any available devices. Command '${cmd}' returned an empty list.`) ); } }) - .catch((error) => - Promise.reject( - new SfError( - `Could not find any available devices. ${error}` - ) - ) - ); + .catch((error) => Promise.reject(new SfError(`Could not find any available devices. ${error}`))); } /** @@ -204,40 +160,27 @@ export class IOSUtils { */ public static async getSupportedRuntimes(): Promise { return IOSUtils.getSimulatorRuntimes().then((configuredRuntimes) => { - const minSupportedRuntimeIOS = Version.from( - PlatformConfig.iOSConfig().minSupportedRuntime - ); + const minSupportedRuntimeIOS = Version.from(PlatformConfig.iOSConfig().minSupportedRuntime); if (minSupportedRuntimeIOS === null) { return Promise.reject( - new SfError( - `${ - PlatformConfig.iOSConfig().minSupportedRuntime - } is not a supported version format.` - ) + new SfError(`${PlatformConfig.iOSConfig().minSupportedRuntime} is not a supported version format.`) ); } - const rtIntersection = configuredRuntimes.filter( - (configuredRuntime) => { - const configuredRuntimeVersion = Version.from( - configuredRuntime.toLowerCase().replace('ios-', '') - ); - if (configuredRuntimeVersion === null) { - // We haven't hit a use case where Apple does unconventional version - // specifications like Google will do with their codename "versions". - // So for now, this is a 'miss' on the iOS side. Prove me wrong, Apple! - IOSUtils.logger.warn( - `getSupportedRuntimes(): getSimulatorRuntimes() returned '${configuredRuntime}', which is not a supported version format.` - ); - return false; - } - - return Version.sameOrNewer( - configuredRuntimeVersion, - minSupportedRuntimeIOS + const rtIntersection = configuredRuntimes.filter((configuredRuntime) => { + const configuredRuntimeVersion = Version.from(configuredRuntime.toLowerCase().replace('ios-', '')); + if (configuredRuntimeVersion === null) { + // We haven't hit a use case where Apple does unconventional version + // specifications like Google will do with their codename "versions". + // So for now, this is a 'miss' on the iOS side. Prove me wrong, Apple! + IOSUtils.logger.warn( + `getSupportedRuntimes(): getSimulatorRuntimes() returned '${configuredRuntime}', which is not a supported version format.` ); + return false; } - ); + + return Version.sameOrNewer(configuredRuntimeVersion, minSupportedRuntimeIOS); + }); if (rtIntersection.length > 0) { return Promise.resolve(rtIntersection); @@ -260,37 +203,26 @@ export class IOSUtils { const runtimeMatchRegex = /.*SimRuntime\.((iOS)-[\d\-]+)$/; const RUNTIMES_KEY = 'runtimes'; const ID_KEY = 'identifier'; + // eslint-disable-next-line @typescript-eslint/no-explicit-any const runtimesObj: any = JSON.parse(result.stdout); + // eslint-disable-next-line @typescript-eslint/no-explicit-any const runtimes: any[] = runtimesObj[RUNTIMES_KEY] || []; - let filteredRuntimes = runtimes.filter((entry) => { - return ( - entry[ID_KEY] && entry[ID_KEY].match(runtimeMatchRegex) - ); - }); + let filteredRuntimes = runtimes.filter((entry) => entry[ID_KEY]?.match(runtimeMatchRegex)); filteredRuntimes = filteredRuntimes.sort().reverse(); - filteredRuntimes = filteredRuntimes.map((entry) => { - return (entry[ID_KEY] as string).replace( - runtimeMatchRegex, - '$1' - ); - }); + filteredRuntimes = filteredRuntimes.map((entry) => + (entry[ID_KEY] as string).replace(runtimeMatchRegex, '$1') + ); if (filteredRuntimes && filteredRuntimes.length > 0) { return Promise.resolve(filteredRuntimes); } else { return Promise.reject( - new SfError( - `The command '${runtimesCmd}' could not find any available runtimes` - ) + new SfError(`The command '${runtimesCmd}' could not find any available runtimes`) ); } }) - .catch((error) => { - return Promise.reject( - new SfError( - `The command '${runtimesCmd}' failed: ${error}, error code: ${error.code}` - ) - ); - }); + .catch((error) => + Promise.reject(new SfError(`The command '${runtimesCmd}' failed: ${error}, error code: ${error.code}`)) + ); } /** @@ -300,29 +232,17 @@ export class IOSUtils { const command = `${XCRUN_CMD} simctl bootstatus "${udid}"`; return CommonUtils.executeCommandAsync(command) .then(() => Promise.resolve()) - .catch((error) => - Promise.reject( - new SfError( - `The command '${command}' failed to execute ${error}` - ) - ) - ); + .catch((error) => Promise.reject(new SfError(`The command '${command}' failed to execute ${error}`))); } /** * Attempts to launch the simulator app, which hosts all simulators. */ public static async launchSimulatorApp(): Promise { - const command = `open -a Simulator`; + const command = 'open -a Simulator'; return CommonUtils.executeCommandAsync(command) .then(() => Promise.resolve()) - .catch((error) => - Promise.reject( - new SfError( - `The command '${command}' failed to execute ${error}` - ) - ) - ); + .catch((error) => Promise.reject(new SfError(`The command '${command}' failed to execute ${error}`))); } /** @@ -331,24 +251,15 @@ export class IOSUtils { * @param udid The UDID of the simulator. * @param url The URL to navigate to. */ - public static async launchURLInBootedSimulator( - udid: string, - url: string - ): Promise { + public static async launchURLInBootedSimulator(udid: string, url: string): Promise { const command = `${XCRUN_CMD} simctl openurl "${udid}" ${url}`; CommonUtils.startCliAction( messages.getMessage('launchBrowserAction'), - util.format(messages.getMessage('openBrowserWithUrlStatus'), url) + messages.getMessage('openBrowserWithUrlStatus', [url]) ); return CommonUtils.executeCommandAsync(command) .then(() => Promise.resolve()) - .catch((error) => - Promise.reject( - new SfError( - `The command '${command}' failed to execute ${error}` - ) - ) - ); + .catch((error) => Promise.reject(new SfError(`The command '${command}' failed to execute ${error}`))); } /** @@ -375,15 +286,9 @@ export class IOSUtils { ): Promise { let thePromise: Promise<{ stdout: string; stderr: string }>; if (appBundlePath && appBundlePath.trim().length > 0) { - const installMsg = util.format( - messages.getMessage('installAppStatus'), - appBundlePath.trim() - ); + const installMsg = messages.getMessage('installAppStatus', [appBundlePath.trim()]); IOSUtils.logger.info(installMsg); - CommonUtils.startCliAction( - messages.getMessage('launchAppAction'), - installMsg - ); + CommonUtils.startCliAction(messages.getMessage('launchAppAction'), installMsg); const installCommand = `${XCRUN_CMD} simctl install ${udid} '${appBundlePath.trim()}'`; thePromise = CommonUtils.executeCommandAsync(installCommand); } else { @@ -414,10 +319,7 @@ export class IOSUtils { // attempt at terminating the app first (in case it is already running) and then try to launch it again with new arguments. // if we hit issues with terminating, just ignore and continue. try { - const terminateMsg = util.format( - messages.getMessage('terminateAppStatus'), - targetApp - ); + const terminateMsg = messages.getMessage('terminateAppStatus', [targetApp]); IOSUtils.logger.info(terminateMsg); CommonUtils.updateCliAction(terminateMsg); await CommonUtils.executeCommandAsync(terminateCommand); @@ -425,10 +327,7 @@ export class IOSUtils { // ignore and continue } - const launchMsg = util.format( - messages.getMessage('launchAppStatus'), - targetApp - ); + const launchMsg = messages.getMessage('launchAppStatus', [targetApp]); IOSUtils.logger.info(launchMsg); CommonUtils.updateCliAction(launchMsg); return CommonUtils.executeCommandAsync(launchCommand); @@ -439,8 +338,6 @@ export class IOSUtils { private static logger: Logger = new Logger(LOGGER_NAME); private static isDeviceAlreadyBootedError(error: Error): boolean { - return error.message - ? error.message.toLowerCase().match('state: booted') !== null - : false; + return error.message ? error.message.toLowerCase().match('state: booted') !== null : false; } } diff --git a/src/common/LoggerSetup.ts b/src/common/LoggerSetup.ts index e710bd9..20925f3 100644 --- a/src/common/LoggerSetup.ts +++ b/src/common/LoggerSetup.ts @@ -5,17 +5,17 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ import { LoggerLevelValue } from '@salesforce/core'; -import { AndroidPackages, AndroidVirtualDevice } from './AndroidTypes'; -import { AndroidUtils } from './AndroidUtils'; -import { CommonUtils } from './CommonUtils'; -import { IOSUtils } from './IOSUtils'; -import { MacNetworkUtils } from './MacNetworkUtils'; +import { AndroidPackages, AndroidVirtualDevice } from './AndroidTypes.js'; +import { AndroidUtils } from './AndroidUtils.js'; +import { CommonUtils } from './CommonUtils.js'; +import { IOSUtils } from './IOSUtils.js'; +import { MacNetworkUtils } from './MacNetworkUtils.js'; export class LoggerSetup { /** * Initializes all of the loggers that various utility libraries use (such as AndroidUtils, IOSUtils, CommonUtils) */ - public static initializePluginLoggers(level?: LoggerLevelValue) { + public static initializePluginLoggers(level?: LoggerLevelValue): void { AndroidUtils.initializeLogger(level); IOSUtils.initializeLogger(level); CommonUtils.initializeLogger(level); diff --git a/src/common/MacNetworkUtils.ts b/src/common/MacNetworkUtils.ts index b49f3cc..f0f2b04 100644 --- a/src/common/MacNetworkUtils.ts +++ b/src/common/MacNetworkUtils.ts @@ -1,37 +1,41 @@ +/* eslint-disable @typescript-eslint/member-ordering */ /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ -import { Logger, LoggerLevelValue, SfError } from '@salesforce/core'; -import { CommonUtils } from './CommonUtils'; -import net from 'net'; -import util from 'util'; +import net from 'node:net'; +import { Logger, LoggerLevelValue, Messages, SfError } from '@salesforce/core'; +import { CommonUtils } from './CommonUtils.js'; const LOGGER_NAME = 'force:lightning:local:macnetworkutils'; -export interface ProxySetting { +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); + +export type ProxySetting = { proxyAutoConfigEnable?: number; proxyAutoConfigURLString?: string; -} +}; -export interface HardwarePort { +export type HardwarePort = { name: string; device: string; address: string; -} +}; export class MacNetworkUtils { /** * Initialized the logger used by MacNetworkUtils */ - public static initializeLogger(level?: LoggerLevelValue) { + public static initializeLogger(level?: LoggerLevelValue): void { MacNetworkUtils.logger.setLevel(level); } /** * Obtains a list of all available network ports on the host machine. + * * @returns An array of HardwarePort objects containing a list of all available network ports on the host machine. */ public static async getNetworkHardwarePorts(): Promise { @@ -62,18 +66,8 @@ export class MacNetworkUtils { .then((result) => { const parsedLines = result.stdout .split('\n') - .filter((line) => { - return ( - line.includes(hardwarePortPrefix) || - line.includes(devicePrefix) - ); - }) - .map((line) => { - return line - .replace(hardwarePortPrefix, '') - .replace(devicePrefix, '') - .trim(); - }); + .filter((line) => line.includes(hardwarePortPrefix) || line.includes(devicePrefix)) + .map((line) => line.replace(hardwarePortPrefix, '').replace(devicePrefix, '').trim()); const hardwarePorts: HardwarePort[] = []; for (let i = 0; i < parsedLines.length - 1; i += 2) { @@ -90,9 +84,7 @@ export class MacNetworkUtils { // status: active // ''' - const ifconfigCmd = `ifconfig ${ - parsedLines[i + 1] - } | awk '$1 == "inet" {print $2}'`; + const ifconfigCmd = `ifconfig ${parsedLines[i + 1]} | awk '$1 == "inet" {print $2}'`; let ipAddress = CommonUtils.executeCommandSync(ifconfigCmd); if (ipAddress) { @@ -104,27 +96,18 @@ export class MacNetworkUtils { address: ipAddress }); } else { - MacNetworkUtils.logger.warn( - `Invalid IP address ${ipAddress}` - ); + MacNetworkUtils.logger.warn(`Invalid IP address ${ipAddress}`); } } } return Promise.resolve(hardwarePorts); }) - .catch((error) => { - return Promise.reject( - new SfError( - util.format( - `Error collecting network hardware ports: ${error}` - ) - ) - ); - }); + .catch((error) => Promise.reject(new SfError(messages.getMessage('error:network:hardware:port', [error])))); } /** * Obtains the proxy settings of the host machine. + * * @returns A ProxySetting object containing the proxy settings of the host machine. */ public static async getProxySetting(): Promise { @@ -143,29 +126,18 @@ export class MacNetworkUtils { return CommonUtils.executeCommandAsync(cmd).then((result) => { const proxySettings = result.stdout .split('\n') - .filter((line) => { - return ( - line.includes(proxyAutoConfigEnabled) || - line.includes(proxyAutoConfigUrlString) - ); - }) + .filter((line) => line.includes(proxyAutoConfigEnabled) || line.includes(proxyAutoConfigUrlString)) .map((line) => { - const keyValuePair = line.split(' : ', 2).map((value) => { - return value.trim(); - }); + const keyValuePair = line.split(' : ', 2).map((value) => value.trim()); if (keyValuePair[0] === proxyAutoConfigEnabled) { return { - key: - keyValuePair[0].charAt(0).toLowerCase() + - keyValuePair[0].slice(1), + key: keyValuePair[0].charAt(0).toLowerCase() + keyValuePair[0].slice(1), value: parseInt(keyValuePair[1], 10) }; } else { return { - key: - keyValuePair[0].charAt(0).toLowerCase() + - keyValuePair[0].slice(1), + key: keyValuePair[0].charAt(0).toLowerCase() + keyValuePair[0].slice(1), value: keyValuePair[1] }; } diff --git a/src/common/PerformanceMarkers.ts b/src/common/PerformanceMarkers.ts index 6229d24..2e62074 100644 --- a/src/common/PerformanceMarkers.ts +++ b/src/common/PerformanceMarkers.ts @@ -1,14 +1,16 @@ +/* eslint-disable @typescript-eslint/member-ordering */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ -export interface PerformanceMarker { +export type PerformanceMarker = { endMarkName: string; name: string; startMarkName: string; -} +}; export class PerformanceMarkers { public static FETCH_DEVICES_MARKER_KEY = 'FetchDevicesMarker'; diff --git a/src/common/PlatformConfig.ts b/src/common/PlatformConfig.ts index d0095c1..0fedb87 100644 --- a/src/common/PlatformConfig.ts +++ b/src/common/PlatformConfig.ts @@ -27,7 +27,7 @@ * NOTE: The same issue would occur if these classes were defined as JSON files and where imported * (i.e import iOSConfig from { IOSConfig.json } or similar for Android) */ -import os from 'os'; +import os from 'node:os'; export class PlatformConfig { public static iOSConfig(): IOSConfig { @@ -39,38 +39,27 @@ export class PlatformConfig { } } -// tslint:disable-next-line: max-classes-per-file export class IOSConfig { public readonly minSupportedRuntime: string = '13'; public readonly defaultSimulatorName: string = 'SFDXSimulator'; } -// tslint:disable-next-line: max-classes-per-file export class AndroidConfig { public readonly minSupportedRuntime: string = '23'; - public readonly supportedImages: string[] = [ - 'google_apis', - 'default', - 'google_apis_playstore' - ]; - public readonly supportedDeviceTypes: string[] = [ - 'pixel', - 'pixel_xl', - 'pixel_c' - ]; + public readonly supportedImages: string[] = ['google_apis', 'default', 'google_apis_playstore']; + public readonly supportedDeviceTypes: string[] = ['pixel', 'pixel_xl', 'pixel_c']; public readonly supportedArchitectures: string[]; public readonly defaultEmulatorName: string = 'SFDXEmulator'; public readonly defaultAdbPort: number = 5572; + // eslint-disable-next-line unicorn/numeric-separators-style public readonly deviceReadinessWaitTime: number = 120000; public readonly AdbNumRetryAttempts: number = 6; public readonly AdbRetryAttemptDelay: number = 500; - constructor() { + public constructor() { const cpu = os.cpus()[0].model; const isAppleSilicon = cpu.includes('Apple M'); - this.supportedArchitectures = isAppleSilicon - ? ['arm64-v8a'] - : ['x86_64', 'x86', 'arm64-v8a']; + this.supportedArchitectures = isAppleSilicon ? ['arm64-v8a'] : ['x86_64', 'x86', 'arm64-v8a']; } } diff --git a/src/common/PreviewConfigFile.ts b/src/common/PreviewConfigFile.ts index 1ee3f16..ebfd0b7 100644 --- a/src/common/PreviewConfigFile.ts +++ b/src/common/PreviewConfigFile.ts @@ -1,10 +1,12 @@ +/* eslint-disable camelcase */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ -import { CommandLineUtils } from './Common'; +import { CommandLineUtils } from './Common.js'; export class PreviewConfigFile { public apps!: { @@ -16,40 +18,29 @@ export class PreviewConfigFile { platform: string, targetApp: string ): IOSAppPreviewConfig | AndroidAppPreviewConfig | undefined { - const appConfigs = CommandLineUtils.platformFlagIsIOS(platform) - ? this.apps.ios || [] - : this.apps.android || []; + const appConfigs = CommandLineUtils.platformFlagIsIOS(platform) ? this.apps.ios ?? [] : this.apps.android ?? []; - const config = appConfigs.find( - (appConfig) => appConfig.id === targetApp - ); + const config = appConfigs.find((appConfig) => appConfig.id === targetApp); return config; } } -// tslint:disable-next-line: max-classes-per-file export class LaunchArgument { public name!: string; public value!: string; } -// tslint:disable-next-line: max-classes-per-file class BaseAppPreviewConfig { public id!: string; public name!: string; - // tslint:disable-next-line: variable-name public get_app_bundle?: string; - // tslint:disable-next-line: variable-name public launch_arguments?: LaunchArgument[]; - // tslint:disable-next-line: variable-name public preview_server_enabled?: boolean; } -// tslint:disable-next-line: max-classes-per-file export class IOSAppPreviewConfig extends BaseAppPreviewConfig {} -// tslint:disable-next-line: max-classes-per-file export class AndroidAppPreviewConfig extends BaseAppPreviewConfig { public activity!: string; } diff --git a/src/common/PreviewUtils.ts b/src/common/PreviewUtils.ts index 6b7ecc6..498b71d 100644 --- a/src/common/PreviewUtils.ts +++ b/src/common/PreviewUtils.ts @@ -1,24 +1,27 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ + /* * Copyright (c) 2021, salesforce.com, inc. * All rights reserved. * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ +import path from 'node:path'; +import { createRequire } from 'node:module'; import Ajv from 'ajv'; -import path from 'path'; -import { CommonUtils } from './CommonUtils'; -import { - AndroidAppPreviewConfig, - IOSAppPreviewConfig, - PreviewConfigFile -} from './PreviewConfigFile'; +import { CommandLineUtils } from './Common.js'; +import { CommonUtils } from './CommonUtils.js'; +import { AndroidAppPreviewConfig, IOSAppPreviewConfig, PreviewConfigFile } from './PreviewConfigFile.js'; const NAMESPACE = 'com.salesforce.mobile-tooling'; -export interface ValidationResult { +export type ValidationResult = { errorMessage: string | null; passed: boolean; -} +}; export class PreviewUtils { public static BROWSER_TARGET_APP = 'browser'; @@ -29,17 +32,17 @@ export class PreviewUtils { /** * Checks to see if browser is the target for previewing an LWC. + * * @param targetApp The desired target app ('browser' or app bundle id). * @returns True if targetApp is browser. */ public static isTargetingBrowser(targetApp: string): boolean { - return ( - targetApp.trim().toLowerCase() === PreviewUtils.BROWSER_TARGET_APP - ); + return targetApp.trim().toLowerCase() === PreviewUtils.BROWSER_TARGET_APP; } /** * Checks to see if an LWC local dev server is needed for previewing an LWC for a provided target app. + * * @param targetApp The target app. * @param appConfig A preview configuration file. * @returns True if local dev server is needed for previewing. @@ -50,13 +53,13 @@ export class PreviewUtils { ): boolean { return ( PreviewUtils.isTargetingBrowser(targetApp) || - (appConfig !== undefined && - appConfig.preview_server_enabled === true) + (appConfig !== undefined && appConfig.preview_server_enabled === true) ); } /** * Checks to see if a component route needs to be prefixed. + * * @param compName A component route or name. * @returns The updated route which now starts with `c/` if compName did not start with `c/` already. */ @@ -69,21 +72,19 @@ export class PreviewUtils { /** * Validates a preview configuration file against a schema. + * * @param configFile The path to the preview configuration file. * @param schema The schema object to be used for validation. * @returns A ValidationResult object containing a pass/fail boolean and, for failure, an error message string. */ - public static async validateConfigFileWithSchema( - configFile: string, - schema: object - ): Promise { + public static validateConfigFileWithSchema(configFile: string, schema: object): Promise { try { const configFileJson = CommonUtils.loadJsonFromFile(configFile); - const ajv = new Ajv({ allErrors: true }); - const validationResult = await ajv.validate(schema, configFileJson); - const hasError = ajv.errors ? ajv.errors.length > 0 : false; - const errorText = ajv.errors ? ajv.errorsText() : ''; + const validator = new Ajv.default({ allErrors: true }); + const validationResult = validator.validate(schema, configFileJson); + const hasError = validator.errors ? validator.errors.length > 0 : false; + const errorText = validator.errors ? validator.errorsText() : ''; const isValid = validationResult === true && hasError === false; return Promise.resolve({ errorMessage: errorText, @@ -91,7 +92,7 @@ export class PreviewUtils { }); } catch (err) { return Promise.resolve({ - errorMessage: (err as any).toString(), + errorMessage: (err as Error).toString(), passed: false }); } @@ -99,6 +100,7 @@ export class PreviewUtils { /** * Loads a preview configuration file. + * * @param file The path to a preview configuration file. * @returns The content of the file parsed into a PreviewConfigFile object. */ @@ -110,6 +112,7 @@ export class PreviewUtils { /** * Attempts to obtain the app bundle path from an app preview config. + * * @param basePath Path to the directory that contains the preview configuration file. * @param appConfig An app preview configuration. * @returns A string representing the app bundle path. @@ -119,13 +122,52 @@ export class PreviewUtils { appConfig: IOSAppPreviewConfig | AndroidAppPreviewConfig ): string | undefined { if (appConfig.get_app_bundle) { - // eslint-disable-next-line @typescript-eslint/no-var-requires - const module = require( - path.resolve(basePath, appConfig.get_app_bundle) - ); + const require = createRequire(import.meta.url); + const module = require(path.resolve(basePath, appConfig.get_app_bundle)); return module.run(); } else { return undefined; } } + + /** + * For the new Local Development Preview approach where a new local dev server is being used, + * the local dev server needs to be configured to use a web socket url for local previewing. + * This method generates an appropriate web socket url to be used by the local dev server. + * + * @param platform a platform flag (desktop , ios, android). + * @param port the port number that the local dev server is configured to use. + * @returns A string representing a web socket url to be used by the local dev server. + */ + public static generateWebSocketUrlForLocalDevServer(platform: string, port: string): string { + /* + - For desktop browsers other than Safari, local development use cases will target ws://localhost: connections to the local dev server + - For the Safari desktop browser, target wss://localhost: + + - For mobile (webview in native apps), local development use cases will target: + - iOS: wss://localhost: + - Android: wss://10.0.2.2: + */ + + if (CommandLineUtils.platformFlagIsIOS(platform)) { + return `wss://localhost:${port}`; + } + + if (CommandLineUtils.platformFlagIsAndroid(platform)) { + return `wss://10.0.2.2:${port}`; + } + + if (process.platform !== 'darwin') { + return `ws://localhost:${port}`; // cannot be Safari since it is only available on Mac + } + + // If we've made it this far then it means that platform=desktop and we're on a Mac + // macOS use case: check to see if the default browser is Safari + // From https://apple.stackexchange.com/questions/313454/applescript-find-the-users-set-default-browser + const cmd = + "defaults read ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure | awk -F'\"' '/http;/{print window[(NR)-1]}{window[NR]=$2}'"; + const result = CommonUtils.executeCommandSync(cmd).trim().toLowerCase(); + const isSafari = result.includes('safari') || result === ''; + return isSafari ? `wss://localhost:${port}` : `ws://localhost:${port}`; + } } diff --git a/src/common/Requirements.ts b/src/common/Requirements.ts index fbda32d..94fec5d 100644 --- a/src/common/Requirements.ts +++ b/src/common/Requirements.ts @@ -4,47 +4,44 @@ * SPDX-License-Identifier: MIT * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ +import { performance, PerformanceObserver } from 'node:perf_hooks'; import { Logger, Messages, SfError } from '@salesforce/core'; import chalk from 'chalk'; -import util from 'util'; import { Listr } from 'listr2'; -import { performance, PerformanceObserver } from 'perf_hooks'; -import { PerformanceMarkers } from './PerformanceMarkers'; +import { PerformanceMarkers } from './PerformanceMarkers.js'; export type CheckRequirementsFunc = () => Promise; -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); -export interface Requirement { +export type Requirement = { title: string; checkFunction: CheckRequirementsFunc; fulfilledMessage?: string; unfulfilledMessage?: string; supplementalMessage?: string; logger: Logger; -} +}; -interface RequirementResult { +type RequirementResult = { duration: number; hasPassed: boolean; message: string; title: string; -} +}; -interface RequirementCheckResult { +type RequirementCheckResult = { hasMetAllRequirements: boolean; tests: RequirementResult[]; -} +}; -export interface RequirementList { +export type RequirementList = { requirements: Requirement[]; enabled: boolean; -} +}; export type CommandRequirements = { [key: string]: RequirementList }; -export interface HasRequirements { +export type HasRequirements = { commandRequirements: CommandRequirements; -} +}; /** * This function wraps existing promises with the intention to allow the collection of promises @@ -52,16 +49,13 @@ export interface HasRequirements { * rejection. We are looking for the equivalent of Promise.allSettled() which is scheduled for ES2020. * When the functionality is available this function can be removed. * See https://github.com/tc39/proposal-promise-allSettled + * * @param requirement A Requirement object * @returns A Promise object that runs the requirement check and returns a RequirementResult object. */ -export async function WrappedPromise( - requirement: Requirement -): Promise { +export async function WrappedPromise(requirement: Requirement): Promise { const promise = requirement.checkFunction(); - const perfMarker = PerformanceMarkers.getByName( - PerformanceMarkers.REQUIREMENTS_MARKER_KEY - )!; + const perfMarker = PerformanceMarkers.getByName(PerformanceMarkers.REQUIREMENTS_MARKER_KEY)!; let stepDuration = 0; const obs = new PerformanceObserver((items) => { @@ -79,9 +73,7 @@ export async function WrappedPromise( performance.mark(end); performance.measure(step, start, end); const msg = `${fulfilledMessage ? fulfilledMessage : ''} ${ - requirement.supplementalMessage - ? requirement.supplementalMessage - : '' + requirement.supplementalMessage ? requirement.supplementalMessage : '' }`; return { duration: stepDuration, @@ -94,9 +86,7 @@ export async function WrappedPromise( performance.mark(end); performance.measure(step, start, end); const msg = `${unfulfilledMessage ? unfulfilledMessage : ''} ${ - requirement.supplementalMessage - ? requirement.supplementalMessage - : '' + requirement.supplementalMessage ? requirement.supplementalMessage : '' }`; return { duration: stepDuration, @@ -110,18 +100,14 @@ export async function WrappedPromise( }); } -const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'requirement' -); +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); +const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'requirement'); export class RequirementProcessor { /** * Executes all of the base and command requirement checks. */ - public static async execute( - requirements: CommandRequirements - ): Promise { + public static async execute(requirements: CommandRequirements): Promise { const testResult: RequirementCheckResult = { hasMetAllRequirements: true, tests: [] @@ -133,9 +119,7 @@ export class RequirementProcessor { // eslint-disable-next-line @typescript-eslint/no-unused-vars Object.entries(requirements).forEach(([_, requirementList]) => { if (requirementList.enabled) { - enabledRequirements = enabledRequirements.concat( - requirementList.requirements - ); + enabledRequirements = enabledRequirements.concat(requirementList.requirements); } }); @@ -158,17 +142,16 @@ export class RequirementProcessor { WrappedPromise(requirement).then((result) => { testResult.tests.push(result); if (!result.hasPassed) { - testResult.hasMetAllRequirements = - false; + testResult.hasMetAllRequirements = false; } - subTask.title = - RequirementProcessor.getFormattedTitle( - result - ); + // eslint-disable-next-line no-param-reassign + subTask.title = RequirementProcessor.getFormattedTitle(result); + // eslint-disable-next-line no-param-reassign subTask.output = result.message; totalDuration += result.duration; + // eslint-disable-next-line no-param-reassign rootTask.title = `${rootTaskTitle} (${RequirementProcessor.formatDurationAsSeconds( totalDuration )})`; @@ -178,9 +161,7 @@ export class RequirementProcessor { // so that Listr would not replace the task title & output with the error message. // We want those to be formatted in a certain way so we update the task title and // output further up ourselves. - return result.hasPassed - ? Promise.resolve() - : Promise.reject(new Error()); + return result.hasPassed ? Promise.resolve() : Promise.reject(new Error()); }), title: requirement.title }); @@ -201,48 +182,31 @@ export class RequirementProcessor { try { await requirementTasks.run(); - - if (!testResult.hasMetAllRequirements) { - return Promise.reject( - new SfError( - messages.getMessage('error:requirementCheckFailed'), - 'lwc-dev-mobile-core', - [ - messages.getMessage( - 'error:requirementCheckFailed:recommendation' - ) - ] - ) - ); - } - - return Promise.resolve(); } catch (error) { return Promise.reject( - new SfError( - util.format('unexpected error %s', error), - 'lwc-dev-mobile-core' - ) + new SfError(messages.getMessage('error:unexpected', [(error as Error).message]), 'lwc-dev-mobile-core') ); } + + if (!testResult.hasMetAllRequirements) { + return Promise.reject( + new SfError(messages.getMessage('error:requirementCheckFailed'), 'lwc-dev-mobile-core', [ + messages.getMessage('error:requirementCheckFailed:recommendation') + ]) + ); + } + + return Promise.resolve(); } - private static getFormattedTitle( - testCaseResult: RequirementResult - ): string { - const statusMsg = testCaseResult.hasPassed - ? messages.getMessage('passed') - : messages.getMessage('failed'); + private static getFormattedTitle(testCaseResult: RequirementResult): string { + const statusMsg = testCaseResult.hasPassed ? messages.getMessage('passed') : messages.getMessage('failed'); - const title = `${statusMsg}: ${ - testCaseResult.title - } (${RequirementProcessor.formatDurationAsSeconds( + const title = `${statusMsg}: ${testCaseResult.title} (${RequirementProcessor.formatDurationAsSeconds( testCaseResult.duration )})`; - return testCaseResult.hasPassed - ? chalk.bold.green(title) - : chalk.bold.red(title); + return testCaseResult.hasPassed ? chalk.bold.green(title) : chalk.bold.red(title); } private static formatDurationAsSeconds(duration: number): string { diff --git a/src/common/__tests__/AndroidEnvironmentRequirements.test.ts b/src/common/__tests__/AndroidEnvironmentRequirements.test.ts deleted file mode 100644 index 0109756..0000000 --- a/src/common/__tests__/AndroidEnvironmentRequirements.test.ts +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -const MOCK_ANDROID_HOME = '/mock-android-home'; -process.env.ANDROID_HOME = MOCK_ANDROID_HOME; - -import { Logger } from '@salesforce/core'; -import { - AndroidSDKPlatformToolsInstalledRequirement, - AndroidSDKRootSetRequirement, - AndroidSDKToolsInstalledRequirement, - EmulatorImagesRequirement, - Java8AvailableRequirement, - PlatformAPIPackageRequirement -} from '../AndroidEnvironmentRequirements'; -import { AndroidPackage } from '../AndroidTypes'; -import { AndroidSDKRootSource, AndroidUtils } from '../AndroidUtils'; -import { Version } from '../Common'; -import { CommonUtils } from '../CommonUtils'; -import { AndroidMockData } from './AndroidMockData'; - -describe('Android environment requirement tests', () => { - const logger = new Logger('test'); - - let myCommandBlockMock: jest.Mock; - let badBlockMock: jest.Mock; - - beforeEach(() => { - myCommandBlockMock = jest.fn((): string => { - return AndroidMockData.mockRawPackagesString; - }); - - badBlockMock = jest.fn((): string => { - return AndroidMockData.badMockRawPackagesString; - }); - }); - - afterEach(() => { - myCommandBlockMock.mockClear(); - badBlockMock.mockClear(); - }); - - test('Should resolve when Android SDK root is set', async () => { - jest.spyOn(AndroidUtils, 'getAndroidSdkRoot').mockImplementation(() => { - return { - rootLocation: '/mock-android-home', - rootSource: AndroidSDKRootSource.androidHome - }; - }); - const requirement = new AndroidSDKRootSetRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).resolves; - }); - - test('Should reject when Android SDK root is not set', async () => { - jest.spyOn(AndroidUtils, 'getAndroidSdkRoot').mockImplementation( - () => undefined - ); - const requirement = new AndroidSDKRootSetRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).rejects; - }); - - test('Should resolve when Android sdk tools are present', async () => { - jest.spyOn(CommonUtils, 'executeCommandSync').mockImplementation( - () => MOCK_ANDROID_HOME - ); - const requirement = new AndroidSDKToolsInstalledRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).resolves; - }); - - test('Should reject when Android sdk tools are missing', async () => { - jest.spyOn(CommonUtils, 'executeCommandSync').mockImplementation(() => { - throw new Error('None'); - }); - const requirement = new AndroidSDKToolsInstalledRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).rejects; - }); - - test('Should resolve when Android sdk platform tools are present', async () => { - jest.spyOn(CommonUtils, 'executeCommandSync').mockImplementation( - () => MOCK_ANDROID_HOME - ); - const requirement = new AndroidSDKPlatformToolsInstalledRequirement( - logger - ); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).resolves; - }); - - test('Should reject when Android sdk platform tools are missing', async () => { - jest.spyOn(CommonUtils, 'executeCommandSync').mockImplementation(() => { - throw new Error('None'); - }); - const requirement = new AndroidSDKPlatformToolsInstalledRequirement( - logger - ); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).rejects; - }); - - test('Should resolve when Java 8 is available', async () => { - jest.spyOn( - AndroidUtils, - 'androidSDKPrerequisitesCheck' - ).mockImplementation(() => Promise.resolve('')); - const requirement = new Java8AvailableRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).resolves; - }); - - test('Should reject when Java 8 is not available', async () => { - jest.spyOn( - AndroidUtils, - 'androidSDKPrerequisitesCheck' - ).mockImplementation(() => Promise.reject('')); - const requirement = new Java8AvailableRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).rejects; - }); - - test('Should resolve when required platform API packages are present', async () => { - jest.spyOn( - AndroidUtils, - 'fetchSupportedAndroidAPIPackage' - ).mockImplementation(() => - Promise.resolve( - new AndroidPackage('', new Version(0, 0, 0), '', '') - ) - ); - const requirement = new PlatformAPIPackageRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).resolves; - }); - - test('Should reject when required platform API packages are not present', async () => { - jest.spyOn( - AndroidUtils, - 'fetchSupportedAndroidAPIPackage' - ).mockImplementation(() => Promise.reject('')); - const requirement = new PlatformAPIPackageRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).rejects; - }); - - test('Should resolve when required emulator images are available', async () => { - jest.spyOn( - AndroidUtils, - 'fetchSupportedEmulatorImagePackage' - ).mockImplementation(() => - Promise.resolve( - new AndroidPackage('', new Version(0, 0, 0), '', '') - ) - ); - const requirement = new EmulatorImagesRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).resolves; - }); - - test('Should reject when Java 8 is not available', async () => { - jest.spyOn( - AndroidUtils, - 'fetchSupportedEmulatorImagePackage' - ).mockImplementation(() => Promise.reject('')); - const requirement = new EmulatorImagesRequirement(logger); - const aPromise = requirement.checkFunction().catch(() => undefined); - expect(aPromise).rejects; - }); -}); diff --git a/src/common/__tests__/AndroidLauncher.test.ts b/src/common/__tests__/AndroidLauncher.test.ts deleted file mode 100644 index 0be7d3c..0000000 --- a/src/common/__tests__/AndroidLauncher.test.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import path from 'path'; -import { CommonUtils } from '../CommonUtils'; -import { AndroidLauncher } from '../AndroidLauncher'; -import { AndroidSDKRootSource, AndroidUtils } from '../AndroidUtils'; -import { AndroidMockData } from './AndroidMockData'; - -describe('Android Launcher tests', () => { - const mockAndroidHome = '/mock-android-home'; - const mockCmdLineToolsBin = path.normalize( - path.join(mockAndroidHome, 'cmdline-tools', 'latest', 'bin') - ); - - let myCommandBlockMock: jest.Mock; - - beforeEach(() => { - myCommandBlockMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => - Promise.resolve({ - stderr: '', - stdout: AndroidMockData.mockRawPackagesString - }) - ); - - // eslint-disable-next-line @typescript-eslint/no-empty-function - jest.spyOn(CommonUtils, 'startCliAction').mockImplementation(() => {}); - jest.spyOn(AndroidUtils, 'getAndroidSdkRoot').mockImplementation(() => { - return { - rootLocation: mockAndroidHome, - rootSource: AndroidSDKRootSource.androidHome - }; - }); - jest.spyOn(AndroidUtils, 'getAndroidCmdLineToolsBin').mockReturnValue( - mockCmdLineToolsBin - ); - }); - - afterEach(() => { - jest.restoreAllMocks(); - }); - - test('Should attempt to invoke preview in mobile browser', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - - jest.spyOn(AndroidUtils, 'hasEmulator').mockReturnValue( - Promise.resolve(true) - ); - - jest.spyOn(AndroidUtils, 'startEmulator').mockReturnValue( - Promise.resolve(5572) - ); - - const launchUrlMock = jest.fn(() => Promise.resolve()); - jest.spyOn(AndroidUtils, 'launchURLIntent').mockImplementation( - launchUrlMock - ); - - const launcher = new AndroidLauncher('Pixel XL'); - await launcher.launchPreview( - 'helloWorld', - '~', - undefined, - 'browser', - undefined, - '3333' - ); - - expect(launchUrlMock).toHaveBeenCalledWith( - 'http://10.0.2.2:3333/lwc/preview/c/helloWorld', - 5572 - ); - }); - - test('Should attempt to invoke preview in native app', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - - jest.spyOn(AndroidUtils, 'hasEmulator').mockReturnValue( - Promise.resolve(true) - ); - - jest.spyOn(AndroidUtils, 'startEmulator').mockReturnValue( - Promise.resolve(5572) - ); - - const launchAppMock = jest.fn(() => Promise.resolve()); - jest.spyOn(AndroidUtils, 'launchNativeApp').mockImplementation( - launchAppMock - ); - - const launcher = new AndroidLauncher('Pixel XL'); - await launcher.launchPreview( - 'helloWorld', - '~', - undefined, - 'com.salesforce.test', - undefined, - '3333' - ); - - expect(launchAppMock).toHaveBeenCalledWith( - 'helloWorld', - '~', - undefined, - 'com.salesforce.test', - [], - '', - 5572, - undefined, - undefined - ); - }); -}); diff --git a/src/common/__tests__/AndroidTypes.test.ts b/src/common/__tests__/AndroidTypes.test.ts deleted file mode 100644 index ba04097..0000000 --- a/src/common/__tests__/AndroidTypes.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -const ORIG_ANDROID_HOME = process.env.ANDROID_HOME; -const MOCK_ANDROID_HOME = '/mock-android-home'; -process.env.ANDROID_HOME = MOCK_ANDROID_HOME; - -import { AndroidPackages } from '../AndroidTypes'; -import { AndroidMockData } from './AndroidMockData'; - -describe('Android types tests', () => { - beforeEach(() => { - jest.resetModules(); - process.env.ANDROID_HOME = MOCK_ANDROID_HOME; - }); - - afterEach(() => { - process.env.ANDROID_HOME = ORIG_ANDROID_HOME; - jest.restoreAllMocks(); - }); - - test('Android Package class should correctly parse a raw string', async () => { - const packages = AndroidPackages.parseRawPackagesString( - AndroidMockData.mockRawPackagesString - ); - expect( - packages.platforms.length + packages.systemImages.length === - AndroidMockData.mockRawStringPackageLength - ).toBe(true); - }); - - test('Android Package class should correctly parse a raw string initialize members', async () => { - const packages = AndroidPackages.parseRawPackagesString( - AndroidMockData.mockRawPackagesString - ); - const platformPkg = packages.platforms.find((pkg) => - pkg.path.match('android-30') - ); - const sysImagePkg = packages.systemImages.find((pkg) => - pkg.path.match('android-29') - ); - - expect( - platformPkg && - platformPkg.path !== null && - platformPkg.description != null && - sysImagePkg && - sysImagePkg.path !== null && - sysImagePkg.description != null - ).toBe(true); - }); - - test('Android Package class should return and empty list for a bad string', async () => { - const packages = AndroidPackages.parseRawPackagesString( - AndroidMockData.badMockRawPackagesString - ); - expect(packages.isEmpty()).toBe(true); - }); -}); diff --git a/src/common/__tests__/AndroidUtils.test.ts b/src/common/__tests__/AndroidUtils.test.ts deleted file mode 100644 index e3a6dd7..0000000 --- a/src/common/__tests__/AndroidUtils.test.ts +++ /dev/null @@ -1,702 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { SfError } from '@salesforce/core'; -import fs from 'fs'; -import os from 'os'; -import path from 'path'; -import { AndroidSDKRootSource, AndroidUtils } from '../AndroidUtils'; -import { Version } from '../Common'; -import { CommonUtils } from '../CommonUtils'; -import { PreviewUtils } from '../PreviewUtils'; -import { AndroidMockData } from './AndroidMockData'; - -describe('Android utils', () => { - const mockAndroidHome = '/mock-android-home'; - - const mockAndroidSdkRoot = '/mock-android-sdk-root'; - - const userHome = - process.env.HOME || process.env.HOMEPATH || process.env.USERPROFILE; - - const mockCmdLineToolsBin = path.normalize( - path.join(mockAndroidHome, 'cmdline-tools', 'latest', 'bin') - ); - const sdkCommand = path.normalize( - path.join(mockCmdLineToolsBin, 'sdkmanager') - ); - const adbCommand = path.normalize(mockAndroidHome + '/platform-tools/adb'); - - let myGenericVersionsCommandBlockMock: jest.Mock; - let myGenericVersionsCommandBlockMockThrows: jest.Mock; - let myCommandBlockMock: jest.Mock; - let badBlockMock: jest.Mock; - let throwMock: jest.Mock; - let launchCommandMock: jest.Mock; - let launchCommandThrowsMock: jest.Mock; - let readFileSpy: jest.SpyInstance; - let writeFileSpy: jest.SpyInstance; - - const isAppleSilicon = os.cpus()[0].model.includes('Apple M'); - const testAvdApi = isAppleSilicon ? '31' : '29'; - const testAvdName = isAppleSilicon ? 'Pixel_5_API_31' : 'Pixel_4_XL_API_29'; - const testAvdPath = isAppleSilicon - ? '/User/test/.android/avd/Pixel_5_API_31.avd' - : '/User/test/.android/avd/Pixel_4_XL_API_29.avd'; - - beforeEach(() => { - myGenericVersionsCommandBlockMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - return Promise.resolve({ - stdout: 'mock version 1.0', - stderr: '' - }); - } - ); - - myGenericVersionsCommandBlockMockThrows = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => - Promise.reject(new Error('Command not found!')) - ); - - myCommandBlockMock = jest.fn( - (command: string): Promise<{ stdout: string; stderr: string }> => { - let output = ''; - if (command.endsWith('avdmanager list avd')) { - output = AndroidMockData.avdList; - } else if (command.endsWith('emulator -list-avds')) { - output = AndroidMockData.emuNames; - } else if (command.endsWith('adb devices')) { - output = 'emulator-5572'; - } else if (command.endsWith('emu avd name')) { - output = testAvdName; - } else if (command.endsWith('emu avd path')) { - output = testAvdPath; - } else { - output = AndroidMockData.mockRawPackagesString; - } - - return Promise.resolve({ - stderr: '', - stdout: output - }); - } - ); - - badBlockMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => - Promise.resolve({ - stderr: '', - stdout: AndroidMockData.badMockRawPackagesString - }) - ); - - throwMock = jest.fn((): void => { - throw new Error('test error'); - }); - - launchCommandMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => - Promise.resolve({ stdout: '', stderr: '' }) - ); - - launchCommandThrowsMock = jest.fn((): string => { - throw new Error(' Mock Error'); - }); - - // eslint-disable-next-line @typescript-eslint/no-empty-function - jest.spyOn(CommonUtils, 'startCliAction').mockImplementation(() => {}); - jest.spyOn(CommonUtils, 'delay').mockReturnValue(Promise.resolve()); - jest.spyOn(AndroidUtils, 'getAndroidSdkRoot').mockImplementation(() => { - return { - rootLocation: mockAndroidHome, - rootSource: AndroidSDKRootSource.androidHome - }; - }); - jest.spyOn(AndroidUtils, 'getAndroidCmdLineToolsBin').mockReturnValue( - mockCmdLineToolsBin - ); - myCommandBlockMock.mockClear(); - badBlockMock.mockClear(); - AndroidUtils.clearCaches(); - throwMock.mockClear(); - launchCommandMock.mockClear(); - launchCommandThrowsMock.mockClear(); - readFileSpy = jest.spyOn(fs, 'readFileSync'); - writeFileSpy = jest - .spyOn(fs, 'writeFileSync') - .mockImplementation(jest.fn()); - }); - - afterEach(() => { - jest.restoreAllMocks(); - }); - - test('Should attempt to verify Android SDK prerequisites are met', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myGenericVersionsCommandBlockMock - ); - await AndroidUtils.androidSDKPrerequisitesCheck(); - expect(myGenericVersionsCommandBlockMock).toHaveBeenCalledWith( - `${sdkCommand} --version` - ); - }); - - test('Should attempt to look for and find android sdk tools (sdkmanager)', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myGenericVersionsCommandBlockMock - ); - await AndroidUtils.fetchAndroidCmdLineToolsLocation(); - expect(myGenericVersionsCommandBlockMock).toHaveBeenCalledWith( - `${sdkCommand} --version` - ); - }); - - test('Should attempt to look for and not find android sdk tools (sdkmanager)', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myGenericVersionsCommandBlockMockThrows - ); - AndroidUtils.fetchAndroidCmdLineToolsLocation().catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should attempt to look for and find android sdk platform tools', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myGenericVersionsCommandBlockMock - ); - await AndroidUtils.fetchAndroidSDKPlatformToolsLocation(); - expect(myGenericVersionsCommandBlockMock).toHaveBeenCalledWith( - `${adbCommand} --version` - ); - }); - - test('Should attempt to look for and not find android sdk platform tools', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myGenericVersionsCommandBlockMockThrows - ); - AndroidUtils.fetchAndroidSDKPlatformToolsLocation().catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should attempt to invoke the sdkmanager for installed packages', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - await AndroidUtils.fetchInstalledPackages(); - expect(myCommandBlockMock).toHaveBeenCalledWith(`${sdkCommand} --list`); - }); - - test('Should attempt to invoke the sdkmanager and get installed packages', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - const packages = await AndroidUtils.fetchInstalledPackages(); - expect( - packages.platforms.length + packages.systemImages.length === - AndroidMockData.mockRawStringPackageLength - ).toBe(true); - }); - - test('Should attempt to invoke the sdkmanager and retrieve an empty list for a bad sdkmanager list', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - badBlockMock - ); - const packages = await AndroidUtils.fetchInstalledPackages(); - expect(packages.isEmpty()).toBe(true); - }); - - test('Should have no cache before first list packages call', async () => { - expect(AndroidUtils.isCached()).toBeFalsy(); - }); - - test('Should establish cache on first call', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - await AndroidUtils.fetchInstalledPackages(); - expect(AndroidUtils.isCached()).toBeTruthy(); - }); - - test('Should utilize cache for subsequent calls', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - await AndroidUtils.fetchInstalledPackages(); - await AndroidUtils.fetchInstalledPackages(); - await AndroidUtils.fetchInstalledPackages(); - expect(myCommandBlockMock).toHaveBeenCalledTimes(1); - }); - - test('Should rebuild cache after clear in subsequent calls', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - await AndroidUtils.fetchInstalledPackages(); - await AndroidUtils.fetchInstalledPackages(); - AndroidUtils.clearCaches(); - await AndroidUtils.fetchInstalledPackages(); - expect(myCommandBlockMock).toHaveBeenCalledTimes(2); - }); - - test('Should find a preferred Android package', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - const apiPackage = await AndroidUtils.fetchSupportedAndroidAPIPackage(); - expect(apiPackage !== null && apiPackage.description !== null).toBe( - true - ); - }); - - test('Should find a preferred Android package at a specific API level', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - const apiPackage = - await AndroidUtils.fetchSupportedAndroidAPIPackage(testAvdApi); - expect(apiPackage !== null && apiPackage.description !== null).toBe( - true - ); - expect( - Version.same(apiPackage.version, Version.from(testAvdApi)!) - ).toBe(true); - }); - - test('Should not find a preferred Android package', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - badBlockMock - ); - AndroidUtils.fetchSupportedAndroidAPIPackage().catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should find a preferred Android emulator package', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - const apiPackage = - await AndroidUtils.fetchSupportedEmulatorImagePackage(); - expect(apiPackage !== null && apiPackage.description !== null).toBe( - true - ); - }); - - test('Should not find a preferred Android build tools package', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - badBlockMock - ); - AndroidUtils.fetchSupportedEmulatorImagePackage().catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - // Original Pixel/Pixel XL is a special case for skin path. - test('Should update Pixel config with skin', async () => { - const avdName = 'configTest'; - const testConfig = 'hw.device.name=pixel\n'; - const expectedConfig = - 'hw.device.name=pixel\n' + - 'hw.keyboard=yes\n' + - 'hw.gpu.mode=auto\n' + - 'hw.gpu.enabled=yes\n' + - 'skin.name=pixel_silver\n' + - `skin.path=${mockAndroidHome}/skins/pixel_silver\n` + - 'skin.dynamic=yes\n' + - 'showDeviceFrame=yes\n'; - - readFileSpy.mockReturnValue(testConfig); - await AndroidUtils.updateEmulatorConfig(avdName); - - expect(readFileSpy).toHaveBeenCalled(); - expect(writeFileSpy).toHaveBeenCalledWith( - path.normalize( - `${userHome}/.android/avd/${avdName}.avd/config.ini` - ), - expectedConfig, - 'utf8' - ); - }); - - test('Should update Pixel 3 config with skin', async () => { - const avdName = 'configTest'; - const testConfig = 'hw.device.name=pixel_3\n'; - const expectedConfig = - 'hw.device.name=pixel_3\n' + - 'hw.keyboard=yes\n' + - 'hw.gpu.mode=auto\n' + - 'hw.gpu.enabled=yes\n' + - 'skin.name=pixel_3\n' + - `skin.path=${mockAndroidHome}/skins/pixel_3\n` + - 'skin.dynamic=yes\n' + - 'showDeviceFrame=yes\n'; - - readFileSpy.mockReturnValue(testConfig); - await AndroidUtils.updateEmulatorConfig(avdName); - - expect(readFileSpy).toHaveBeenCalled(); - expect(writeFileSpy).toHaveBeenCalledWith( - path.normalize( - `${userHome}/.android/avd/${avdName}.avd/config.ini` - ), - expectedConfig, - 'utf8' - ); - }); - - test('Should update unknown device config without skin', async () => { - const avdName = 'configTest'; - const testConfig = 'hw.device.manufacture=Google\n'; - const expectedConfig = - 'hw.device.manufacture=Google\n' + - 'hw.keyboard=yes\n' + - 'hw.gpu.mode=auto\n' + - 'hw.gpu.enabled=yes\n'; - - readFileSpy.mockReturnValue(testConfig); - await AndroidUtils.updateEmulatorConfig(avdName); - - expect(readFileSpy).toHaveBeenCalled(); - expect(writeFileSpy).toHaveBeenCalledWith( - path.normalize( - `${userHome}/.android/avd/${avdName}.avd/config.ini` - ), - expectedConfig, - 'utf8' - ); - }); - - test('Should not write config if size is 0', async () => { - const avdName = 'configTest'; - const testConfig = ''; - - readFileSpy.mockReturnValue(testConfig); - await AndroidUtils.updateEmulatorConfig(avdName); - - expect(readFileSpy).toHaveBeenCalled(); - expect(writeFileSpy).toHaveBeenCalledTimes(0); - }); - - test('Should not write config on read error', async () => { - const avdName = 'configTest'; - - readFileSpy.mockImplementation(throwMock); - await AndroidUtils.updateEmulatorConfig(avdName); - - expect(readFileSpy).toHaveBeenCalled(); - expect(writeFileSpy).toHaveBeenCalledTimes(0); - }); - - test('Should attempt to launch url and resolve.', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - const url = 'mock.url'; - const port = 1234; - const expectedCommand = `${adbCommand} -s emulator-${port} shell am start -a android.intent.action.VIEW -d ${url}`; - await AndroidUtils.launchURLIntent(url, port); - expect(launchCommandMock).toHaveBeenCalledWith(expectedCommand); - }); - - test('Should attempt to launch url and reject if error is encountered.', async () => { - jest.spyOn(CommonUtils, 'executeCommandSync').mockImplementation( - launchCommandThrowsMock - ); - const url = 'mock.url'; - const port = 1234; - return AndroidUtils.launchURLIntent(url, port).catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should attempt to launch native app and resolve.', async () => { - const compName = 'mock.compName'; - const projectDir = '/mock/path'; - const targetApp = 'com.mock.app'; - const targetActivity = '.MainActivity'; - const targetAppArgs = [ - { name: 'arg1', value: 'val1' }, - { name: 'arg2', value: 'val2' } - ]; - const port = 1234; - const launchArgs = - `--es "${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}" "${compName}"` + - ` --es "${PreviewUtils.PROJECT_DIR_ARG_PREFIX}" "${projectDir}"` + - ` --es "arg1" "val1" --es "arg2" "val2"`; - - const mockCmd = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => - Promise.resolve({ - stderr: '', - stdout: `${targetApp}/.MainActivity` - }) - ); - - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - mockCmd - ); - - await AndroidUtils.launchNativeApp( - compName, - projectDir, - undefined, - targetApp, - targetAppArgs, - targetActivity, - port, - undefined, - undefined - ); - - expect(mockCmd).toBeCalledTimes(1); - expect(mockCmd).nthCalledWith( - 1, - `${adbCommand} -s emulator-${port}` + - ` shell am start -S -n "${targetApp}/${targetActivity}"` + - ' -a android.intent.action.MAIN' + - ' -c android.intent.category.LAUNCHER' + - ` ${launchArgs}` - ); - }); - - test('Should attempt to launch native app and reject if error is encountered.', async () => { - jest.spyOn(CommonUtils, 'executeCommandSync').mockImplementation( - launchCommandThrowsMock - ); - const compName = 'mock.compName'; - const projectDir = '/mock/path'; - const targetApp = 'com.mock.app'; - const targetActivity = '.MainActivity'; - const targetAppArgs = [ - { name: 'arg1', value: 'val1' }, - { name: 'arg2', value: 'val2' } - ]; - const port = 1234; - return AndroidUtils.launchNativeApp( - compName, - projectDir, - undefined, - targetApp, - targetAppArgs, - targetActivity, - port, - undefined, - undefined - ).catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should attempt to install native app then launch it.', async () => { - const compName = 'mock.compName'; - const projectDir = '/mock/path'; - const appBundlePath = '/mock/path/MyTestApp.apk'; - const targetApp = 'com.mock.app'; - const targetActivity = '.MainActivity'; - const targetAppArgs = [ - { name: 'arg1', value: 'val1' }, - { name: 'arg2', value: 'val2' } - ]; - const port = 1234; - const launchArgs = - `--es "${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}" "${compName}"` + - ` --es "${PreviewUtils.PROJECT_DIR_ARG_PREFIX}" "${projectDir}"` + - ` --es "arg1" "val1" --es "arg2" "val2"`; - - const mockCmd = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => - Promise.resolve({ - stderr: '', - stdout: `${targetApp}/.MainActivity` - }) - ); - - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - mockCmd - ); - - await AndroidUtils.launchNativeApp( - compName, - projectDir, - appBundlePath, - targetApp, - targetAppArgs, - targetActivity, - port, - undefined, - undefined - ); - - const pathQuote = process.platform === 'win32' ? '"' : "'"; - - expect(mockCmd).toBeCalledTimes(2); - expect(mockCmd).nthCalledWith( - 1, - `${adbCommand} -s emulator-${port} install -r -t ${pathQuote}${appBundlePath.trim()}${pathQuote}` - ); - expect(mockCmd).nthCalledWith( - 2, - `${adbCommand} -s emulator-${port}` + - ` shell am start -S -n "${targetApp}/${targetActivity}"` + - ' -a android.intent.action.MAIN' + - ' -c android.intent.category.LAUNCHER' + - ` ${launchArgs}` - ); - }); - - test('Should resolve ANDROID_HOME as SDK root', async () => { - process.env.ANDROID_HOME = mockAndroidHome; - delete process.env.ANDROID_SDK_ROOT; // set it to undefined - jest.restoreAllMocks(); - jest.spyOn(fs, 'existsSync').mockReturnValue(true); - const sdkRoot = AndroidUtils.getAndroidSdkRoot(); - const rootPath = (sdkRoot && sdkRoot.rootLocation) || ''; - expect(rootPath).toBe(mockAndroidHome); - }); - - test('Should resolve ANDROID_SDK_ROOT as SDK root', async () => { - delete process.env.ANDROID_HOME; // set it to undefined - process.env.ANDROID_SDK_ROOT = mockAndroidSdkRoot; - jest.restoreAllMocks(); - jest.spyOn(fs, 'existsSync').mockReturnValue(true); - const sdkRoot = AndroidUtils.getAndroidSdkRoot(); - const rootPath = (sdkRoot && sdkRoot.rootLocation) || ''; - expect(rootPath).toBe(mockAndroidSdkRoot); - }); - - test('Should resolve ANDROID_HOME as SDK root if both ANDROID_HOME and ANDROID_SDK_ROOT are set', async () => { - process.env.ANDROID_HOME = mockAndroidHome; - process.env.ANDROID_SDK_ROOT = mockAndroidSdkRoot; - jest.restoreAllMocks(); - jest.spyOn(fs, 'existsSync').mockReturnValue(true); - const sdkRoot = AndroidUtils.getAndroidSdkRoot(); - const rootPath = (sdkRoot && sdkRoot.rootLocation) || ''; - expect(rootPath).toBe(mockAndroidHome); - }); - - test('Should attempt to fetch an emulator', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - - const found = await AndroidUtils.fetchEmulator('Pixel_XL_API_28'); - const notFound = await AndroidUtils.fetchEmulator('blah'); - expect(found && found.name === 'Pixel_XL_API_28').toBe(true); - expect(notFound === undefined).toBe(true); - }); - - test('Checks whether emulator exists', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - - const found = await AndroidUtils.hasEmulator('Pixel_XL_API_28'); - const notFound = await AndroidUtils.hasEmulator('blah'); - expect(found).toBe(true); - expect(notFound).toBe(false); - }); - - test('Should start an emulator on a new port when another emulator is already running', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - readFileSpy.mockReturnValue(''); - - // mocks are set up to show that testAvdName is running on 5572 - // so Pixel_XL_API_28 should now start on 5574 - const port = await AndroidUtils.startEmulator('Pixel_XL_API_28'); - expect(port).toBe(5574); - }); - - test('Should restart an emulator that is already running but not in writable system mode', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - readFileSpy.mockReturnValue(''); - - const port = await AndroidUtils.startEmulator(testAvdName, true); - expect(port).toBe(5572); - }); - - test('Should remount as root with writable system access on API 29', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - - jest.spyOn(fs, 'readFileSync').mockImplementation( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - (filePath: any, encoding: any) => { - if (filePath.endsWith(`${testAvdName}.ini`)) { - return 'target=android-29'; - } else { - return ''; - } - } - ); - - const port = await AndroidUtils.mountAsRootWritableSystem(testAvdName); - expect(port).toBe(5572); - }); - - test('Resolves when device is not a Google Play device', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - readFileSpy.mockReturnValue(''); - - try { - await AndroidUtils.ensureDeviceIsNotGooglePlay(testAvdName); - } catch (error) { - fail( - `Should have resolved b/c device is not Google Play: ${error}` - ); - } - }); - - test('Rejects when device is a Google Play device', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - readFileSpy.mockReturnValue(''); - - expect.assertions(1); - try { - await AndroidUtils.ensureDeviceIsNotGooglePlay('Pixel_3_API_29'); - } catch (error) { - expect(error instanceof SfError).toBe(true); - } - }); - - /* - test('Gets the latest version of cmdline tools', async () => { - jest.restoreAllMocks(); - - jest.spyOn(AndroidUtils, 'getAndroidSdkRoot').mockImplementation(() => { - return { - rootLocation: mockAndroidHome, - rootSource: AndroidSDKRootSource.androidHome - }; - }); - - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandBlockMock - ); - - jest.spyOn(fs, 'existsSync').mockReturnValue(true); - - const directories = ['1.0', '2.1', '3.0', '4.0-beta01', 'latest']; - spyOn(fs, 'readdirSync').and.returnValue(directories); - - const binPath = AndroidUtils.getAndroidCmdLineToolsBin(); - const expectedPath = path.normalize( - `${mockAndroidHome}/cmdline-tools/latest/bin` - ); - expect(binPath).toBe(expectedPath); - }); - */ -}); diff --git a/src/common/__tests__/Common.test.ts b/src/common/__tests__/Common.test.ts deleted file mode 100644 index 4ad644c..0000000 --- a/src/common/__tests__/Common.test.ts +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { Messages } from '@salesforce/core'; -import * as common from '../Common'; - -// Initialize Messages with the current plugin directory -Messages.importMessagesDirectory(__dirname); - -describe('Commons utils tests', () => { - // Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core, - // or any library that is using the messages framework can also be loaded this way. - const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'common' - ); - - test('Filtering of maps returns maps', async () => { - const mascotMapping = new Map(); - mascotMapping.set('Edddie', 'Iron Maiden'); - mascotMapping.set('Rattlehead', 'Megadeth'); - mascotMapping.set('Henry', 'Sabbath'); - - const filteredByMascots = common.MapUtils.filter( - mascotMapping, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - (key, value) => key.indexOf('Rattle') > -1 - ); - expect(filteredByMascots.size === 1); - }); - - test('Filtering of maps returns empty maps', async () => { - const mascotMapping = new Map(); - mascotMapping.set('Edddie', 'Iron Maiden'); - mascotMapping.set('Rattlehead', 'Megadeth'); - mascotMapping.set('Henry', 'Sabbath'); - - const filteredByMascots = common.MapUtils.filter( - mascotMapping, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - (key, value) => key.indexOf('Murray') > -1 - ); - expect(filteredByMascots.size === 0); - }); - - test('Filtering of maps retrun empty maps and not null, when no match is found', async () => { - const mascotMapping = new Map(); - mascotMapping.set('Edddie', 'Iron Maiden'); - mascotMapping.set('Rattlehead', 'Megadeth'); - mascotMapping.set('Henry', 'Sabbath'); - - const filteredByMascots = common.MapUtils.filter( - mascotMapping, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - (key, value) => key.indexOf('Murray') > -1 - ); - expect(filteredByMascots !== undefined && filteredByMascots != null); - }); - - test('Filtering of empty maps returns empty maps, when no match is found', async () => { - const mascotMapping = new Map(); - const filteredByMascots = common.MapUtils.filter( - mascotMapping, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - (key, value) => key.indexOf('Murray') > -1 - ); - expect(filteredByMascots !== undefined && filteredByMascots != null); - }); - - test('Filtering of sets returns sets', async () => { - const mascotSets = new Set(); - mascotSets.add('Edddie'); - mascotSets.add('Rattlehead'); - mascotSets.add('Henry'); - - const filteredByMascots = common.SetUtils.filter( - mascotSets, - (value) => value.indexOf('Rattle') > -1 - ); - expect(filteredByMascots.size === 1); - }); - - test('Filtering of sets returns empty sets when no match is found', async () => { - const mascotSets = new Set(); - mascotSets.add('Edddie'); - mascotSets.add('Rattlehead'); - mascotSets.add('Henry'); - - const filteredByMascots = common.SetUtils.filter( - mascotSets, - (value) => value.indexOf('Murray') > -1 - ); - expect(filteredByMascots.size === 0); - }); - - test('Filtering of sets returns empty set and not null, when no match is found', async () => { - const mascotSets = new Set(); - mascotSets.add('Edddie'); - mascotSets.add('Rattlehead'); - mascotSets.add('Henry'); - - const filteredByMascots = common.SetUtils.filter( - mascotSets, - (value) => value.indexOf('Murray') > -1 - ); - expect(filteredByMascots !== undefined && filteredByMascots !== null); - }); - - test('Test if Android platform check matches input string', async () => { - expect( - common.CommandLineUtils.platformFlagIsAndroid('android') === true - ); - }); - - test('Test if Android platform check matches input string', async () => { - expect( - common.CommandLineUtils.platformFlagIsAndroid('AndroiD') === true - ); - }); - - test('Test that Android platform check does not match input string', async () => { - expect(common.CommandLineUtils.platformFlagIsAndroid('lkds') === false); - }); - - test('Test that Android platform check does not match empty input string', async () => { - expect(common.CommandLineUtils.platformFlagIsAndroid('') === false); - }); - - test('Test if iOS platform matches input string', async () => { - expect(common.CommandLineUtils.platformFlagIsIOS('iOS') === true); - }); - - test('Test if iOS platform matches input string', async () => { - expect(common.CommandLineUtils.platformFlagIsIOS('IOS') === true); - }); - - test('Test that iOS platform check does not match input string', async () => { - expect(common.CommandLineUtils.platformFlagIsIOS('lkds') === false); - }); - - test('Test that iOS platform check does not match empty input string', async () => { - expect(common.CommandLineUtils.platformFlagIsIOS('') === false); - }); - - test('Platform flag config property returns expected flag', async () => { - let platformFlagConfig = common.CommandLineUtils.createFlag( - common.FlagsConfigType.Platform, - true - ); - expect(platformFlagConfig.platform).toBeDefined(); - expect(platformFlagConfig.platform!.description).toBe( - messages.getMessage('platformFlagMobileOnlyDescription') - ); - let requiredKeyValuePair = Object.entries( - platformFlagConfig.platform! - ).find((keyValuePair) => keyValuePair[0] === 'required'); - - expect(requiredKeyValuePair).toBeDefined(); - expect(requiredKeyValuePair![1]).toBe(true); - - platformFlagConfig = common.CommandLineUtils.createFlag( - common.FlagsConfigType.Platform, - false - ); - - requiredKeyValuePair = Object.entries( - platformFlagConfig.platform! - ).find((keyValuePair) => keyValuePair[0] === 'required'); - - expect(requiredKeyValuePair).toBeDefined(); - expect(requiredKeyValuePair![1]).toBe(false); - }); - - test('API level flag config property returns expected flag', async () => { - let apiLevelFlagConfig = common.CommandLineUtils.createFlag( - common.FlagsConfigType.ApiLevel, - true - ); - expect(apiLevelFlagConfig.apilevel).toBeDefined(); - expect(apiLevelFlagConfig.apilevel!.description).toBe( - messages.getMessage('apiLevelFlagDescription') - ); - - let requiredKeyValuePair = Object.entries( - apiLevelFlagConfig.apilevel! - ).find((keyValuePair) => keyValuePair[0] === 'required'); - - expect(requiredKeyValuePair).toBeDefined(); - expect(requiredKeyValuePair![1]).toBe(true); - - apiLevelFlagConfig = common.CommandLineUtils.createFlag( - common.FlagsConfigType.ApiLevel, - false - ); - - requiredKeyValuePair = Object.entries( - apiLevelFlagConfig.apilevel! - ).find((keyValuePair) => keyValuePair[0] === 'required'); - - expect(requiredKeyValuePair).toBeDefined(); - expect(requiredKeyValuePair![1]).toBe(false); - }); - - test('Valid Version formats return expected object values', async () => { - // Major only. - const v1 = common.Version.from('1'); - expect(v1?.major).toBe(1); - expect(v1?.minor).toBe(0); - expect(v1?.patch).toBe(0); - - // Major and minor only. - for (const versionString of ['2.3', '2-3']) { - const v2 = common.Version.from(versionString); - expect(v2?.major).toBe(2); - expect(v2?.minor).toBe(3); - expect(v2?.patch).toBe(0); - } - - // Major, minor, and patch. - for (const versionString of ['4.5.6', '4-5-6']) { - const v3 = common.Version.from(versionString); - expect(v3?.major).toBe(4); - expect(v3?.minor).toBe(5); - expect(v3?.patch).toBe(6); - } - - // Space-padded values. - for (const versionString of [' 7.8.9 ', ' 7-8-9 ']) { - const v4 = common.Version.from(versionString); - expect(v4?.major).toBe(7); - expect(v4?.minor).toBe(8); - expect(v4?.patch).toBe(9); - } - - // Multi-digit values. - for (const versionString of ['10.111.1212', '10-111-1212']) { - const v5 = common.Version.from(versionString); - expect(v5?.major).toBe(10); - expect(v5?.minor).toBe(111); - expect(v5?.patch).toBe(1212); - } - - // 'Zero' releases. - for (const versionString of ['0.1.2', '0-1-2']) { - const v6 = common.Version.from(versionString); - expect(v6?.major).toBe(0); - expect(v6?.minor).toBe(1); - expect(v6?.patch).toBe(2); - } - }); - - test('Invalid Version formats return null', async () => { - const invalidVersions = [ - 'some-random-string', - '001.002.003', - '004-005-006', - '2-3.4', - '2.3-4', - '5.6.7.8', - '9-10-11-12' - ]; - for (const invalidVersion of invalidVersions) { - expect(common.Version.from(invalidVersion)).toBeNull(); - } - }); - - test('compare versions', () => { - expect( - common.Version.same('1.2.3', common.Version.from('1.2.3')!) - ).toBe(true); - - expect( - common.Version.sameOrNewer('1.2.3', common.Version.from('3.2.1')!) - ).toBe(false); - - expect(common.Version.same('Tiramisu', 'Tiramisu')).toBe(true); - - expect(common.Version.sameOrNewer('Tiramisu', 'Tiramisu')).toBe(true); - - expect( - common.Version.sameOrNewer( - 'Tiramisu', - common.Version.from('1.2.3')! - ) - ).toBe(true); - - expect( - common.Version.sameOrNewer( - common.Version.from('1.2.3')!, - 'Tiramisu' - ) - ).toBe(false); - - expect(() => { - common.Version.sameOrNewer('Tiramisu', 'UpsideDownCake'); - }).toThrow(); - }); -}); diff --git a/src/common/__tests__/CommonUtils.test.ts b/src/common/__tests__/CommonUtils.test.ts deleted file mode 100644 index 0033693..0000000 --- a/src/common/__tests__/CommonUtils.test.ts +++ /dev/null @@ -1,343 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { CommonUtils } from '../CommonUtils'; -import os from 'os'; -import fs from 'fs'; -import path from 'path'; - -describe('CommonUtils', () => { - beforeEach(() => { - // eslint-disable-next-line @typescript-eslint/no-empty-function - jest.spyOn(CommonUtils, 'startCliAction').mockImplementation(() => {}); - }); - - test('replaceTokens function', async () => { - const template = - // tslint:disable-next-line:no-invalid-template-strings - 'A quick brown ${animal1} jumped over the lazy ${animal2}'; - - const formatted = CommonUtils.replaceTokens(template, { - animal1: 'fox', - animal2: 'dog' - }); - expect(formatted).toBe('A quick brown fox jumped over the lazy dog'); - - const notFormatted = CommonUtils.replaceTokens(template, {}); - expect(notFormatted).toBe( - // tslint:disable-next-line:no-invalid-template-strings - 'A quick brown ${animal1} jumped over the lazy ${animal2}' - ); - }); - - test('createTempDirectory function', async () => { - const tmpDir = os.tmpdir(); - const folderPrefix = 'lwc-mobile-'; - const tempFolderPath = path.join(tmpDir, folderPrefix); - - const folder = await CommonUtils.createTempDirectory(); - expect(fs.existsSync(folder)).toBeTruthy(); - expect(folder.includes(tempFolderPath)).toBeTruthy(); - - jest.spyOn(fs, 'mkdtemp').mockImplementationOnce((_, callback) => - callback(new Error(), '') - ); - - try { - await CommonUtils.createTempDirectory(); - } catch (error) { - const message = `Could not create a temp folder at ${tempFolderPath}: `; - expect((error as any).message.includes(message)).toBeTruthy(); - } - }); - - test('Resolves the server port when it is running with multiple processes', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockReturnValue( - Promise.resolve({ - stdout: ` - 86659 ttys002 0:00.01 bash /usr/local/bin/sfdx force:lightning:lwc:start -p 3456 - 86670 ttys002 0:00.00 bash /Users/test/.local/share/sfdx/client/bin/sfdx force:lightning:lwc:start -p 3456 - 86675 ttys002 0:00.01 bash /Users/test/.local/share/sfdx/client/bin/../7.91.0-6a6ed69ebe/bin/sfdx force:lightning:lwc:start -p 3456 - 86681 ttys002 0:05.81 /Users/test/.local/share/sfdx/client/7.91.0-6a6ed69ebe/bin/node /Users/test/.local/share/sfdx/client/7.91.0-6a6ed69ebe/bin/sfdx.js force:lightning:lwc:start -p 3456 - `, - stderr: '' - }) - ); - - const port = await CommonUtils.getLwcServerPort(); - expect(port).toBe('3456'); - }); - - test('Resolves the server port when it is running with a single process', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockReturnValue( - Promise.resolve({ - stdout: `86659 ttys002 0:00.01 bash /usr/local/bin/sfdx force:lightning:lwc:start -p 3456`, - stderr: '' - }) - ); - - const port = await CommonUtils.getLwcServerPort(); - expect(port).toBe('3456'); - }); - - test('Cannot resolve the server port when it not running', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockReturnValue( - Promise.reject('') - ); - - const port = await CommonUtils.getLwcServerPort(); - expect(port === undefined).toBe(true); - }); - - test('Opens a URL in desktop browser', async () => { - let launchCommand = ''; - const url = 'http://my.domain.com'; - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - (cmd) => { - launchCommand = cmd; - return Promise.resolve({ stdout: '', stderr: '' }); - } - ); - - await CommonUtils.launchUrlInDesktopBrowser(url); - expect(launchCommand.endsWith(url)).toBe(true); - }); - - test('Promise resolves before timeout', async () => { - const innerPromise = CommonUtils.delay(50); // a quick task that finishes in 50 milliseconds - const promiseWithTimeout = CommonUtils.promiseWithTimeout( - 1000, - innerPromise, - 'timed out' - ); - - try { - await promiseWithTimeout; - } catch (error) { - fail( - `Should have resolved b/c innerPromise should finish before timeout: ${error}` - ); - } - }); - - test('Promise rejects after timeout', async () => { - const innerPromise = CommonUtils.delay(1000); - const promiseWithTimeout = CommonUtils.promiseWithTimeout( - 50, - innerPromise, - 'timed out' - ); - - expect.assertions(1); - try { - await promiseWithTimeout; - } catch (error) { - expect((error as any).message === 'timed out').toBe(true); - } - }); - - test('downloadFile function', async () => { - const dest = path.join(os.tmpdir(), 'ca.crt'); - - // should fail and not create a destination file - try { - await CommonUtils.downloadFile('badurl', dest); - } catch (error) { - expect(error instanceof Error).toBe(true); - expect(fs.existsSync(dest)).toBe(false); - } - - // should fail and not create a destination file - try { - await CommonUtils.downloadFile('http://badurl', dest); - } catch (error) { - expect(error instanceof Error).toBe(true); - expect(fs.existsSync(dest)).toBe(false); - } - - // should fail and not create a destination file - try { - await CommonUtils.downloadFile('https://badurl', dest); - } catch (error) { - expect(error instanceof Error).toBe(true); - expect(fs.existsSync(dest)).toBe(false); - } - - // should fail and not create a destination file - try { - await CommonUtils.downloadFile( - 'https://www.google.com/badurl', - dest - ); - } catch (error) { - expect(error instanceof Error).toBe(true); - expect(fs.existsSync(dest)).toBe(false); - } - - // For now don't run this part on Windows b/c our CI - // environment does not give file write permission. - if (process.platform !== 'win32') { - // should pass and create a destination file - await CommonUtils.downloadFile('https://www.google.com', dest); - expect(fs.existsSync(dest)).toBe(true); - } - }, 10000); // increase timeout for this test - - test('read/write text file functions', async () => { - const dest = path.join(os.tmpdir(), 'test_file.txt'); - const testContent = 'This is a test.'; - - // For now don't run this part on Windows b/c our CI - // environment does not give file write permission. - if (process.platform !== 'win32') { - // should pass and create a destination file - await CommonUtils.createTextFile(dest, testContent); - expect(fs.existsSync(dest)).toBe(true); - - const content = await CommonUtils.readTextFile(dest); - expect(content).toBe(testContent); - } - }, 10000); // increase timeout for this test - - test('enumerateFiles - file as input ', async () => { - jest.spyOn(fs, 'statSync').mockReturnValue(createStats(true)); - - expect(CommonUtils.enumerateFiles('/path/to/my/file.js')).toEqual([ - path.normalize('/path/to/my/file.js') - ]); - - expect( - CommonUtils.enumerateFiles( - '/path/to/my/file.js', - new RegExp('^.*\\.((j|J)(s|S))$') - ) - ).toEqual([path.normalize('/path/to/my/file.js')]); - - expect( - CommonUtils.enumerateFiles( - '/path/to/my/file.txt', - new RegExp('^.*\\.((j|J)(s|S))$') - ) - ).toEqual([]); - }); - - test('enumerateFiles - directory as input ', async () => { - const rootFolder = '/path/to/my/root'; - const rootFolderFile1 = 'file_1.js'; - const rootFolderFile2 = 'file_2.txt'; - const rootSubFolder = 'subfolder'; - const rootSubFolderFile1 = 'file_1.ts'; - const rootSubFolderFile2 = 'file_2.js'; - - jest.spyOn(fs, 'statSync').mockImplementation((atPath) => - createStats( - !( - atPath.toString() === path.normalize(rootFolder) || - atPath.toString() === - path.normalize(`${rootFolder}/${rootSubFolder}`) - ) - ) - ); - - jest.spyOn(fs, 'readdirSync').mockImplementation((atPath) => { - if (atPath.toString() === path.normalize(rootFolder)) { - return [ - createDirent(rootFolderFile1, true), - createDirent(rootFolderFile2, true), - createDirent(rootSubFolder, false) - ]; - } else if ( - atPath.toString() === - path.normalize(`${rootFolder}/${rootSubFolder}`) - ) { - return [ - createDirent(rootSubFolderFile1, true), - createDirent(rootSubFolderFile2, true) - ]; - } else { - return []; - } - }); - - const results = CommonUtils.enumerateFiles( - rootFolder, - new RegExp('^.*\\.((j|J)(s|S))$') - ); - - expect(results).toEqual([ - path.normalize('/path/to/my/root/file_1.js'), - path.normalize('/path/to/my/root/subfolder/file_2.js') - ]); - }); - - // Disabling this test for now. It runs & passes locally but it fails - // in CI b/c the child process errors out with `read ENOTCONN` error. - /*test('spawnCommandAsync', async () => { - const fakeProcess = new ChildProcess(); - fakeProcess.stdout = process.stdout; - fakeProcess.stderr = process.stderr; - - const mockSpawn = jest.fn((): ChildProcess => fakeProcess); - jest.spyOn(cp, 'spawn').mockImplementation(mockSpawn); - - setTimeout(() => { - fakeProcess.stdout?.push('Test STDOUT'); - fakeProcess.stderr?.push('Test STDERR'); - fakeProcess.emit('close', 0); - fakeProcess.kill(0); - }, 2000); - - const results = await CommonUtils.spawnCommandAsync( - 'cmd', - ['arg1', 'arg2'], - ['ignore', 'inherit', 'pipe'] - ); - - expect(mockSpawn).toHaveBeenCalledWith('cmd', ['arg1', 'arg2'], { - shell: true, - stdio: ['ignore', 'inherit', 'pipe'] - }); - - expect(results.stdout).toBe('Test STDOUT'); - expect(results.stderr).toBe('Test STDERR'); - });*/ - - function createStats(isFile: boolean): fs.Stats { - return { - isFile() { - return isFile; - } - } as fs.Stats; - } - - function createDirent(name: string, isFile: boolean): fs.Dirent { - return { - isFile() { - return isFile; - }, - isDirectory() { - return !isFile; - }, - isBlockDevice() { - return false; - }, - isCharacterDevice() { - return false; - }, - isSymbolicLink() { - return false; - }, - isFIFO() { - return false; - }, - isSocket() { - return false; - }, - name: name, - path: name - }; - } -}); diff --git a/src/common/__tests__/IOSEnvironmentRequirements.test.ts b/src/common/__tests__/IOSEnvironmentRequirements.test.ts deleted file mode 100644 index db1c912..0000000 --- a/src/common/__tests__/IOSEnvironmentRequirements.test.ts +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { Logger } from '@salesforce/core'; -import { CommonUtils } from '../CommonUtils'; -import { - SupportedEnvironmentRequirement, - SupportedSimulatorRuntimeRequirement, - XcodeInstalledRequirement -} from '../IOSEnvironmentRequirements'; -import { IOSUtils } from '../IOSUtils'; - -describe('IOS Environment Requirement tests', () => { - const logger = new Logger('test-IOSEnvironmentRequirement'); - - let myUnameMock: jest.Mock; - let badBadMock: jest.Mock; - let myXcodeSelectMock: jest.Mock; - let runtimesMockBlock: jest.Mock; - - beforeEach(() => { - myUnameMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - return Promise.resolve({ - stdout: 'Darwin', - stderr: 'mockError' - }); - } - ); - - badBadMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - return new Promise((_, reject) => { - reject(new Error('Bad bad mock!')); - }); - } - ); - - myXcodeSelectMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - return Promise.resolve({ - stderr: 'mockError', - stdout: '/Applications/Xcode.app/Contents/Developer' - }); - } - ); - - runtimesMockBlock = jest.fn((): Promise => { - return Promise.resolve(['iOS-13-1']); - }); - }); - - afterEach(() => { - jest.restoreAllMocks(); - }); - - it('Should attempt to validate supported OS environment', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myUnameMock - ); - const requirement = new SupportedEnvironmentRequirement(logger); - await requirement.checkFunction(); - expect(myUnameMock).toHaveBeenCalledWith('/usr/bin/uname'); - }); - - it('Should throw an error for an unsupported OS environment', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - badBadMock - ); - const requirement = new SupportedEnvironmentRequirement(logger); - return requirement.checkFunction().catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - it('Checks to see that the logger is set', async () => { - const logInfo = jest.spyOn(logger, 'info'); - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myUnameMock - ); - const requirement = new SupportedEnvironmentRequirement(logger); - await requirement.checkFunction(); - expect(logInfo).toHaveBeenCalled(); - }); - - it('Should attempt to validate supported Xcode environment', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myXcodeSelectMock - ); - const requirement = new XcodeInstalledRequirement(logger); - await requirement.checkFunction(); - expect(myXcodeSelectMock).toHaveBeenCalledWith('xcodebuild -version'); - }); - - it('Should throw an error for unsupported Xcode Env', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - badBadMock - ); - const requirement = new XcodeInstalledRequirement(logger); - return requirement.checkFunction().catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - it('Should attempt to validate supported Xcode runtime environments', async () => { - jest.spyOn(IOSUtils, 'getSimulatorRuntimes').mockImplementation( - runtimesMockBlock - ); - const requirement = new SupportedSimulatorRuntimeRequirement(logger); - await requirement.checkFunction(); - expect(runtimesMockBlock).toHaveBeenCalled(); - }); - - it('Should throw an error for unsupported Xcode runtime environments', async () => { - const badMock = jest.fn((): Promise => { - return Promise.reject(new Error('Bad mock!')); - }); - jest.spyOn(IOSUtils, 'getSimulatorRuntimes').mockImplementation( - badMock - ); - const requirement = new SupportedSimulatorRuntimeRequirement(logger); - return requirement.checkFunction().catch((error) => { - expect(error).toBeTruthy(); - }); - }); -}); diff --git a/src/common/__tests__/IOSLauncher.test.ts b/src/common/__tests__/IOSLauncher.test.ts deleted file mode 100644 index 921fee8..0000000 --- a/src/common/__tests__/IOSLauncher.test.ts +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { CommonUtils } from '../CommonUtils'; -import { IOSLauncher } from '../IOSLauncher'; -import { IOSUtils } from '../IOSUtils'; -import { IOSMockData } from './IOSMockData'; - -describe('IOS Launcher tests', () => { - let myCommandRouterBlock: jest.Mock; - - beforeEach(() => { - myCommandRouterBlock = jest.fn( - (command: string): Promise<{ stdout: string; stderr: string }> => { - let output = ''; - if (command.endsWith('simctl list --json devicetypes')) { - output = JSON.stringify(IOSMockData.mockRuntimeDeviceTypes); - } else if ( - command.endsWith('simctl list --json devices available') - ) { - output = JSON.stringify(IOSMockData.mockRuntimeDevices); - } else { - output = JSON.stringify(IOSMockData.mockRuntimes); - } - return new Promise((resolve) => { - resolve({ - stderr: '', - stdout: output - }); - }); - } - ); - - // eslint-disable-next-line @typescript-eslint/no-empty-function - jest.spyOn(CommonUtils, 'startCliAction').mockImplementation(() => {}); - }); - - afterEach(() => { - jest.restoreAllMocks(); - }); - - test('Should attempt to invoke preview in mobile browser', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - - jest.spyOn(IOSUtils, 'launchSimulatorApp').mockReturnValue( - Promise.resolve() - ); - - jest.spyOn(IOSUtils, 'bootDevice').mockReturnValue(Promise.resolve()); - - const launchUrlMock = jest.fn(() => Promise.resolve()); - jest.spyOn(IOSUtils, 'launchURLInBootedSimulator').mockImplementation( - launchUrlMock - ); - - const launcher = new IOSLauncher('iPhone 11 Pro'); - await launcher.launchPreview( - 'helloWorld', - '~', - undefined, - 'browser', - undefined, - '3333' - ); - - expect(launchUrlMock).toHaveBeenCalledWith( - 'F2B4097F-F33E-4D8A-8FFF-CE49F8D6C178', - 'http://localhost:3333/lwc/preview/c/helloWorld' - ); - }); - - test('Should attempt to invoke preview in native app', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - - jest.spyOn(IOSUtils, 'launchSimulatorApp').mockReturnValue( - Promise.resolve() - ); - - jest.spyOn(IOSUtils, 'bootDevice').mockReturnValue(Promise.resolve()); - - const launchAppMock = jest.fn(() => Promise.resolve()); - jest.spyOn(IOSUtils, 'launchAppInBootedSimulator').mockImplementation( - launchAppMock - ); - - const launcher = new IOSLauncher('iPhone 11 Pro'); - await launcher.launchPreview( - 'helloWorld', - '~', - undefined, - 'com.salesforce.test', - undefined, - '3333' - ); - - expect(launchAppMock).toHaveBeenCalledWith( - 'F2B4097F-F33E-4D8A-8FFF-CE49F8D6C178', - 'helloWorld', - '~', - undefined, - 'com.salesforce.test', - [], - undefined, - undefined - ); - }); -}); diff --git a/src/common/__tests__/IOSUtils.test.ts b/src/common/__tests__/IOSUtils.test.ts deleted file mode 100644 index d5e3047..0000000 --- a/src/common/__tests__/IOSUtils.test.ts +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -// tslint:disable: no-unused-expression -import { CommonUtils } from '../CommonUtils'; -import { IOSUtils } from '../IOSUtils'; -import { PreviewUtils } from '../PreviewUtils'; -import { IOSMockData } from './IOSMockData'; - -describe('IOS utils tests', () => { - const DEVICE_TYPE_PREFIX = 'com.apple.CoreSimulator.SimDeviceType'; - const RUNTIME_TYPE_PREFIX = 'com.apple.CoreSimulator.SimRuntime'; - - let myCommandRouterBlock: jest.Mock; - let badBlockMock: jest.Mock; - let launchCommandMock: jest.Mock; - let launchCommandThrowsMock: jest.Mock; - let launchCommandThrowsAlreadyBootedMock: jest.Mock; - - beforeEach(() => { - myCommandRouterBlock = jest.fn( - (command: string): Promise<{ stdout: string; stderr: string }> => { - let output = ''; - if (command.endsWith('simctl list --json devicetypes')) { - output = JSON.stringify(IOSMockData.mockRuntimeDeviceTypes); - } else if ( - command.endsWith('simctl list --json devices available') - ) { - output = JSON.stringify(IOSMockData.mockRuntimeDevices); - } else { - output = JSON.stringify(IOSMockData.mockRuntimes); - } - - return new Promise((resolve) => { - resolve({ - stderr: 'mockError', - stdout: output - }); - }); - } - ); - - badBlockMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - return new Promise((resolve) => { - resolve({ stdout: '{[}', stderr: 'mockError' }); - }); - } - ); - - launchCommandMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - return new Promise((resolve) => { - resolve({ - stderr: 'mockError', - stdout: 'Done' - }); - }); - } - ); - - launchCommandThrowsMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - throw new Error(' Mock Error'); - } - ); - - launchCommandThrowsAlreadyBootedMock = jest.fn( - (): Promise<{ stdout: string; stderr: string }> => { - return Promise.reject( - new Error('The device is cannot boot state: booted') - ); - } - ); - - // eslint-disable-next-line @typescript-eslint/no-empty-function - jest.spyOn(CommonUtils, 'startCliAction').mockImplementation(() => {}); - myCommandRouterBlock.mockClear(); - launchCommandMock.mockClear(); - badBlockMock.mockClear(); - launchCommandThrowsMock.mockClear(); - }); - - afterEach(() => { - jest.restoreAllMocks(); - }); - - test('Should attempt to invoke the xcrun for fetching sim runtimes', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - await IOSUtils.getSimulatorRuntimes(); - expect(myCommandRouterBlock).toHaveBeenCalled(); - }); - - test('Should attempt to invoke the xcrun for booting a device', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - const udid = 'MOCKUDID'; - await IOSUtils.bootDevice(udid); - expect(launchCommandMock).toHaveBeenCalledWith( - `/usr/bin/xcrun simctl boot ${udid}` - ); - }); - - test('Should attempt to invoke the xcrun but fail booting a device', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandThrowsMock - ); - const udid = 'MOCKUDID'; - return IOSUtils.bootDevice(udid).catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should attempt to create a new device', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - const simName = 'MOCKSIM'; - const deviceType = 'MOCK-DEVICE'; - const runtimeType = 'MOCK-SIM'; - await IOSUtils.createNewDevice(simName, deviceType, runtimeType); - expect(launchCommandMock).toHaveBeenCalledWith( - `/usr/bin/xcrun simctl create '${simName}' ${DEVICE_TYPE_PREFIX}.${deviceType} ${RUNTIME_TYPE_PREFIX}.${runtimeType}` - ); - }); - - test('Should attempt to invoke xcrun to boot device but resolve if device is already Booted', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandThrowsAlreadyBootedMock - ); - const udid = 'MOCKUDID'; - const aPromise = IOSUtils.bootDevice(udid); - expect(aPromise).resolves; - }); - - test('Should wait for the device to boot', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - const udid = 'MOCKUDID'; - const aPromise = IOSUtils.waitUntilDeviceIsReady(udid); - expect(aPromise).resolves; - }); - - test('Should wait for the device to boot and fail if error is encountered', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandThrowsMock - ); - const udid = 'MOCKUDID'; - return IOSUtils.waitUntilDeviceIsReady(udid).catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should launch the simulator app', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - await IOSUtils.launchSimulatorApp(); - expect(launchCommandMock).toHaveBeenCalledWith(`open -a Simulator`); - }); - - test('Should reject if launch of simulator app fails', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandThrowsMock - ); - return IOSUtils.launchSimulatorApp().catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should attempt to launch url in a booted simulator and resolve.', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - const url = 'mock.url'; - const udid = 'MOCK-UDID'; - await IOSUtils.launchURLInBootedSimulator(url, udid); - expect(launchCommandMock).toHaveBeenCalledWith( - `/usr/bin/xcrun simctl openurl "${url}" ${udid}` - ); - }); - - test('Should attempt to launch url in a booted simulator and reject if error is encountered.', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandThrowsMock - ); - const url = 'mock.url'; - const udid = 'MOCK-UDID'; - return IOSUtils.launchURLInBootedSimulator(url, udid).catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('Should attempt to launch native app in a booted simulator and resolve.', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - - const udid = 'MOCK-UDID'; - const compName = 'mock.compName'; - const projectDir = '/mock/path'; - const targetApp = 'com.mock.app'; - const targetAppArgs = [ - { name: 'arg1', value: 'val1' }, - { name: 'arg2', value: 'val2' } - ]; - const launchArgs = - `${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}=${compName}` + - ` ${PreviewUtils.PROJECT_DIR_ARG_PREFIX}=${projectDir}` + - ` arg1=val1 arg2=val2`; - - await IOSUtils.launchAppInBootedSimulator( - udid, - compName, - projectDir, - undefined, - targetApp, - targetAppArgs, - undefined, - undefined - ); - - expect(launchCommandMock).toBeCalledTimes(2); - - expect(launchCommandMock).nthCalledWith( - 1, - `/usr/bin/xcrun simctl terminate "${udid}" ${targetApp}` - ); - - expect(launchCommandMock).nthCalledWith( - 2, - `/usr/bin/xcrun simctl launch "${udid}" ${targetApp} ${launchArgs}` - ); - }); - - test('Should attempt to launch native app in a booted simulator and reject if error is encountered.', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandThrowsMock - ); - const udid = 'MOCK-UDID'; - const compName = 'mock.compName'; - const projectDir = '/mock/path'; - const targetApp = 'com.mock.app'; - const targetAppArgs = [ - { name: 'arg1', value: 'val1' }, - { name: 'arg2', value: 'val2' } - ]; - return IOSUtils.launchAppInBootedSimulator( - udid, - compName, - projectDir, - undefined, - targetApp, - targetAppArgs, - undefined, - undefined - ).catch((error) => { - expect(error).toBeTruthy(); - }); - }); - - test('SShould attempt to install native app then launch it.', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - launchCommandMock - ); - - const udid = 'MOCK-UDID'; - const compName = 'mock.compName'; - const projectDir = '/mock/path'; - const appBundlePath = '/mock/path/MyTestApp.app'; - const targetApp = 'com.mock.app'; - const targetAppArgs = [ - { name: 'arg1', value: 'val1' }, - { name: 'arg2', value: 'val2' } - ]; - const launchArgs = - `${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}=${compName}` + - ` ${PreviewUtils.PROJECT_DIR_ARG_PREFIX}=${projectDir}` + - ` arg1=val1 arg2=val2`; - - await IOSUtils.launchAppInBootedSimulator( - udid, - compName, - projectDir, - appBundlePath, - targetApp, - targetAppArgs, - undefined, - undefined - ); - - expect(launchCommandMock).toBeCalledTimes(3); - - expect(launchCommandMock).nthCalledWith( - 1, - `/usr/bin/xcrun simctl install ${udid} '${appBundlePath.trim()}'` - ); - - expect(launchCommandMock).nthCalledWith( - 2, - `/usr/bin/xcrun simctl terminate "${udid}" ${targetApp}` - ); - - expect(launchCommandMock).nthCalledWith( - 3, - `/usr/bin/xcrun simctl launch "${udid}" ${targetApp} ${launchArgs}` - ); - }); - - test('Should attempt to invoke the xcrun for fetching sim runtimes and return an array of values', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - return IOSUtils.getSimulatorRuntimes().then((returnedValues) => { - expect( - returnedValues !== null && - returnedValues.length === - IOSMockData.mockRuntimes.runtimes.length - ).toBeTruthy(); - }); - }); - - test('Should attempt to invoke the xcrun for fetching supported runtimes and return whitelisted values', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - return IOSUtils.getSupportedRuntimes().then((returnedValues) => { - expect( - returnedValues !== null && returnedValues.length > 0 - ).toBeTruthy(); - }); - }); - - test('Should attempt to invoke the xcrun for fetching supported devices and return whitelisted values', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - return IOSUtils.getSupportedDevices().then((returnedValues) => { - expect( - returnedValues !== null && returnedValues.length > 0 - ).toBeTruthy(); - }); - }); - - test('Should attempt to invoke the xcrun for fetching supported sims', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - return IOSUtils.getSupportedSimulators().then((returnedValues) => { - expect( - returnedValues !== null && returnedValues.length > 0 - ).toBeTruthy(); - }); - }); - - test('Should attempt to fetch a sim by name', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - - const found = await IOSUtils.getSimulator('iPhone 11 Pro'); - const notFound = await IOSUtils.getSimulator('blah'); - expect(found && found.name === 'iPhone 11 Pro').toBe(true); - expect(notFound === null).toBe(true); - }); - - test('Should attempt to fetch a sim by udid', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - myCommandRouterBlock - ); - - const found = await IOSUtils.getSimulator( - 'F2B4097F-F33E-4D8A-8FFF-CE49F8D6C166' - ); - const notFound = await IOSUtils.getSimulator( - 'F2B4097F-F33E-4D8A-8FFF-ABCDEFGHIJ' - ); - expect(found && found.name === 'iPhone-11 Pro Max').toBe(true); - expect(notFound === null).toBe(true); - }); - - test('Should handle Bad JSON', async () => { - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - badBlockMock - ); - return IOSUtils.getSimulatorRuntimes().catch((error) => { - expect(error).toBeTruthy(); - }); - }); -}); diff --git a/src/common/__tests__/MacNetworkUtils.test.ts b/src/common/__tests__/MacNetworkUtils.test.ts deleted file mode 100644 index 2fc6a09..0000000 --- a/src/common/__tests__/MacNetworkUtils.test.ts +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -// tslint:disable: no-unused-expression -import { CommonUtils } from '../CommonUtils'; -import { MacNetworkUtils } from '../MacNetworkUtils'; - -describe('Preview utils tests', () => { - afterEach(() => { - jest.restoreAllMocks(); - }); - - test('getNetworkHardwarePorts succeeds with two enabled ports with IP address', async () => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const executeCommandAsyncMock = jest.fn((cmd) => { - return Promise.resolve({ - stdout: ` - Hardware Port: USB 10/100/1000 LAN - Device: en5 - Ethernet Address: 00:24:9b:4a:ce:67 - - Hardware Port: Wi-Fi - Device: en0 - Ethernet Address: f0:18:98:50:06:dd - - Hardware Port: Bluetooth PAN - Device: en7 - Ethernet Address: f0:18:98:4d:a8:a9 - `, - stderr: '' - }); - }); - - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - executeCommandAsyncMock - ); - - const executeCommandSyncMock = jest.fn((cmd) => { - if (cmd.includes('en5')) { - return '192.168.0.211'; - } else if (cmd.includes('en0')) { - return '192.168.0.123'; - } else if (cmd.includes('en7')) { - return ''; - } else { - throw new Error(`Unexpected input: ${cmd}`); - } - }); - - jest.spyOn(CommonUtils, 'executeCommandSync').mockImplementation( - executeCommandSyncMock - ); - - const hardwarePorts = await MacNetworkUtils.getNetworkHardwarePorts(); - expect(hardwarePorts.length).toBe(2); - expect(hardwarePorts[0].address).toBe('192.168.0.211'); - expect(hardwarePorts[0].device).toBe('en5'); - expect(hardwarePorts[0].name).toBe('USB 10/100/1000 LAN'); - expect(hardwarePorts[1].address).toBe('192.168.0.123'); - expect(hardwarePorts[1].device).toBe('en0'); - expect(hardwarePorts[1].name).toBe('Wi-Fi'); - }); - - test('getNetworkHardwarePorts fails with error', async () => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const executeCommandAsyncMock = jest.fn((cmd) => { - throw new Error(); - }); - - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - executeCommandAsyncMock - ); - - const aPromise = MacNetworkUtils.getNetworkHardwarePorts().catch( - () => undefined - ); - expect(aPromise).rejects; - }); - - test('getProxySetting returns existing proxy setting', async () => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const executeCommandMock = jest.fn((cmd) => { - return Promise.resolve({ - stdout: ` - { - ProxyAutoConfigEnable : 1 - ProxyAutoConfigURLString : http://myCore.internal.salesforce.com:6109/qa/proxy.jsp - }`, - stderr: '' - }); - }); - - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - executeCommandMock - ); - - const proxySetting = await MacNetworkUtils.getProxySetting(); - expect(proxySetting.proxyAutoConfigEnable).toBe(1); - expect(proxySetting.proxyAutoConfigURLString).toBe( - 'http://myCore.internal.salesforce.com:6109/qa/proxy.jsp' - ); - }); - - test('getProxySetting returns empty object when there is no existing proxy setting', async () => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const executeCommandMock = jest.fn((cmd) => { - return Promise.resolve({ - stdout: ` - { - }`, - stderr: '' - }); - }); - - jest.spyOn(CommonUtils, 'executeCommandAsync').mockImplementation( - executeCommandMock - ); - - const proxySetting = await MacNetworkUtils.getProxySetting(); - expect(proxySetting.proxyAutoConfigEnable).toBe(undefined); - expect(proxySetting.proxyAutoConfigURLString).toBe(undefined); - }); -}); diff --git a/src/common/__tests__/PreviewUtils.test.ts b/src/common/__tests__/PreviewUtils.test.ts deleted file mode 100644 index 8a3c0ce..0000000 --- a/src/common/__tests__/PreviewUtils.test.ts +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { - AndroidAppPreviewConfig, - IOSAppPreviewConfig -} from '../PreviewConfigFile'; -import { CommonUtils } from '../CommonUtils'; -import { PreviewUtils } from '../PreviewUtils'; -import * as configSchema from './PreviewMockConfigurationSchema.json'; - -describe('Preview utils tests', () => { - afterEach(() => { - jest.restoreAllMocks(); - }); - - test('Checks for targeting browser or app', async () => { - expect(PreviewUtils.isTargetingBrowser('browser')).toBe(true); - expect(PreviewUtils.isTargetingBrowser('com.mock.app')).toBe(false); - }); - - test('Checks for using Lwc Server for Previewing', async () => { - expect( - PreviewUtils.useLwcServerForPreviewing('browser', undefined) - ).toBe(true); - - const iOSAppConfig = new IOSAppPreviewConfig(); - iOSAppConfig.preview_server_enabled = true; - expect( - PreviewUtils.useLwcServerForPreviewing('com.mock.app', iOSAppConfig) - ).toBe(iOSAppConfig.preview_server_enabled); - - const androidAppConfig = new IOSAppPreviewConfig(); - androidAppConfig.preview_server_enabled = false; - expect( - PreviewUtils.useLwcServerForPreviewing( - 'com.mock.app', - androidAppConfig - ) - ).toBe(androidAppConfig.preview_server_enabled); - }); - - test('Checks for adding prefix to component route', async () => { - expect(PreviewUtils.prefixRouteIfNeeded('helloWorld')).toBe( - 'c/helloWorld' - ); - expect(PreviewUtils.prefixRouteIfNeeded('c/helloWorld')).toBe( - 'c/helloWorld' - ); - }); - - test('Config validation fails when app id is not defined', async () => { - const json = '{"apps": {"ios": [{"name": "LWC Test App"}]}}'; - const configFileJson = JSON.parse(json); - jest.spyOn(CommonUtils, 'loadJsonFromFile').mockReturnValue( - configFileJson - ); - - const validationResult = - await PreviewUtils.validateConfigFileWithSchema( - 'myConfig.json', - configSchema - ); - - expect(validationResult.passed).toBe(false); - expect(validationResult.errorMessage).toBe( - "data/apps/ios/0 must have required property 'id'" - ); - }); - - test('Config validation fails when app name is not defined', async () => { - const json = '{"apps": {"ios": [{"id": "com.salesforce.Test"}]}}'; - const configFileJson = JSON.parse(json); - jest.spyOn(CommonUtils, 'loadJsonFromFile').mockReturnValue( - configFileJson - ); - - const validationResult = - await PreviewUtils.validateConfigFileWithSchema( - 'myConfig.json', - configSchema - ); - - expect(validationResult.passed).toBe(false); - expect(validationResult.errorMessage).toBe( - "data/apps/ios/0 must have required property 'name'" - ); - }); - - test('Config validation fails when launch arguments is not defined as key/value pair', async () => { - const json = ` - { - "apps": { - "ios": [ - { - "id": "com.salesforce.Test", - "name": "LWC Test App", - "launch_arguments": [ - { "name": "arg1", "value": "val1" }, - { "name": "arg2" } - ] - } - ] - } - }`; - const configFileJson = JSON.parse(json); - jest.spyOn(CommonUtils, 'loadJsonFromFile').mockReturnValue( - configFileJson - ); - - const validationResult = - await PreviewUtils.validateConfigFileWithSchema( - 'myConfig.json', - configSchema - ); - - expect(validationResult.passed).toBe(false); - expect(validationResult.errorMessage).toBe( - "data/apps/ios/0/launch_arguments/1 must have required property 'value'" - ); - }); - - test('Config validation fails when activity is not defined for an android app', async () => { - const json = ` - { - "apps": { - "android": [ - { - "id": "com.salesforce.Test", - "name": "LWC Test App" - } - ] - } - }`; - const configFileJson = JSON.parse(json); - jest.spyOn(CommonUtils, 'loadJsonFromFile').mockReturnValue( - configFileJson - ); - - const validationResult = - await PreviewUtils.validateConfigFileWithSchema( - 'myConfig.json', - configSchema - ); - - expect(validationResult.passed).toBe(false); - expect(validationResult.errorMessage).toBe( - "data/apps/android/0 must have required property 'activity'" - ); - }); - - test('Can retrieve launch arguments from config file', async () => { - const json = ` - { - "apps": { - "ios": [ - { - "id": "com.salesforce.Test", - "name": "LWC Test App", - "launch_arguments": [ - { "name": "arg1", "value": "val1" }, - { "name": "arg2", "value": "val2" } - ] - } - ] - } - }`; - const configFileJson = JSON.parse(json); - jest.spyOn(CommonUtils, 'loadJsonFromFile').mockReturnValue( - configFileJson - ); - - const configFile = PreviewUtils.loadConfigFile('myConfig.json'); - const appConfig = configFile.getAppConfig( - 'ios', - 'com.salesforce.Test' - ) as IOSAppPreviewConfig; - - const args = appConfig.launch_arguments || []; - expect(args.length).toBe(2); - expect(args[0]).toStrictEqual({ name: 'arg1', value: 'val1' }); - expect(args[1]).toStrictEqual({ name: 'arg2', value: 'val2' }); - }); - - test('Can retrieve launch activity from config file', async () => { - const json = ` - { - "apps": { - "android": [ - { - "id": "com.salesforce.Test", - "name": "LWC Test App", - "activity": ".MyActivity" - } - ] - } - }`; - const configFileJson = JSON.parse(json); - jest.spyOn(CommonUtils, 'loadJsonFromFile').mockReturnValue( - configFileJson - ); - - const configFile = PreviewUtils.loadConfigFile('myConfig.json'); - const appConfig = configFile.getAppConfig( - 'android', - 'com.salesforce.Test' - ) as AndroidAppPreviewConfig; - - expect(appConfig.activity).toBe('.MyActivity'); - }); - - test('Checks for obtaining app bundle path', async () => { - const iOSAppConfig = new IOSAppPreviewConfig(); - iOSAppConfig.get_app_bundle = undefined; - expect(PreviewUtils.getAppBundlePath('', iOSAppConfig)).toBe(undefined); - - iOSAppConfig.get_app_bundle = 'testGetAppBundleScript'; - const bundlePath = PreviewUtils.getAppBundlePath( - __dirname, - iOSAppConfig - ); - expect(bundlePath).toBe('sample/path/to/app/bundle'); - }); -}); diff --git a/src/common/__tests__/Requirements.test.ts b/src/common/__tests__/Requirements.test.ts deleted file mode 100644 index c75658c..0000000 --- a/src/common/__tests__/Requirements.test.ts +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (c) 2021, salesforce.com, inc. - * All rights reserved. - * SPDX-License-Identifier: MIT - * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT - */ -import { Logger, Messages, SfError } from '@salesforce/core'; -import { - RequirementProcessor, - HasRequirements, - CommandRequirements -} from '../Requirements'; - -const logger = new Logger('test'); - -Messages.importMessagesDirectory(__dirname); - -async function checkResolveFunctionOne(): Promise { - return Promise.resolve('Done'); -} - -async function checkResolveFunctionTwo(): Promise { - return Promise.resolve('Done'); -} - -async function checkRejectFunctionOne(): Promise { - return Promise.reject(); -} - -async function checkRejectFunctionTwo(): Promise { - return Promise.reject(); -} - -class TruthyRequirements implements HasRequirements { - public commandRequirements: CommandRequirements = {}; - constructor() { - const requirements = [ - { - checkFunction: checkResolveFunctionOne, - fulfilledMessage: 'Android SDK was detected.', - logger, - title: 'SDK Check', - unfulfilledMessage: - 'You must install Android SDK add it to the path.' - }, - { - checkFunction: checkResolveFunctionTwo, - fulfilledMessage: 'ANDROID_HOME has been detected.', - logger, - title: 'ANDROID_HOME check', - unfulfilledMessage: 'You must setup ANDROID_HOME.' - } - ]; - this.commandRequirements.baseRequirements = { - requirements, - enabled: true - }; - } -} - -// tslint:disable-next-line: max-classes-per-file -class FalsyRequirements implements HasRequirements { - public commandRequirements: CommandRequirements = {}; - constructor() { - const requirements = [ - { - checkFunction: checkResolveFunctionOne, - fulfilledMessage: 'Android SDK was detected.', - logger, - title: 'SDK Check', - unfulfilledMessage: - 'You must install Android SDK add it to the path.' - }, - { - checkFunction: checkRejectFunctionOne, - fulfilledMessage: 'ANDROID_HOME has been detected.', - logger, - title: 'ANDROID_HOME check', - unfulfilledMessage: 'You must setup ANDROID_HOME.' - }, - { - checkFunction: checkRejectFunctionTwo, - logger, - title: 'Checking SDK Tools' - }, - { - checkFunction: checkRejectFunctionTwo, - fulfilledMessage: - 'Android Platform tools were detected at /usr/bin.', - logger, - supplementalMessage: 'Get Android platform tools!', - title: 'Checking SDK Platform Tools', - unfulfilledMessage: - 'Install at least one Android Platform tools package (23 - 30).' - } - ]; - this.commandRequirements.baseRequirements = { - requirements, - enabled: true - }; - } -} - -// tslint:disable-next-line: max-classes-per-file -class TwoFalsyOneTruthyRequirements implements HasRequirements { - public commandRequirements: CommandRequirements = {}; - constructor() { - this.commandRequirements.falsyRequirementOne = { - requirements: [ - { - title: 'title1', - checkFunction: checkRejectFunctionOne, - logger - } - ], - enabled: true - }; - this.commandRequirements.falsyRequirementTwo = { - requirements: [ - { - title: 'title2', - checkFunction: checkRejectFunctionTwo, - logger - } - ], - enabled: true - }; - this.commandRequirements.truthyRequirement = { - requirements: [ - { - title: 'title3', - checkFunction: checkResolveFunctionOne, - logger - } - ], - enabled: true - }; - } -} - -describe('Requirements Processing', () => { - const messages = Messages.loadMessages( - '@salesforce/lwc-dev-mobile-core', - 'requirement' - ); - - const failureMessage = messages.getMessage('error:requirementCheckFailed'); - const recommendationMessage = messages.getMessage( - 'error:requirementCheckFailed:recommendation' - ); - - test('Meets all requirements', async () => { - expect.assertions(1); - await RequirementProcessor.execute( - new TruthyRequirements().commandRequirements - ); - expect(true).toBeTruthy(); - }); - - test('Throws when any requirement fails', async () => { - expect.assertions(4); - try { - await RequirementProcessor.execute( - new FalsyRequirements().commandRequirements - ); - } catch (error) { - expect(error instanceof SfError).toBeTruthy(); - const sfError = error as SfError; - expect(sfError.message).toBe(failureMessage); - expect(sfError.actions?.length).toBe(1); - expect(sfError.actions?.[0]).toBe(recommendationMessage); - } - }); - - test('Skips all requirements that would fail and only executes a requirement that succeeds', async () => { - const requirements = new TwoFalsyOneTruthyRequirements(); - requirements.commandRequirements.falsyRequirementOne.enabled = false; - requirements.commandRequirements.falsyRequirementTwo.enabled = false; - await RequirementProcessor.execute(requirements.commandRequirements); - expect(true).toBeTruthy(); - }); - - test('Fails when there is a failed requirement check in combo checks', async () => { - expect.assertions(4); - const requirements = new TwoFalsyOneTruthyRequirements(); - try { - await RequirementProcessor.execute( - requirements.commandRequirements - ); - } catch (error) { - expect(error instanceof SfError).toBeTruthy(); - const sfError = error as SfError; - expect(sfError.message).toBe(failureMessage); - expect(sfError.actions?.length).toBe(1); - expect(sfError.actions?.[0]).toBe(recommendationMessage); - } - }); - - test('Skips all checks and check will ', async () => { - const requirements = new FalsyRequirements(); - requirements.commandRequirements.baseRequirements.enabled = false; - await RequirementProcessor.execute(requirements.commandRequirements); - expect(true).toBeTruthy(); - }); -}); diff --git a/src/index.ts b/src/index.ts index 5e49ebc..542634d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,23 +5,23 @@ * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT */ -export * from './cli/commands/force/lightning/local/setup'; +export * from './cli/commands/force/lightning/local/setup.js'; -export * from './common/AndroidEnvironmentRequirements'; -export * from './common/AndroidLauncher'; -export * from './common/AndroidTypes'; -export * from './common/AndroidUtils'; -export * from './common/BaseCommand'; -export * from './common/Common'; -export * from './common/CommonUtils'; -export * from './common/IOSEnvironmentRequirements'; -export * from './common/IOSLauncher'; -export * from './common/IOSTypes'; -export * from './common/IOSUtils'; -export * from './common/LoggerSetup'; -export * from './common/MacNetworkUtils'; -export * from './common/PerformanceMarkers'; -export * from './common/PlatformConfig'; -export * from './common/PreviewConfigFile'; -export * from './common/PreviewUtils'; -export * from './common/Requirements'; +export * from './common/AndroidEnvironmentRequirements.js'; +export * from './common/AndroidLauncher.js'; +export * from './common/AndroidTypes.js'; +export * from './common/AndroidUtils.js'; +export * from './common/BaseCommand.js'; +export * from './common/Common.js'; +export * from './common/CommonUtils.js'; +export * from './common/IOSEnvironmentRequirements.js'; +export * from './common/IOSLauncher.js'; +export * from './common/IOSTypes.js'; +export * from './common/IOSUtils.js'; +export * from './common/LoggerSetup.js'; +export * from './common/MacNetworkUtils.js'; +export * from './common/PerformanceMarkers.js'; +export * from './common/PlatformConfig.js'; +export * from './common/PreviewConfigFile.js'; +export * from './common/PreviewUtils.js'; +export * from './common/Requirements.js'; diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 0000000..c862edd --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "@salesforce/dev-config/tsconfig-test-strict-esm", + "include": ["./**/*.ts"], + "compilerOptions": { + "skipLibCheck": true + } +} diff --git a/test/unit/.eslintrc.cjs b/test/unit/.eslintrc.cjs new file mode 100644 index 0000000..c4b54a5 --- /dev/null +++ b/test/unit/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + extends: '../../.eslintrc.cjs', + // Allow describe and it + env: { mocha: true }, + rules: { + 'no-unused-expressions': 'off', // Allow assert style expressions. i.e. expect(true).to.be.true + '@typescript-eslint/explicit-function-return-type': 'off', // Return types are defined by the source code. Allows for quick overwrites. + '@typescript-eslint/no-empty-function': 'off', // Mocked out the methods that shouldn't do anything in the tests. + '@typescript-eslint/require-await': 'off', // Easily return a promise in a mocked method. + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'unicorn/numeric-separators-style': 'off', + camelcase: 'off', + header: 'off' + } +}; diff --git a/test/unit/cli/commands/force/lightning/local/setup.test.ts b/test/unit/cli/commands/force/lightning/local/setup.test.ts new file mode 100644 index 0000000..8e31723 --- /dev/null +++ b/test/unit/cli/commands/force/lightning/local/setup.test.ts @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { Logger, Messages, SfError } from '@salesforce/core'; +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { LoggerSetup } from '../../../../../../../src/common/LoggerSetup.js'; +import { Setup } from '../../../../../../../src/cli/commands/force/lightning/local/setup.js'; +import { RequirementProcessor } from '../../../../../../../src/common/Requirements.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); + +describe('Setup Tests', () => { + const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); + + const $$ = new TestContext(); + let executeSetupMock: sinon.SinonStub; + + beforeEach(() => { + executeSetupMock = stubMethod($$.SANDBOX, RequirementProcessor, 'execute'); + executeSetupMock.resolves(Promise.resolve()); + }); + + afterEach(() => { + $$.restore(); + }); + + it('Checks that Setup is initialized correctly for iOS', async () => { + await Setup.run(['-p', 'ios']); + expect(executeSetupMock.calledOnce).to.be.true; + }); + + it('Checks that Setup is initialized correctly for Android', async () => { + await Setup.run(['-p', 'android']); + expect(executeSetupMock.calledOnce).to.be.true; + }); + + it('Checks that Setup fails for invalid Platform flag', async () => { + try { + await Setup.run(['-p', 'someplatform']); + } catch (error) { + expect(error instanceof SfError).to.be.true; + expect((error as SfError).message).to.contain( + messages.getMessage('error:invalidFlagValue', ['someplatform']) + ); + } + }); + + it('Checks that Setup will validate API Level flag for iOS platform', async () => { + await Setup.run(['-p', 'ios', '-l', '1.2.3']); + expect(executeSetupMock.calledOnce).to.be.true; + }); + + it('Checks that Setup will validate API Level flag for Android platform', async () => { + await Setup.run(['-p', 'ios', '-l', '1.2.3']); + expect(executeSetupMock.calledOnce).to.be.true; + }); + + it('Logger must be initialized and invoked', async () => { + const initPluginLoggersMock = stubMethod($$.SANDBOX, LoggerSetup, 'initializePluginLoggers').resolves( + Promise.resolve() + ); + const loggerMock = stubMethod($$.SANDBOX, Logger.prototype, 'info'); + + await Setup.run(['-p', 'ios']); + expect(initPluginLoggersMock.calledOnce).to.be.true; + expect(loggerMock.calledOnce).to.be.true; + }); + + it('Messages folder should be loaded', async () => { + expect(!Setup.summary).to.be.false; + }); +}); diff --git a/test/unit/common/AndroidEnvironmentRequirements.test.ts b/test/unit/common/AndroidEnvironmentRequirements.test.ts new file mode 100644 index 0000000..9a33631 --- /dev/null +++ b/test/unit/common/AndroidEnvironmentRequirements.test.ts @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +const ORIG_ANDROID_HOME = process.env.ANDROID_HOME; +const MOCK_ANDROID_HOME = '/mock-android-home'; +process.env.ANDROID_HOME = MOCK_ANDROID_HOME; + +import fs from 'node:fs'; +import path from 'node:path'; +import { Logger, Messages } from '@salesforce/core'; +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { + AndroidSDKPlatformToolsInstalledRequirement, + AndroidSDKRootSetRequirement, + AndroidSDKToolsInstalledRequirement, + EmulatorImagesRequirement, + Java8AvailableRequirement, + PlatformAPIPackageRequirement +} from '../../../src/common/AndroidEnvironmentRequirements.js'; +import { AndroidPackage } from '../../../src/common/AndroidTypes.js'; +import { AndroidSDKRootSource, AndroidUtils } from '../../../src/common/AndroidUtils.js'; +import { Version } from '../../../src/common/Common.js'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { PlatformConfig } from '../../../src/common/PlatformConfig.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); + +describe('Android environment requirement tests', () => { + const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'requirement-android'); + + const $$ = new TestContext(); + const logger = new Logger('test'); + const mockCmdLineToolsBin = AndroidUtils.convertToUnixPath( + path.join(MOCK_ANDROID_HOME, 'cmdline-tools', 'latest', 'bin') + ); + + beforeEach(() => { + process.env.ANDROID_HOME = MOCK_ANDROID_HOME; + stubMethod($$.SANDBOX, fs, 'existsSync').returns(true); + }); + + afterEach(() => { + process.env.ANDROID_HOME = ORIG_ANDROID_HOME; + $$.restore(); + }); + + it('Should resolve when Android SDK root is set', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'getAndroidSdkRoot').returns({ + rootLocation: '/mock-android-home', + rootSource: AndroidSDKRootSource.androidHome + }); + const requirement = new AndroidSDKRootSetRequirement(logger); + const result = await requirement.checkFunction(); + expect(result).to.contain('/mock-android-home'); + }); + + it('Should reject when Android SDK root is not set', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'getAndroidSdkRoot').returns(undefined); + const requirement = new AndroidSDKRootSetRequirement(logger); + return requirement + .checkFunction() + .catch((error) => + expect(error) + .to.be.an('error') + .with.property('message', messages.getMessage('android:reqs:androidhome:unfulfilledMessage')) + ); + }); + + it('Should resolve when Android sdk tools are present', async () => { + stubMethod($$.SANDBOX, fs, 'readdirSync').returns(['latest']); + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({}); + const requirement = new AndroidSDKToolsInstalledRequirement(logger); + const result = await requirement.checkFunction(); + expect(result).to.contain(mockCmdLineToolsBin); + }); + + it('Should reject when Android sdk tools are missing', async () => { + const requirement = new AndroidSDKToolsInstalledRequirement(logger); + return requirement + .checkFunction() + .catch((error) => + expect(error) + .to.be.an('error') + .with.property('message', messages.getMessage('android:reqs:cmdlinetools:unfulfilledMessage')) + ); + }); + + it('Should resolve when Android sdk platform tools are present', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandSync').returns(MOCK_ANDROID_HOME); + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({}); + const requirement = new AndroidSDKPlatformToolsInstalledRequirement(logger); + const result = await requirement.checkFunction(); + expect(result).to.contain(`${MOCK_ANDROID_HOME}/platform-tools`); + }); + + it('Should reject when Android sdk platform tools are missing', async () => { + const requirement = new AndroidSDKPlatformToolsInstalledRequirement(logger); + return requirement.checkFunction().catch((error) => + expect(error) + .to.be.an('error') + .with.property( + 'message', + messages.getMessage('android:reqs:platformtools:unfulfilledMessage', [ + PlatformConfig.androidConfig().minSupportedRuntime + ]) + ) + ); + }); + + it('Should resolve when Java 8 is available', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'androidSDKPrerequisitesCheck').resolves(''); + const requirement = new Java8AvailableRequirement(logger); + const result = await requirement.checkFunction(); + expect(result).to.equal(messages.getMessage('android:reqs:androidsdkprerequisitescheck:fulfilledMessage')); + }); + + it('Should reject when Java 8 is not available', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'androidSDKPrerequisitesCheck').rejects(new Error('some error')); + const requirement = new Java8AvailableRequirement(logger); + return requirement.checkFunction().catch((error) => + expect(error) + .to.be.an('error') + .with.property( + 'message', + messages.getMessage('android:reqs:androidsdkprerequisitescheck:unfulfilledMessage', ['some error']) + ) + ); + }); + + it('Should resolve when required platform API packages are present', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'fetchSupportedAndroidAPIPackage').resolves( + new AndroidPackage('some/platform/path', new Version(0, 0, 0), '', '') + ); + const requirement = new PlatformAPIPackageRequirement(logger); + const result = await requirement.checkFunction(); + expect(result).to.equal( + messages.getMessage('android:reqs:platformapi:fulfilledMessage', ['some/platform/path']) + ); + }); + + it('Should reject when required platform API packages are not present', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'fetchSupportedAndroidAPIPackage').rejects(); + const requirement = new PlatformAPIPackageRequirement(logger); + return requirement.checkFunction().catch((error) => + expect(error) + .to.be.an('error') + .with.property( + 'message', + messages.getMessage('android:reqs:platformapi:unfulfilledMessage', [ + PlatformConfig.androidConfig().minSupportedRuntime + ]) + ) + ); + }); + + it('Should resolve when required emulator images are available', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'fetchSupportedEmulatorImagePackage').resolves( + new AndroidPackage('some/platform/path', new Version(0, 0, 0), '', '') + ); + const requirement = new EmulatorImagesRequirement(logger); + const result = await requirement.checkFunction(); + expect(result).to.equal( + messages.getMessage('android:reqs:emulatorimages:fulfilledMessage', ['some/platform/path']) + ); + }); + + it('Should reject when when required emulator images are not available', async () => { + stubMethod($$.SANDBOX, AndroidUtils, 'fetchSupportedEmulatorImagePackage').rejects(); + const requirement = new EmulatorImagesRequirement(logger); + return requirement.checkFunction().catch((error) => + expect(error) + .to.be.an('error') + .with.property( + 'message', + messages.getMessage('android:reqs:emulatorimages:unfulfilledMessage', [ + PlatformConfig.androidConfig().supportedImages.join(',') + ]) + ) + ); + }); +}); diff --git a/test/unit/common/AndroidLauncher.test.ts b/test/unit/common/AndroidLauncher.test.ts new file mode 100644 index 0000000..3af834e --- /dev/null +++ b/test/unit/common/AndroidLauncher.test.ts @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { AndroidLauncher } from '../../../src/common/AndroidLauncher.js'; +import { AndroidUtils } from '../../../src/common/AndroidUtils.js'; +import { AndroidMockData } from './AndroidMockData.js'; + +describe('Android Launcher tests', () => { + const $$ = new TestContext(); + + afterEach(() => { + $$.restore(); + }); + + it('Should attempt to invoke preview in mobile browser', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: '', + stdout: AndroidMockData.mockRawPackagesString + }); + stubMethod($$.SANDBOX, AndroidUtils, 'hasEmulator').resolves(true); + stubMethod($$.SANDBOX, AndroidUtils, 'startEmulator').resolves(5572); + + const launchUrlMock = stubMethod($$.SANDBOX, AndroidUtils, 'launchURLIntent').resolves(); + + const launcher = new AndroidLauncher('Pixel XL'); + await launcher.launchPreview('helloWorld', '~', undefined, 'browser', undefined, '3333'); + + expect(launchUrlMock.calledWith('http://10.0.2.2:3333/lwc/preview/c/helloWorld', 5572)); + }); + + it('Should attempt to invoke preview in native app', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: '', + stdout: AndroidMockData.mockRawPackagesString + }); + stubMethod($$.SANDBOX, AndroidUtils, 'hasEmulator').resolves(true); + stubMethod($$.SANDBOX, AndroidUtils, 'startEmulator').resolves(5572); + + const launchAppMock = stubMethod($$.SANDBOX, AndroidUtils, 'launchNativeApp').resolves(); + + const launcher = new AndroidLauncher('Pixel XL'); + await launcher.launchPreview('helloWorld', '~', undefined, 'com.salesforce.test', undefined, '3333'); + + expect( + launchAppMock.calledWith( + 'helloWorld', + '~', + undefined, + 'com.salesforce.test', + [], + '', + 5572, + undefined, + undefined + ) + ); + }); +}); diff --git a/src/common/__tests__/AndroidMockData.ts b/test/unit/common/AndroidMockData.ts similarity index 98% rename from src/common/__tests__/AndroidMockData.ts rename to test/unit/common/AndroidMockData.ts index 651082d..5e845ec 100644 --- a/src/common/__tests__/AndroidMockData.ts +++ b/test/unit/common/AndroidMockData.ts @@ -34,8 +34,7 @@ export class AndroidMockData { Path | Version | Description `; - public static badMockRawPackagesString = - 'Installed packages:=====================]'; + public static badMockRawPackagesString = 'Installed packages:=====================]'; public static mockRawStringPackageLength = 17; diff --git a/test/unit/common/AndroidTypes.test.ts b/test/unit/common/AndroidTypes.test.ts new file mode 100644 index 0000000..6ef521d --- /dev/null +++ b/test/unit/common/AndroidTypes.test.ts @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { expect } from 'chai'; +import { AndroidPackages } from '../../../src/common/AndroidTypes.js'; +import { AndroidMockData } from './AndroidMockData.js'; + +describe('Android types tests', () => { + it('Android Package class should correctly parse a raw string', async () => { + const packages = AndroidPackages.parseRawPackagesString(AndroidMockData.mockRawPackagesString); + expect(packages.platforms.length + packages.systemImages.length === AndroidMockData.mockRawStringPackageLength) + .to.be.true; + }); + + it('Android Package class should correctly parse a raw string initialize members', async () => { + const packages = AndroidPackages.parseRawPackagesString(AndroidMockData.mockRawPackagesString); + const platformPkg = packages.platforms.find((pkg) => pkg.path.match('android-30')); + const sysImagePkg = packages.systemImages.find((pkg) => pkg.path.match('android-29')); + + expect( + platformPkg?.path !== null && + platformPkg?.description != null && + sysImagePkg?.path !== null && + sysImagePkg?.description != null + ).to.be.true; + }); + + it('Android Package class should return and empty list for a bad string', async () => { + const packages = AndroidPackages.parseRawPackagesString(AndroidMockData.badMockRawPackagesString); + expect(packages.isEmpty()).to.be.true; + }); +}); diff --git a/test/unit/common/AndroidUtils.test.ts b/test/unit/common/AndroidUtils.test.ts new file mode 100644 index 0000000..1ede50d --- /dev/null +++ b/test/unit/common/AndroidUtils.test.ts @@ -0,0 +1,581 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { AndroidSDKRootSource, AndroidUtils } from '../../../src/common/AndroidUtils.js'; +import { Version } from '../../../src/common/Common.js'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { PreviewUtils } from '../../../src/common/PreviewUtils.js'; +import { AndroidMockData } from './AndroidMockData.js'; + +describe('Android utils', () => { + const $$ = new TestContext(); + + const mockAndroidHome = '/mock-android-home'; + + const mockAndroidSdkRoot = '/mock-android-sdk-root'; + + const userHome = process.env.HOME ?? process.env.HOMEPATH ?? process.env.USERPROFILE; + + const mockCmdLineToolsBin = path.normalize(path.join(mockAndroidHome, 'cmdline-tools', 'latest', 'bin')); + const sdkCommand = path.normalize(path.join(mockCmdLineToolsBin, 'sdkmanager')); + const adbCommand = path.normalize(path.join(mockAndroidHome, 'platform-tools/adb')); + + const isAppleSilicon = os.cpus()[0].model.includes('Apple M'); + const testAvdApi = isAppleSilicon ? '31' : '29'; + const testAvdName = isAppleSilicon ? 'Pixel_5_API_31' : 'Pixel_4_XL_API_29'; + const testAvdPath = isAppleSilicon + ? '/User/test/.android/avd/Pixel_5_API_31.avd' + : '/User/test/.android/avd/Pixel_4_XL_API_29.avd'; + + const myCommandRouterBlock = (command: string): Promise<{ stdout: string; stderr: string }> => { + let output = ''; + if (command.endsWith('avdmanager list avd')) { + output = AndroidMockData.avdList; + } else if (command.endsWith('emulator -list-avds')) { + output = AndroidMockData.emuNames; + } else if (command.endsWith('adb devices')) { + output = 'emulator-5572'; + } else if (command.endsWith('emu avd name')) { + output = testAvdName; + } else if (command.endsWith('emu avd path')) { + output = testAvdPath; + } else { + output = AndroidMockData.mockRawPackagesString; + } + + return Promise.resolve({ + stderr: '', + stdout: output + }); + }; + + beforeEach(() => { + stubMethod($$.SANDBOX, AndroidUtils, 'getAndroidSdkRoot').returns({ + rootLocation: mockAndroidHome, + rootSource: AndroidSDKRootSource.androidHome + }); + + stubMethod($$.SANDBOX, AndroidUtils, 'getAndroidCmdLineToolsBin').returns(mockCmdLineToolsBin); + + AndroidUtils.clearCaches(); + }); + + afterEach(() => { + $$.restore(); + }); + + it('Should attempt to verify Android SDK prerequisites are met', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: 'mock version 1.0', + stderr: '' + }); + + await AndroidUtils.androidSDKPrerequisitesCheck(); + expect(stub.calledWith(`${sdkCommand} --version`)); + }); + + it('Should attempt to look for and find android sdk tools (sdkmanager)', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: 'mock version 1.0', + stderr: '' + }); + await AndroidUtils.fetchAndroidCmdLineToolsLocation(); + expect(stub.calledWith(`${sdkCommand} --version`)); + }); + + it('Should attempt to look for and not find android sdk tools (sdkmanager)', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Command not found!')); + try { + await AndroidUtils.fetchAndroidCmdLineToolsLocation(); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Should attempt to look for and find android sdk platform tools', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: 'mock version 1.0', + stderr: '' + }); + await AndroidUtils.fetchAndroidSDKPlatformToolsLocation(); + expect(stub.calledWith(`${adbCommand} --version`)); + }); + + it('Should attempt to look for and not find android sdk platform tools', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Command not found!')); + try { + await AndroidUtils.fetchAndroidSDKPlatformToolsLocation(); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Should attempt to invoke the sdkmanager for installed packages', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + await AndroidUtils.fetchInstalledPackages(); + expect(stub.calledWith(`${sdkCommand} --list`)); + }); + + it('Should attempt to invoke the sdkmanager and get installed packages', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + const packages = await AndroidUtils.fetchInstalledPackages(); + expect(packages.platforms.length + packages.systemImages.length).to.be.equal( + AndroidMockData.mockRawStringPackageLength + ); + }); + + it('Should attempt to invoke the sdkmanager and retrieve an empty list for a bad sdkmanager list', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: '', + stdout: AndroidMockData.badMockRawPackagesString + }); + const packages = await AndroidUtils.fetchInstalledPackages(); + expect(packages.isEmpty()).to.be.true; + }); + + it('Should have no cache before first list packages call', async () => { + expect(AndroidUtils.isCached()).to.be.false; + }); + + it('Should establish cache on first call', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + await AndroidUtils.fetchInstalledPackages(); + expect(AndroidUtils.isCached()).to.be.true; + }); + + it('Should utilize cache for subsequent calls', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + await AndroidUtils.fetchInstalledPackages(); + await AndroidUtils.fetchInstalledPackages(); + await AndroidUtils.fetchInstalledPackages(); + expect(stub.calledOnce); + }); + + it('Should rebuild cache after clear in subsequent calls', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + await AndroidUtils.fetchInstalledPackages(); + await AndroidUtils.fetchInstalledPackages(); + AndroidUtils.clearCaches(); + await AndroidUtils.fetchInstalledPackages(); + expect(stub.calledTwice); + }); + + it('Should find a preferred Android package', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + const apiPackage = await AndroidUtils.fetchSupportedAndroidAPIPackage(); + expect(apiPackage?.description).to.not.be.null; + }); + + it('Should find a preferred Android package at a specific API level', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + const apiPackage = await AndroidUtils.fetchSupportedAndroidAPIPackage(testAvdApi); + expect(apiPackage?.description).to.not.be.null; + expect(Version.same(apiPackage.version, Version.from(testAvdApi)!)).to.be.true; + }); + + it('Should not find a preferred Android package', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: '', + stdout: AndroidMockData.badMockRawPackagesString + }); + + try { + await AndroidUtils.fetchSupportedAndroidAPIPackage(); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Should find a preferred Android emulator package', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + const apiPackage = await AndroidUtils.fetchSupportedEmulatorImagePackage(); + expect(apiPackage?.description).to.not.be.null; + }); + + it('Should not find a preferred Android build tools package', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: '', + stdout: AndroidMockData.badMockRawPackagesString + }); + + try { + await AndroidUtils.fetchSupportedEmulatorImagePackage(); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + // Original Pixel/Pixel XL is a special case for skin path. + it('Should update Pixel config with skin', async () => { + const avdName = 'configTest'; + const testConfig = 'hw.device.name=pixel\n'; + const expectedConfig = + 'hw.device.name=pixel\n' + + 'hw.keyboard=yes\n' + + 'hw.gpu.mode=auto\n' + + 'hw.gpu.enabled=yes\n' + + 'skin.name=pixel_silver\n' + + `skin.path=${mockAndroidHome}/skins/pixel_silver\n` + + 'skin.dynamic=yes\n' + + 'showDeviceFrame=yes\n'; + + const readStub = stubMethod($$.SANDBOX, fs, 'readFileSync').returns(testConfig); + const writeStub = stubMethod($$.SANDBOX, fs, 'writeFileSync').callsFake(() => {}); + await AndroidUtils.updateEmulatorConfig(avdName); + + expect(readStub.calledOnce); + expect( + writeStub.calledWith( + path.normalize(`${userHome}/.android/avd/${avdName}.avd/config.ini`), + expectedConfig, + 'utf8' + ) + ); + }); + + it('Should update Pixel 3 config with skin', async () => { + const avdName = 'configTest'; + const testConfig = 'hw.device.name=pixel_3\n'; + const expectedConfig = + 'hw.device.name=pixel_3\n' + + 'hw.keyboard=yes\n' + + 'hw.gpu.mode=auto\n' + + 'hw.gpu.enabled=yes\n' + + 'skin.name=pixel_3\n' + + `skin.path=${mockAndroidHome}/skins/pixel_3\n` + + 'skin.dynamic=yes\n' + + 'showDeviceFrame=yes\n'; + + const readStub = stubMethod($$.SANDBOX, fs, 'readFileSync').returns(testConfig); + const writeStub = stubMethod($$.SANDBOX, fs, 'writeFileSync').callsFake(() => {}); + await AndroidUtils.updateEmulatorConfig(avdName); + + expect(readStub.calledOnce); + expect( + writeStub.calledWith( + path.normalize(`${userHome}/.android/avd/${avdName}.avd/config.ini`), + expectedConfig, + 'utf8' + ) + ); + }); + + it('Should update unknown device config without skin', async () => { + const avdName = 'configTest'; + const testConfig = 'hw.device.manufacture=Google\n'; + const expectedConfig = + 'hw.device.manufacture=Google\n' + 'hw.keyboard=yes\n' + 'hw.gpu.mode=auto\n' + 'hw.gpu.enabled=yes\n'; + + const readStub = stubMethod($$.SANDBOX, fs, 'readFileSync').returns(testConfig); + const writeStub = stubMethod($$.SANDBOX, fs, 'writeFileSync').callsFake(() => {}); + await AndroidUtils.updateEmulatorConfig(avdName); + + expect(readStub.calledOnce); + expect( + writeStub.calledWith( + path.normalize(`${userHome}/.android/avd/${avdName}.avd/config.ini`), + expectedConfig, + 'utf8' + ) + ); + }); + + it('Should not write config if size is 0', async () => { + const avdName = 'configTest'; + const testConfig = ''; + + const readStub = stubMethod($$.SANDBOX, fs, 'readFileSync').returns(testConfig); + const writeStub = stubMethod($$.SANDBOX, fs, 'writeFileSync').callsFake(() => {}); + await AndroidUtils.updateEmulatorConfig(avdName); + + expect(readStub.calledOnce); + expect(writeStub.called).to.be.false; + }); + + it('Should not write config on read error', async () => { + const avdName = 'configTest'; + + const readStub = stubMethod($$.SANDBOX, fs, 'readFileSync').throws(new Error('test error')); + const writeStub = stubMethod($$.SANDBOX, fs, 'writeFileSync').callsFake(() => {}); + await AndroidUtils.updateEmulatorConfig(avdName); + + expect(readStub.calledOnce); + expect(writeStub.called).to.be.false; + }); + + it('Should attempt to launch url and resolve', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ stdout: '', stderr: '' }); + const url = 'mock.url'; + const port = 1234; + const expectedCommand = `${adbCommand} -s emulator-${port} shell am start -a android.intent.action.VIEW -d ${url}`; + await AndroidUtils.launchURLIntent(url, port); + expect(stub.calledWith(expectedCommand)); + }); + + it('Should attempt to launch url and reject if error is encountered', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandSync').throws(new Error(' Mock Error')); + try { + await AndroidUtils.launchURLIntent('mock.url', 1234); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Should attempt to launch native app and resolve', async () => { + const compName = 'mock.compName'; + const projectDir = '/mock/path'; + const targetApp = 'com.mock.app'; + const targetActivity = '.MainActivity'; + const targetAppArgs = [ + { name: 'arg1', value: 'val1' }, + { name: 'arg2', value: 'val2' } + ]; + const port = 1234; + const launchArgs = + `--es "${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}" "${compName}"` + + ` --es "${PreviewUtils.PROJECT_DIR_ARG_PREFIX}" "${projectDir}"` + + ' --es "arg1" "val1" --es "arg2" "val2"'; + + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: '', + stdout: `${targetApp}/.MainActivity` + }); + + await AndroidUtils.launchNativeApp( + compName, + projectDir, + undefined, + targetApp, + targetAppArgs, + targetActivity, + port, + undefined, + undefined + ); + + expect(stub.calledOnce); + expect( + stub.calledWith( + `${adbCommand} -s emulator-${port}` + + ` shell am start -S -n "${targetApp}/${targetActivity}"` + + ' -a android.intent.action.MAIN' + + ' -c android.intent.category.LAUNCHER' + + ` ${launchArgs}` + ) + ); + }); + + it('Should attempt to launch native app and reject if error is encountered.', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandSync').throws(new Error('Mock Error')); + + const compName = 'mock.compName'; + const projectDir = '/mock/path'; + const targetApp = 'com.mock.app'; + const targetActivity = '.MainActivity'; + const targetAppArgs = [ + { name: 'arg1', value: 'val1' }, + { name: 'arg2', value: 'val2' } + ]; + const port = 1234; + + try { + await AndroidUtils.launchNativeApp( + compName, + projectDir, + undefined, + targetApp, + targetAppArgs, + targetActivity, + port, + undefined, + undefined + ); + } catch (error) { + return; + } + }); + + it('Should attempt to install native app then launch it.', async () => { + const compName = 'mock.compName'; + const projectDir = '/mock/path'; + const appBundlePath = '/mock/path/MyTestApp.apk'; + const targetApp = 'com.mock.app'; + const targetActivity = '.MainActivity'; + const targetAppArgs = [ + { name: 'arg1', value: 'val1' }, + { name: 'arg2', value: 'val2' } + ]; + const port = 1234; + const launchArgs = + `--es "${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}" "${compName}"` + + ` --es "${PreviewUtils.PROJECT_DIR_ARG_PREFIX}" "${projectDir}"` + + ' --es "arg1" "val1" --es "arg2" "val2"'; + + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: '', + stdout: `${targetApp}/.MainActivity` + }); + + await AndroidUtils.launchNativeApp( + compName, + projectDir, + appBundlePath, + targetApp, + targetAppArgs, + targetActivity, + port, + undefined, + undefined + ); + + const pathQuote = process.platform === 'win32' ? '"' : "'"; + + expect(stub.calledTwice); + expect(stub.firstCall.args[0]).to.equal( + `${adbCommand} -s emulator-${port} install -r -t ${pathQuote}${appBundlePath.trim()}${pathQuote}` + ); + expect(stub.secondCall.args[0]).to.equal( + `${adbCommand} -s emulator-${port}` + + ` shell am start -S -n "${targetApp}/${targetActivity}"` + + ' -a android.intent.action.MAIN' + + ' -c android.intent.category.LAUNCHER' + + ` ${launchArgs}` + ); + }); + + it('Should resolve ANDROID_HOME as SDK root', async () => { + process.env.ANDROID_HOME = mockAndroidHome; + delete process.env.ANDROID_SDK_ROOT; // set it to undefined + $$.restore(); + stubMethod($$.SANDBOX, fs, 'existsSync').returns(true); + const sdkRoot = AndroidUtils.getAndroidSdkRoot(); + expect(sdkRoot?.rootLocation).to.be.equal(mockAndroidHome); + }); + + it('Should resolve ANDROID_SDK_ROOT as SDK root', async () => { + delete process.env.ANDROID_HOME; // set it to undefined + process.env.ANDROID_SDK_ROOT = mockAndroidSdkRoot; + $$.restore(); + stubMethod($$.SANDBOX, fs, 'existsSync').returns(true); + const sdkRoot = AndroidUtils.getAndroidSdkRoot(); + expect(sdkRoot?.rootLocation).to.be.equal(mockAndroidSdkRoot); + }); + + it('Should resolve ANDROID_HOME as SDK root if both ANDROID_HOME and ANDROID_SDK_ROOT are set', async () => { + process.env.ANDROID_HOME = mockAndroidHome; + process.env.ANDROID_SDK_ROOT = mockAndroidSdkRoot; + $$.restore(); + stubMethod($$.SANDBOX, fs, 'existsSync').returns(true); + const sdkRoot = AndroidUtils.getAndroidSdkRoot(); + expect(sdkRoot?.rootLocation).to.be.equal(mockAndroidHome); + }); + + it('Should attempt to fetch an emulator', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + const found = await AndroidUtils.fetchEmulator('Pixel_XL_API_28'); + const notFound = await AndroidUtils.fetchEmulator('blah'); + expect(found?.name).to.be.equal('Pixel_XL_API_28'); + expect(notFound).to.be.undefined; + }); + + it('Checks whether emulator exists', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + const found = await AndroidUtils.hasEmulator('Pixel_XL_API_28'); + const notFound = await AndroidUtils.hasEmulator('blah'); + expect(found).to.be.true; + expect(notFound).to.be.false; + }); + + it('Should start an emulator on a new port when another emulator is already running', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, fs, 'readFileSync').returns(''); + + // mocks are set up to show that testAvdName is running on 5572 + // so Pixel_XL_API_28 should now start on 5574 + const port = await AndroidUtils.startEmulator('Pixel_XL_API_28'); + expect(port).to.be.equal(5574); + }); + + it('Should restart an emulator that is already running but not in writable system mode', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, fs, 'readFileSync').returns(''); + + const port = await AndroidUtils.startEmulator(testAvdName, true); + expect(port).to.be.equal(5572); + }); + + it('Should remount as root with writable system access on API 29', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, fs, 'readFileSync').callsFake( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (filePath: any, encoding: any) => { + if (filePath.endsWith(`${testAvdName}.ini`)) { + return 'target=android-29'; + } else { + return ''; + } + } + ); + + const port = await AndroidUtils.mountAsRootWritableSystem(testAvdName); + expect(port).to.be.equal(5572); + }); + + it('Resolves when device is not a Google Play device', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, fs, 'readFileSync').returns(''); + + try { + await AndroidUtils.ensureDeviceIsNotGooglePlay(testAvdName); + } catch (error: any) { + throw new Error(`Should have resolved b/c device is not Google Play: ${error}`); + } + }); + + it('Rejects when device is a Google Play device', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, fs, 'readFileSync').returns(''); + + try { + await AndroidUtils.ensureDeviceIsNotGooglePlay('Pixel_3_API_29'); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Gets the latest version of cmdline tools', async () => { + $$.restore(); + stubMethod($$.SANDBOX, AndroidUtils, 'getAndroidSdkRoot').returns({ + rootLocation: mockAndroidHome, + rootSource: AndroidSDKRootSource.androidHome + }); + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, fs, 'existsSync').returns(true); + stubMethod($$.SANDBOX, fs, 'readdirSync').returns(['1.0', '2.1', '3.0', '4.0-beta01', 'latest']); + + const binPath = AndroidUtils.getAndroidCmdLineToolsBin(); + const expectedPath = path.normalize(`${mockAndroidHome}/cmdline-tools/latest/bin`); + expect(binPath).to.be.equal(expectedPath); + }); +}); diff --git a/test/unit/common/Common.test.ts b/test/unit/common/Common.test.ts new file mode 100644 index 0000000..979642e --- /dev/null +++ b/test/unit/common/Common.test.ts @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { Messages } from '@salesforce/core'; +import { expect } from 'chai'; +import * as common from '../../../src/common/Common.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); + +describe('Commons utils tests', () => { + const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); + + it('Filtering of maps returns maps', async () => { + const mascotMapping = new Map(); + mascotMapping.set('Edddie', 'Iron Maiden'); + mascotMapping.set('Rattlehead', 'Megadeth'); + mascotMapping.set('Henry', 'Sabbath'); + + const filteredByMascots = common.MapUtils.filter( + mascotMapping, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (key, value) => key.indexOf('Rattle') > -1 + ); + expect(filteredByMascots.size).to.be.equal(1); + }); + + it('Filtering of maps returns empty maps', async () => { + const mascotMapping = new Map(); + mascotMapping.set('Edddie', 'Iron Maiden'); + mascotMapping.set('Rattlehead', 'Megadeth'); + mascotMapping.set('Henry', 'Sabbath'); + + const filteredByMascots = common.MapUtils.filter( + mascotMapping, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (key, value) => key.indexOf('Murray') > -1 + ); + expect(filteredByMascots.size).to.be.equal(0); + }); + + it('Filtering of maps retrun empty maps and not null, when no match is found', async () => { + const mascotMapping = new Map(); + mascotMapping.set('Edddie', 'Iron Maiden'); + mascotMapping.set('Rattlehead', 'Megadeth'); + mascotMapping.set('Henry', 'Sabbath'); + + const filteredByMascots = common.MapUtils.filter( + mascotMapping, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (key, value) => key.indexOf('Murray') > -1 + ); + expect(filteredByMascots !== undefined && filteredByMascots != null).to.be.true; + }); + + it('Filtering of empty maps returns empty maps, when no match is found', async () => { + const mascotMapping = new Map(); + const filteredByMascots = common.MapUtils.filter( + mascotMapping, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (key, value) => key.includes('Murray') + ); + expect(filteredByMascots !== undefined && filteredByMascots != null).to.be.true; + }); + + it('Filtering of sets returns sets', async () => { + const mascotSets = new Set(); + mascotSets.add('Edddie'); + mascotSets.add('Rattlehead'); + mascotSets.add('Henry'); + + const filteredByMascots = common.SetUtils.filter(mascotSets, (value) => value.includes('Rattle')); + expect(filteredByMascots.size).to.be.equal(1); + }); + + it('Filtering of sets returns empty sets when no match is found', async () => { + const mascotSets = new Set(); + mascotSets.add('Edddie'); + mascotSets.add('Rattlehead'); + mascotSets.add('Henry'); + + const filteredByMascots = common.SetUtils.filter(mascotSets, (value) => value.includes('Murray')); + expect(filteredByMascots.size === 0); + }); + + it('Filtering of sets returns empty set and not null, when no match is found', async () => { + const mascotSets = new Set(); + mascotSets.add('Edddie'); + mascotSets.add('Rattlehead'); + mascotSets.add('Henry'); + + const filteredByMascots = common.SetUtils.filter(mascotSets, (value) => value.includes('Murray')); + expect(filteredByMascots !== undefined && filteredByMascots !== null).to.be.true; + }); + + it('Test if Android platform check matches input string', async () => { + expect(common.CommandLineUtils.platformFlagIsAndroid('android') === true); + }); + + it('Test if Android platform check matches input string', async () => { + expect(common.CommandLineUtils.platformFlagIsAndroid('AndroiD') === true); + }); + + it('Test that Android platform check does not match input string', async () => { + expect(common.CommandLineUtils.platformFlagIsAndroid('lkds') === false); + }); + + it('Test that Android platform check does not match empty input string', async () => { + expect(common.CommandLineUtils.platformFlagIsAndroid('') === false); + }); + + it('Test if iOS platform matches input string', async () => { + expect(common.CommandLineUtils.platformFlagIsIOS('iOS') === true); + }); + + it('Test if iOS platform matches input string', async () => { + expect(common.CommandLineUtils.platformFlagIsIOS('IOS') === true); + }); + + it('Test that iOS platform check does not match input string', async () => { + expect(common.CommandLineUtils.platformFlagIsIOS('lkds') === false); + }); + + it('Test that iOS platform check does not match empty input string', async () => { + expect(common.CommandLineUtils.platformFlagIsIOS('') === false); + }); + + it('Platform flag config property returns expected flag', async () => { + let platformFlagConfig = common.CommandLineUtils.createFlag(common.FlagsConfigType.Platform, true); + expect(platformFlagConfig.platform?.description).to.be.equal( + messages.getMessage('platformFlagMobileOnlyDescription') + ); + let requiredKeyValuePair = Object.entries(platformFlagConfig.platform).find( + (keyValuePair) => keyValuePair[0] === 'required' + ); + + expect(requiredKeyValuePair?.[1]).to.be.true; + + platformFlagConfig = common.CommandLineUtils.createFlag(common.FlagsConfigType.Platform, false); + + requiredKeyValuePair = Object.entries(platformFlagConfig.platform).find( + (keyValuePair) => keyValuePair[0] === 'required' + ); + + expect(requiredKeyValuePair?.[1]).to.be.false; + }); + + it('API level flag config property returns expected flag', async () => { + let apiLevelFlagConfig = common.CommandLineUtils.createFlag(common.FlagsConfigType.ApiLevel, true); + expect(apiLevelFlagConfig.apilevel?.description).to.be.equal(messages.getMessage('apiLevelFlagDescription')); + + let requiredKeyValuePair = Object.entries(apiLevelFlagConfig.apilevel).find( + (keyValuePair) => keyValuePair[0] === 'required' + ); + + expect(requiredKeyValuePair?.[1]).to.be.true; + + apiLevelFlagConfig = common.CommandLineUtils.createFlag(common.FlagsConfigType.ApiLevel, false); + + requiredKeyValuePair = Object.entries(apiLevelFlagConfig.apilevel).find( + (keyValuePair) => keyValuePair[0] === 'required' + ); + + expect(requiredKeyValuePair![1]).to.be.false; + }); + + it('Valid Version formats return expected object values', async () => { + // Major only. + const v1 = common.Version.from('1'); + expect(v1?.major).to.be.equal(1); + expect(v1?.minor).to.be.equal(0); + expect(v1?.patch).to.be.equal(0); + + // Major and minor only. + for (const versionString of ['2.3', '2-3']) { + const v2 = common.Version.from(versionString); + expect(v2?.major).to.be.equal(2); + expect(v2?.minor).to.be.equal(3); + expect(v2?.patch).to.be.equal(0); + } + + // Major, minor, and patch. + for (const versionString of ['4.5.6', '4-5-6']) { + const v3 = common.Version.from(versionString); + expect(v3?.major).to.be.equal(4); + expect(v3?.minor).to.be.equal(5); + expect(v3?.patch).to.be.equal(6); + } + + // Space-padded values. + for (const versionString of [' 7.8.9 ', ' 7-8-9 ']) { + const v4 = common.Version.from(versionString); + expect(v4?.major).to.be.equal(7); + expect(v4?.minor).to.be.equal(8); + expect(v4?.patch).to.be.equal(9); + } + + // Multi-digit values. + for (const versionString of ['10.111.1212', '10-111-1212']) { + const v5 = common.Version.from(versionString); + expect(v5?.major).to.be.equal(10); + expect(v5?.minor).to.be.equal(111); + expect(v5?.patch).to.be.equal(1212); + } + + // 'Zero' releases. + for (const versionString of ['0.1.2', '0-1-2']) { + const v6 = common.Version.from(versionString); + expect(v6?.major).to.be.equal(0); + expect(v6?.minor).to.be.equal(1); + expect(v6?.patch).to.be.equal(2); + } + }); + + it('Invalid Version formats return null', async () => { + const invalidVersions = [ + 'some-random-string', + '001.002.003', + '004-005-006', + '2-3.4', + '2.3-4', + '5.6.7.8', + '9-10-11-12' + ]; + for (const invalidVersion of invalidVersions) { + expect(common.Version.from(invalidVersion)).to.be.null; + } + }); + + it('compare versions', () => { + expect(common.Version.same('1.2.3', common.Version.from('1.2.3')!)).to.be.true; + + expect(common.Version.sameOrNewer('1.2.3', common.Version.from('3.2.1')!)).to.be.false; + + expect(common.Version.same('Tiramisu', 'Tiramisu')).to.be.true; + + expect(common.Version.sameOrNewer('Tiramisu', 'Tiramisu')).to.be.true; + + expect(common.Version.sameOrNewer('Tiramisu', common.Version.from('1.2.3')!)).to.be.true; + + expect(common.Version.sameOrNewer(common.Version.from('1.2.3')!, 'Tiramisu')).to.be.false; + + expect(() => { + common.Version.sameOrNewer('Tiramisu', 'UpsideDownCake'); + }) + .to.throw(Error) + .with.property('message', messages.getMessage('error:version:codename:comparing')); + }); +}); diff --git a/test/unit/common/CommonUtils.test.ts b/test/unit/common/CommonUtils.test.ts new file mode 100644 index 0000000..ca1aff7 --- /dev/null +++ b/test/unit/common/CommonUtils.test.ts @@ -0,0 +1,303 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import os from 'node:os'; +import fs from 'node:fs'; +import path from 'node:path'; +import { Messages } from '@salesforce/core'; +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); + +describe('CommonUtils', () => { + const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); + const $$ = new TestContext(); + + afterEach(() => { + $$.restore(); + }); + + it('replaceTokens function', async () => { + const template = 'A quick brown ${animal1} jumped over the lazy ${animal2}'; + + const formatted = CommonUtils.replaceTokens(template, { + animal1: 'fox', + animal2: 'dog' + }); + expect(formatted).to.be.equal('A quick brown fox jumped over the lazy dog'); + + const notFormatted = CommonUtils.replaceTokens(template, {}); + expect(notFormatted).to.be.equal('A quick brown ${animal1} jumped over the lazy ${animal2}'); + }); + + it('createTempDirectory function', async () => { + const tmpDir = os.tmpdir(); + const folderPrefix = 'lwc-mobile-'; + const tempFolderPath = path.join(tmpDir, folderPrefix); + + const folder = await CommonUtils.createTempDirectory(); + expect(fs.existsSync(folder)).to.be.true; + expect(folder.includes(tempFolderPath)).to.be.true; + + stubMethod($$.SANDBOX, fs, 'mkdtemp').callsFake((_, callback) => callback(new Error(''), '')); + + return CommonUtils.createTempDirectory().catch((error) => + expect(error) + .to.be.an('error') + .with.property('message') + .that.includes(messages.getMessage('error:tempfolder:create', [tempFolderPath, ''])) + ); + }); + + it('Resolves the server port when it is running with multiple processes', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: ` + 86659 ttys002 0:00.01 bash /usr/local/bin/sfdx force:lightning:lwc:start -p 3456 + 86670 ttys002 0:00.00 bash /Users/test/.local/share/sfdx/client/bin/sfdx force:lightning:lwc:start -p 3456 + 86675 ttys002 0:00.01 bash /Users/test/.local/share/sfdx/client/bin/../7.91.0-6a6ed69ebe/bin/sfdx force:lightning:lwc:start -p 3456 + 86681 ttys002 0:05.81 /Users/test/.local/share/sfdx/client/7.91.0-6a6ed69ebe/bin/node /Users/test/.local/share/sfdx/client/7.91.0-6a6ed69ebe/bin/sfdx.js force:lightning:lwc:start -p 3456 + `, + stderr: '' + }); + + const port = await CommonUtils.getLwcServerPort(); + expect(port).to.be.equal('3456'); + }); + + it('Resolves the server port when it is running with a single process', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: '86659 ttys002 0:00.01 bash /usr/local/bin/sfdx force:lightning:lwc:start -p 3456', + stderr: '' + }); + + const port = await CommonUtils.getLwcServerPort(); + expect(port).to.be.equal('3456'); + }); + + it('Cannot resolve the server port when it not running', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(''); + const port = await CommonUtils.getLwcServerPort(); + expect(port).to.be.undefined; + }); + + it('Opens a URL in desktop browser', async () => { + let launchCommand = ''; + const url = 'http://my.domain.com'; + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake((cmd) => { + launchCommand = cmd; + return Promise.resolve({ stdout: '', stderr: '' }); + }); + await CommonUtils.launchUrlInDesktopBrowser(url); + expect(launchCommand.endsWith(url)).to.be.true; + }); + + it('Promise resolves before timeout', async () => { + const innerPromise = CommonUtils.delay(50); // a quick task that finishes in 50 milliseconds + const promiseWithTimeout = CommonUtils.promiseWithTimeout(1000, innerPromise, 'timed out'); + + try { + await promiseWithTimeout; + } catch (error: any) { + throw new Error(`Should have resolved b/c innerPromise should finish before timeout: ${error}`); + } + }); + + it('Promise rejects after timeout', async () => { + const innerPromise = CommonUtils.delay(1000); + const promiseWithTimeout = CommonUtils.promiseWithTimeout(50, innerPromise, 'timed out'); + + try { + await promiseWithTimeout; + } catch (error) { + expect(error).to.be.an('error').with.property('message', 'timed out'); + } + }); + + it('downloadFile function', async () => { + const dest = path.join(os.tmpdir(), 'ca.crt'); + + // should fail and not create a destination file + try { + await CommonUtils.downloadFile('badurl', dest); + } catch (error) { + expect(error).to.be.an('error'); + expect(fs.existsSync(dest)).to.be.false; + } + + // should fail and not create a destination file + try { + await CommonUtils.downloadFile('http://badurl', dest); + } catch (error) { + expect(error).to.be.an('error'); + expect(fs.existsSync(dest)).to.be.false; + } + + // should fail and not create a destination file + try { + await CommonUtils.downloadFile('https://badurl', dest); + } catch (error) { + expect(error).to.be.an('error'); + expect(fs.existsSync(dest)).to.be.false; + } + + // should fail and not create a destination file + try { + await CommonUtils.downloadFile('https://www.google.com/badurl', dest); + } catch (error) { + expect(error).to.be.an('error'); + expect(fs.existsSync(dest)).to.be.false; + } + + // For now don't run this part on Windows b/c our CI + // environment does not give file write permission. + if (process.platform !== 'win32') { + // should pass and create a destination file + await CommonUtils.downloadFile('https://www.google.com', dest); + expect(fs.existsSync(dest)).to.be.true; + } + }).timeout(20000); // increase timeout for this test + + it('read/write text file functions', async () => { + const dest = path.join(os.tmpdir(), 'test_file.txt'); + const testContent = 'This is a test.'; + + // For now don't run this part on Windows b/c our CI + // environment does not give file write permission. + if (process.platform !== 'win32') { + // should pass and create a destination file + await CommonUtils.createTextFile(dest, testContent); + expect(fs.existsSync(dest)).to.be.true; + + const content = await CommonUtils.readTextFile(dest); + expect(content).to.be.equal(testContent); + } + }).timeout(10000); // increase timeout for this test + + it('enumerateFiles - file as input ', async () => { + stubMethod($$.SANDBOX, fs, 'statSync').returns(createStats(true)); + + expect(CommonUtils.enumerateFiles('/path/to/my/file.js')).to.deep.equal([ + path.normalize('/path/to/my/file.js') + ]); + + expect(CommonUtils.enumerateFiles('/path/to/my/file.js', new RegExp('^.*\\.((j|J)(s|S))$'))).to.deep.equal([ + path.normalize('/path/to/my/file.js') + ]); + + expect(CommonUtils.enumerateFiles('/path/to/my/file.txt', new RegExp('^.*\\.((j|J)(s|S))$'))).to.deep.equal([]); + }); + + it('enumerateFiles - directory as input ', async () => { + const rootFolder = '/path/to/my/root'; + const rootFolderFile1 = 'file_1.js'; + const rootFolderFile2 = 'file_2.txt'; + const rootSubFolder = 'subfolder'; + const rootSubFolderFile1 = 'file_1.ts'; + const rootSubFolderFile2 = 'file_2.js'; + + stubMethod($$.SANDBOX, fs, 'statSync').callsFake((atPath) => + createStats( + !( + atPath.toString() === path.normalize(rootFolder) || + atPath.toString() === path.normalize(`${rootFolder}/${rootSubFolder}`) + ) + ) + ); + + stubMethod($$.SANDBOX, fs, 'readdirSync').callsFake((atPath) => { + if (atPath.toString() === path.normalize(rootFolder)) { + return [ + createDirent(rootFolderFile1, true), + createDirent(rootFolderFile2, true), + createDirent(rootSubFolder, false) + ]; + } else if (atPath.toString() === path.normalize(`${rootFolder}/${rootSubFolder}`)) { + return [createDirent(rootSubFolderFile1, true), createDirent(rootSubFolderFile2, true)]; + } else { + return []; + } + }); + + const results = CommonUtils.enumerateFiles(rootFolder, new RegExp('^.*\\.((j|J)(s|S))$')); + + expect(results).to.deep.equal([ + path.normalize('/path/to/my/root/file_1.js'), + path.normalize('/path/to/my/root/subfolder/file_2.js') + ]); + }); + + // Disabling this test for now. It runs & passes locally but it fails + // in CI b/c the child process errors out with `read ENOTCONN` error. + /* it('spawnCommandAsync', async () => { + const fakeProcess = new ChildProcess(); + fakeProcess.stdout = process.stdout; + fakeProcess.stderr = process.stderr; + + const mockSpawn = jest.fn((): ChildProcess => fakeProcess); + jest.spyOn(cp, 'spawn').mockImplementation(mockSpawn); + + setTimeout(() => { + fakeProcess.stdout?.push('Test STDOUT'); + fakeProcess.stderr?.push('Test STDERR'); + fakeProcess.emit('close', 0); + fakeProcess.kill(0); + }, 2000); + + const results = await CommonUtils.spawnCommandAsync( + 'cmd', + ['arg1', 'arg2'], + ['ignore', 'inherit', 'pipe'] + ); + + expect(mockSpawn).toHaveBeenCalledWith('cmd', ['arg1', 'arg2'], { + shell: true, + stdio: ['ignore', 'inherit', 'pipe'] + }); + + expect(results.stdout).toBe('Test STDOUT'); + expect(results.stderr).toBe('Test STDERR'); + });*/ + + function createStats(isFile: boolean): fs.Stats { + return { + isFile() { + return isFile; + } + } as fs.Stats; + } + + function createDirent(fname: string, isFile: boolean): fs.Dirent { + return { + isFile() { + return isFile; + }, + isDirectory() { + return !isFile; + }, + isBlockDevice() { + return false; + }, + isCharacterDevice() { + return false; + }, + isSymbolicLink() { + return false; + }, + isFIFO() { + return false; + }, + isSocket() { + return false; + }, + name: fname, + path: fname, + parentPath: fname + }; + } +}); diff --git a/test/unit/common/IOSEnvironmentRequirements.test.ts b/test/unit/common/IOSEnvironmentRequirements.test.ts new file mode 100644 index 0000000..0c66e2e --- /dev/null +++ b/test/unit/common/IOSEnvironmentRequirements.test.ts @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { Logger, Messages } from '@salesforce/core'; +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { + SupportedEnvironmentRequirement, + SupportedSimulatorRuntimeRequirement, + XcodeInstalledRequirement +} from '../../../src/common/IOSEnvironmentRequirements.js'; +import { IOSUtils } from '../../../src/common/IOSUtils.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); + +describe('IOS Environment Requirement tests', () => { + const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'requirement-ios'); + const $$ = new TestContext(); + const logger = new Logger('test-IOSEnvironmentRequirement'); + + afterEach(() => { + $$.restore(); + }); + + it('Should attempt to validate supported OS environment', async () => { + const execCmdAsyncMock = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: 'Darwin', + stderr: 'mockError' + }); + const requirement = new SupportedEnvironmentRequirement(logger); + await requirement.checkFunction(); + expect(execCmdAsyncMock.calledWith('/usr/bin/uname')); + }); + + it('Should throw an error for an unsupported OS environment', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Bad bad mock!')); + const requirement = new SupportedEnvironmentRequirement(logger); + return requirement.checkFunction().catch((error) => + expect(error) + .to.be.an('error') + .with.property('message') + .that.includes(messages.getMessage('ios:reqs:macos:unfulfilledMessage', [''])) + ); + }); + + it('Checks to see that the logger is set', async () => { + const loggerMock = stubMethod($$.SANDBOX, Logger.prototype, 'info'); + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: 'Darwin', + stderr: 'mockError' + }); + const requirement = new SupportedEnvironmentRequirement(logger); + await requirement.checkFunction(); + expect(loggerMock.calledOnce).to.be.true; + }); + + it('Should attempt to validate supported Xcode environment', async () => { + const execCmdAsyncMock = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: '/Applications/Xcode.app/Contents/Developer' + }); + const requirement = new XcodeInstalledRequirement(logger); + await requirement.checkFunction(); + expect(execCmdAsyncMock.calledWith('xcodebuild -version')); + }); + + it('Should throw an error for unsupported Xcode Env', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Bad bad mock!')); + const requirement = new XcodeInstalledRequirement(logger); + return requirement.checkFunction().catch((error) => + expect(error) + .to.be.an('error') + .with.property('message') + .that.includes(messages.getMessage('ios:reqs:xcode:unfulfilledMessage', [''])) + ); + }); + + it('Should attempt to validate supported Xcode runtime environments', async () => { + const getSimRuntimesMock = stubMethod($$.SANDBOX, IOSUtils, 'getSimulatorRuntimes').resolves(['iOS-13-1']); + const requirement = new SupportedSimulatorRuntimeRequirement(logger); + await requirement.checkFunction(); + expect(getSimRuntimesMock.calledOnce).to.be.true; + }); + + it('Should throw an error for unsupported Xcode runtime environments', async () => { + stubMethod($$.SANDBOX, IOSUtils, 'getSimulatorRuntimes').rejects(new Error('Bad bad mock!')); + const requirement = new SupportedSimulatorRuntimeRequirement(logger); + return requirement.checkFunction().catch((error) => + expect(error) + .to.be.an('error') + .with.property('message') + .that.includes(messages.getMessage('ios:reqs:simulator:unfulfilledMessage', [''])) + ); + }); +}); diff --git a/test/unit/common/IOSLauncher.test.ts b/test/unit/common/IOSLauncher.test.ts new file mode 100644 index 0000000..8634671 --- /dev/null +++ b/test/unit/common/IOSLauncher.test.ts @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { IOSLauncher } from '../../../src/common/IOSLauncher.js'; +import { IOSUtils } from '../../../src/common/IOSUtils.js'; +import { IOSMockData } from './IOSMockData.js'; + +describe('IOS Launcher tests', () => { + const $$ = new TestContext(); + let myCommandRouterBlock: (command: string) => Promise<{ stdout: string; stderr: string }>; + + beforeEach(() => { + myCommandRouterBlock = (command: string): Promise<{ stdout: string; stderr: string }> => { + let output = ''; + if (command.endsWith('simctl list --json devicetypes')) { + output = JSON.stringify(IOSMockData.mockRuntimeDeviceTypes); + } else if (command.endsWith('simctl list --json devices available')) { + output = JSON.stringify(IOSMockData.mockRuntimeDevices); + } else { + output = JSON.stringify(IOSMockData.mockRuntimes); + } + return new Promise((resolve) => { + resolve({ + stderr: '', + stdout: output + }); + }); + }; + }); + + afterEach(() => { + $$.restore(); + }); + + it('Should attempt to invoke preview in mobile browser', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, IOSUtils, 'launchSimulatorApp').resolves(); + stubMethod($$.SANDBOX, IOSUtils, 'bootDevice').resolves(); + const launchUrlMock = stubMethod($$.SANDBOX, IOSUtils, 'launchURLInBootedSimulator').resolves(); + + const launcher = new IOSLauncher('iPhone 11 Pro'); + await launcher.launchPreview('helloWorld', '~', undefined, 'browser', undefined, '3333'); + + expect( + launchUrlMock.calledWith( + 'F2B4097F-F33E-4D8A-8FFF-CE49F8D6C178', + 'http://localhost:3333/lwc/preview/c/helloWorld' + ) + ); + }); + + it('Should attempt to invoke preview in native app', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + stubMethod($$.SANDBOX, IOSUtils, 'launchSimulatorApp').resolves(); + stubMethod($$.SANDBOX, IOSUtils, 'bootDevice').resolves(); + + const launchAppMock = stubMethod($$.SANDBOX, IOSUtils, 'launchAppInBootedSimulator').resolves(); + + const launcher = new IOSLauncher('iPhone 11 Pro'); + await launcher.launchPreview('helloWorld', '~', undefined, 'com.salesforce.test', undefined, '3333'); + + expect( + launchAppMock.calledWith( + 'F2B4097F-F33E-4D8A-8FFF-CE49F8D6C178', + 'helloWorld', + '~', + undefined, + 'com.salesforce.test', + [], + undefined, + undefined + ) + ); + }); +}); diff --git a/src/common/__tests__/IOSMockData.ts b/test/unit/common/IOSMockData.ts similarity index 87% rename from src/common/__tests__/IOSMockData.ts rename to test/unit/common/IOSMockData.ts index b283b36..67bdb02 100644 --- a/src/common/__tests__/IOSMockData.ts +++ b/test/unit/common/IOSMockData.ts @@ -65,8 +65,7 @@ export class IOSMockData { { bundlePath: '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/DeviceTypes/iPhone 8 Plus.simdevicetype', - identifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-8-Plus', + identifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-8-Plus', maxRuntimeVersion: 4294967295, minRuntimeVersion: 720896, name: 'iPhone 8 Plus', @@ -92,8 +91,7 @@ export class IOSMockData { }, { bundlePath: 'mock-device-path', - identifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-XS-Max', + identifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-XS-Max', maxRuntimeVersion: 4294967295, minRuntimeVersion: 786432, name: 'iPhone Xs Max', @@ -107,8 +105,7 @@ export class IOSMockData { 'com.apple.CoreSimulator.SimRuntime.iOS-13-4': [ { dataPath: 'mockPath', - deviceTypeIdentifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro-Max', + deviceTypeIdentifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro-Max', isAvailable: true, logPath: 'mockLogPath', name: 'iPhone-11 Pro Max', @@ -120,8 +117,7 @@ export class IOSMockData { 'com.apple.CoreSimulator.SimRuntime.iOS-13-2': [ { dataPath: 'mockPath', - deviceTypeIdentifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-11', + deviceTypeIdentifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-11', isAvailable: true, logPath: 'mockLogPath', name: 'iPhone-11', @@ -133,8 +129,7 @@ export class IOSMockData { 'com.apple.CoreSimulator.SimRuntime.iOS-13-3': [ { dataPath: 'mockPath', - deviceTypeIdentifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro', + deviceTypeIdentifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-11-Pro', isAvailable: true, logPath: 'mockLogPath', name: 'iPhone 11 Pro', @@ -146,8 +141,7 @@ export class IOSMockData { 'com.apple.CoreSimulator.SimRuntime.iOS-13-1': [ { dataPath: 'mockPath', - deviceTypeIdentifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-X', + deviceTypeIdentifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-X', isAvailable: true, logPath: 'mockLogPath', name: 'iPhone X', @@ -156,8 +150,7 @@ export class IOSMockData { }, { dataPath: 'mockPath', - deviceTypeIdentifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-XS-Max', + deviceTypeIdentifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-XS-Max', isAvailable: true, logPath: 'mockLogPath', name: 'iPhone XS Max', @@ -166,8 +159,7 @@ export class IOSMockData { }, { dataPath: 'mockPath', - deviceTypeIdentifier: - 'com.apple.CoreSimulator.SimDeviceType.iPhone-XS', + deviceTypeIdentifier: 'com.apple.CoreSimulator.SimDeviceType.iPhone-XS', isAvailable: true, logPath: 'mockLogPath', name: 'iPhone XS', diff --git a/test/unit/common/IOSUtils.test.ts b/test/unit/common/IOSUtils.test.ts new file mode 100644 index 0000000..7a89149 --- /dev/null +++ b/test/unit/common/IOSUtils.test.ts @@ -0,0 +1,327 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { IOSUtils } from '../../../src/common/IOSUtils.js'; +import { PreviewUtils } from '../../../src/common/PreviewUtils.js'; +import { IOSMockData } from './IOSMockData.js'; + +describe('IOS utils tests', () => { + const $$ = new TestContext(); + const DEVICE_TYPE_PREFIX = 'com.apple.CoreSimulator.SimDeviceType'; + const RUNTIME_TYPE_PREFIX = 'com.apple.CoreSimulator.SimRuntime'; + + const myCommandRouterBlock = (command: string): Promise<{ stdout: string; stderr: string }> => { + let output = ''; + if (command.endsWith('simctl list --json devicetypes')) { + output = JSON.stringify(IOSMockData.mockRuntimeDeviceTypes); + } else if (command.endsWith('simctl list --json devices available')) { + output = JSON.stringify(IOSMockData.mockRuntimeDevices); + } else { + output = JSON.stringify(IOSMockData.mockRuntimes); + } + + return new Promise((resolve) => { + resolve({ + stderr: 'mockError', + stdout: output + }); + }); + }; + + afterEach(() => { + $$.restore(); + }); + + it('Should attempt to invoke the xcrun for fetching sim runtimes', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + await IOSUtils.getSimulatorRuntimes(); + expect(stub.calledOnce).to.be.true; + }); + + it('Should attempt to invoke the xcrun for booting a device', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: 'Done' + }); + const udid = 'MOCKUDID'; + await IOSUtils.bootDevice(udid); + expect(stub.calledWith(`/usr/bin/xcrun simctl boot ${udid}`)); + }); + + it('Should attempt to invoke the xcrun but fail booting a device', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Mock Error')); + return IOSUtils.bootDevice('MOCKUDID').catch((error) => expect(error).to.be.an('error')); + }); + + it('Should attempt to create a new device', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: 'Done' + }); + const simName = 'MOCKSIM'; + const deviceType = 'MOCK-DEVICE'; + const runtimeType = 'MOCK-SIM'; + await IOSUtils.createNewDevice(simName, deviceType, runtimeType); + expect( + stub.calledWith( + `/usr/bin/xcrun simctl create '${simName}' ${DEVICE_TYPE_PREFIX}.${deviceType} ${RUNTIME_TYPE_PREFIX}.${runtimeType}` + ) + ); + }); + + it('Should attempt to invoke xcrun to boot device but resolve if device is already booted', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Failed to boot - state: booted')); + try { + await IOSUtils.bootDevice('MOCKUDID'); + } catch (error: any) { + throw new Error(`Should have passed: ${error}`); + } + }); + + it('Should wait for the device to boot', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: 'Done' + }); + try { + await IOSUtils.waitUntilDeviceIsReady('MOCKUDID'); + } catch (error: any) { + throw new Error(`Should have passed: ${error}`); + } + }); + + it('Should wait for the device to boot and fail if error is encountered', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Mock Error')); + try { + await IOSUtils.waitUntilDeviceIsReady('MOCKUDID'); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Should launch the simulator app', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: 'Done' + }); + await IOSUtils.launchSimulatorApp(); + expect(stub.calledWith('open -a Simulator')); + }); + + it('Should reject if launch of simulator app fails', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Mock Error')); + try { + await IOSUtils.launchSimulatorApp(); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Should attempt to launch url in a booted simulator and resolve.', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: 'Done' + }); + const url = 'mock.url'; + const udid = 'MOCK-UDID'; + await IOSUtils.launchURLInBootedSimulator(url, udid); + expect(stub.calledWith(`/usr/bin/xcrun simctl openurl "${url}" ${udid}`)); + }); + + it('Should attempt to launch url in a booted simulator and reject if error is encountered.', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Mock Error')); + try { + const url = 'mock.url'; + const udid = 'MOCK-UDID'; + await IOSUtils.launchURLInBootedSimulator(url, udid); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('Should attempt to launch native app in a booted simulator and resolve.', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: 'Done' + }); + + const udid = 'MOCK-UDID'; + const compName = 'mock.compName'; + const projectDir = '/mock/path'; + const targetApp = 'com.mock.app'; + const targetAppArgs = [ + { name: 'arg1', value: 'val1' }, + { name: 'arg2', value: 'val2' } + ]; + const launchArgs = + `${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}=${compName}` + + ` ${PreviewUtils.PROJECT_DIR_ARG_PREFIX}=${projectDir}` + + ' arg1=val1 arg2=val2'; + + await IOSUtils.launchAppInBootedSimulator( + udid, + compName, + projectDir, + undefined, + targetApp, + targetAppArgs, + undefined, + undefined + ); + + expect(stub.calledTwice).to.be.true; + + expect(stub.firstCall.args[0]).to.equal(`/usr/bin/xcrun simctl terminate "${udid}" ${targetApp}`); + + expect(stub.secondCall.args[0]).to.equal(`/usr/bin/xcrun simctl launch "${udid}" ${targetApp} ${launchArgs}`); + }); + + it('Should attempt to launch native app in a booted simulator and reject if error is encountered.', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error('Mock Error')); + + const udid = 'MOCK-UDID'; + const compName = 'mock.compName'; + const projectDir = '/mock/path'; + const targetApp = 'com.mock.app'; + const targetAppArgs = [ + { name: 'arg1', value: 'val1' }, + { name: 'arg2', value: 'val2' } + ]; + + try { + await IOSUtils.launchAppInBootedSimulator( + udid, + compName, + projectDir, + undefined, + targetApp, + targetAppArgs, + undefined, + undefined + ); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); + + it('SShould attempt to install native app then launch it.', async () => { + const stub = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stderr: 'mockError', + stdout: 'Done' + }); + + const udid = 'MOCK-UDID'; + const compName = 'mock.compName'; + const projectDir = '/mock/path'; + const appBundlePath = '/mock/path/MyTestApp.app'; + const targetApp = 'com.mock.app'; + const targetAppArgs = [ + { name: 'arg1', value: 'val1' }, + { name: 'arg2', value: 'val2' } + ]; + const launchArgs = + `${PreviewUtils.COMPONENT_NAME_ARG_PREFIX}=${compName}` + + ` ${PreviewUtils.PROJECT_DIR_ARG_PREFIX}=${projectDir}` + + ' arg1=val1 arg2=val2'; + + await IOSUtils.launchAppInBootedSimulator( + udid, + compName, + projectDir, + appBundlePath, + targetApp, + targetAppArgs, + undefined, + undefined + ); + + expect(stub.calledThrice).to.be.true; + + expect(stub.firstCall.args[0]).to.equal(`/usr/bin/xcrun simctl install ${udid} '${appBundlePath.trim()}'`); + + expect(stub.secondCall.args[0]).to.equal(`/usr/bin/xcrun simctl terminate "${udid}" ${targetApp}`); + + expect(stub.thirdCall.args[0]).to.equal(`/usr/bin/xcrun simctl launch "${udid}" ${targetApp} ${launchArgs}`); + }); + + it('Should attempt to invoke the xcrun for fetching sim runtimes and return an array of values', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + + const returnedValues = await IOSUtils.getSimulatorRuntimes(); + + expect(returnedValues !== null && returnedValues.length === IOSMockData.mockRuntimes.runtimes.length).to.be + .true; + }); + + it('Should attempt to invoke the xcrun for fetching supported runtimes and return whitelisted values', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + + const returnedValues = await IOSUtils.getSupportedRuntimes(); + + expect(returnedValues !== null && returnedValues.length > 0).to.be.true; + }); + + it('Should attempt to invoke the xcrun for fetching supported devices and return whitelisted values', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + + const returnedValues = await IOSUtils.getSupportedDevices(); + + expect(returnedValues !== null && returnedValues.length > 0).to.be.true; + }); + + it('Should attempt to invoke the xcrun for fetching supported sims', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + + const returnedValues = await IOSUtils.getSupportedSimulators(); + + expect(returnedValues !== null && returnedValues.length > 0).to.be.true; + }); + + it('Should attempt to fetch a sim by name', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + + const found = await IOSUtils.getSimulator('iPhone 11 Pro'); + const notFound = await IOSUtils.getSimulator('blah'); + expect(found?.name).to.be.equal('iPhone 11 Pro'); + expect(notFound).to.be.null; + }); + + it('Should attempt to fetch a sim by udid', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').callsFake(myCommandRouterBlock); + + const found = await IOSUtils.getSimulator('F2B4097F-F33E-4D8A-8FFF-CE49F8D6C166'); + const notFound = await IOSUtils.getSimulator('F2B4097F-F33E-4D8A-8FFF-ABCDEFGHIJ'); + expect(found?.name).to.be.equal('iPhone-11 Pro Max'); + expect(notFound).to.be.null; + }); + + it('Should handle Bad JSON', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: '{[}', + stderr: 'mockError' + }); + + try { + await IOSUtils.getSimulatorRuntimes(); + } catch (error) { + return; + } + + throw new Error('Should have thrown'); + }); +}); diff --git a/test/unit/common/MacNetworkUtils.test.ts b/test/unit/common/MacNetworkUtils.test.ts new file mode 100644 index 0000000..cb7223d --- /dev/null +++ b/test/unit/common/MacNetworkUtils.test.ts @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { Messages } from '@salesforce/core'; +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { MacNetworkUtils } from '../../../src/common/MacNetworkUtils.js'; + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); + +describe('Preview utils tests', () => { + const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'common'); + const $$ = new TestContext(); + + afterEach(() => { + $$.restore(); + }); + + it('getNetworkHardwarePorts succeeds with two enabled ports with IP address', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: ` + Hardware Port: USB 10/100/1000 LAN + Device: en5 + Ethernet Address: 00:24:9b:4a:ce:67 + + Hardware Port: Wi-Fi + Device: en0 + Ethernet Address: f0:18:98:50:06:dd + + Hardware Port: Bluetooth PAN + Device: en7 + Ethernet Address: f0:18:98:4d:a8:a9 + `, + stderr: '' + }); + + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandSync').callsFake((cmd: string) => { + if (cmd.includes('en5')) { + return '192.168.0.211'; + } else if (cmd.includes('en0')) { + return '192.168.0.123'; + } else if (cmd.includes('en7')) { + return ''; + } else { + throw new Error(`Unexpected input: ${cmd}`); + } + }); + + const hardwarePorts = await MacNetworkUtils.getNetworkHardwarePorts(); + expect(hardwarePorts.length).to.be.equal(2); + expect(hardwarePorts[0].address).to.be.equal('192.168.0.211'); + expect(hardwarePorts[0].device).to.be.equal('en5'); + expect(hardwarePorts[0].name).to.be.equal('USB 10/100/1000 LAN'); + expect(hardwarePorts[1].address).to.be.equal('192.168.0.123'); + expect(hardwarePorts[1].device).to.be.equal('en0'); + expect(hardwarePorts[1].name).to.be.equal('Wi-Fi'); + }); + + it('getNetworkHardwarePorts fails with error', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').rejects(new Error()); + return MacNetworkUtils.getNetworkHardwarePorts().catch((error) => + expect(error) + .to.be.an('error') + .with.property('message') + .that.includes(messages.getMessage('error:network:hardware:port', [''])) + ); + }); + + it('getProxySetting returns existing proxy setting', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: ` + { + ProxyAutoConfigEnable : 1 + ProxyAutoConfigURLString : http://myCore.internal.salesforce.com:6109/qa/proxy.jsp + }`, + stderr: '' + }); + const proxySetting = await MacNetworkUtils.getProxySetting(); + expect(proxySetting.proxyAutoConfigEnable).to.be.equal(1); + expect(proxySetting.proxyAutoConfigURLString).to.be.equal( + 'http://myCore.internal.salesforce.com:6109/qa/proxy.jsp' + ); + }); + + it('getProxySetting returns empty object when there is no existing proxy setting', async () => { + stubMethod($$.SANDBOX, CommonUtils, 'executeCommandAsync').resolves({ + stdout: ` + { + }`, + stderr: '' + }); + const proxySetting = await MacNetworkUtils.getProxySetting(); + expect(proxySetting.proxyAutoConfigEnable).to.be.undefined; + expect(proxySetting.proxyAutoConfigURLString).to.be.undefined; + }); +}); diff --git a/src/common/__tests__/PreviewMockConfigurationSchema.json b/test/unit/common/PreviewMockConfigurationSchema.ts similarity index 82% rename from src/common/__tests__/PreviewMockConfigurationSchema.json rename to test/unit/common/PreviewMockConfigurationSchema.ts index cecccba..88c72ad 100644 --- a/src/common/__tests__/PreviewMockConfigurationSchema.json +++ b/test/unit/common/PreviewMockConfigurationSchema.ts @@ -1,9 +1,15 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +export const mockSchema = ` { "$id": "https://developer.salesforce.com/mobile-tooling/preview-configuration.schema.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Mobile Component Preview", "description": "Configuration supporting preview of components on mobile devices.", - "definitions": { "launch_argument": { "type": "object", @@ -18,7 +24,10 @@ "description": "The (optional) argument value." } }, - "required": ["name", "value"] + "required": [ + "name", + "value" + ] }, "base_app": { "type": "object", @@ -47,17 +56,23 @@ "description": "A boolean indicating whether a local development server is required for previewing a component." } }, - "required": ["id", "name"] + "required": [ + "id", + "name" + ] }, "ios_app": { "type": "object", - "allOf": [{ - "$ref": "#/definitions/base_app" - }] + "allOf": [ + { + "$ref": "#/definitions/base_app" + } + ] }, "android_app": { "type": "object", - "allOf": [{ + "allOf": [ + { "$ref": "#/definitions/base_app" }, { @@ -67,7 +82,9 @@ "description": "The activity to launch." } }, - "required": ["activity"] + "required": [ + "activity" + ] } ] }, @@ -95,12 +112,11 @@ } } }, - "type": "object", - "properties": { "apps": { "$ref": "#/definitions/apps" } } -} \ No newline at end of file +} +`; diff --git a/test/unit/common/PreviewUtils.test.ts b/test/unit/common/PreviewUtils.test.ts new file mode 100644 index 0000000..b7efe33 --- /dev/null +++ b/test/unit/common/PreviewUtils.test.ts @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { TestContext } from '@salesforce/core/testSetup'; +import { stubMethod } from '@salesforce/ts-sinon'; +import { expect } from 'chai'; +import { AndroidAppPreviewConfig, IOSAppPreviewConfig } from '../../../src/common/PreviewConfigFile.js'; +import { CommonUtils } from '../../../src/common/CommonUtils.js'; +import { PreviewUtils } from '../../../src/common/PreviewUtils.js'; +import { mockSchema } from './PreviewMockConfigurationSchema.js'; + +describe('Preview utils tests', () => { + const $$ = new TestContext(); + + afterEach(() => { + $$.restore(); + }); + + it('Checks for targeting browser or app', async () => { + expect(PreviewUtils.isTargetingBrowser('browser')).to.be.true; + expect(PreviewUtils.isTargetingBrowser('com.mock.app')).to.be.false; + }); + + it('Checks for using Lwc Server for Previewing', async () => { + expect(PreviewUtils.useLwcServerForPreviewing('browser', undefined)).to.be.true; + + const iOSAppConfig = new IOSAppPreviewConfig(); + iOSAppConfig.preview_server_enabled = true; + expect(PreviewUtils.useLwcServerForPreviewing('com.mock.app', iOSAppConfig)).to.be.equal( + iOSAppConfig.preview_server_enabled + ); + + const androidAppConfig = new IOSAppPreviewConfig(); + androidAppConfig.preview_server_enabled = false; + expect(PreviewUtils.useLwcServerForPreviewing('com.mock.app', androidAppConfig)).to.be.equal( + androidAppConfig.preview_server_enabled + ); + }); + + it('Checks for adding prefix to component route', async () => { + expect(PreviewUtils.prefixRouteIfNeeded('helloWorld')).to.be.equal('c/helloWorld'); + expect(PreviewUtils.prefixRouteIfNeeded('c/helloWorld')).to.be.equal('c/helloWorld'); + }); + + it('Config validation fails when app id is not defined', async () => { + const json = '{"apps": {"ios": [{"name": "LWC Test App"}]}}'; + const configFileJson = JSON.parse(json); + const configSchema = JSON.parse(mockSchema); + stubMethod($$.SANDBOX, CommonUtils, 'loadJsonFromFile').returns(configFileJson); + + const validationResult = await PreviewUtils.validateConfigFileWithSchema('myConfig.json', configSchema); + + expect(validationResult.passed).to.be.false; + expect(validationResult.errorMessage).to.be.equal("data/apps/ios/0 must have required property 'id'"); + }); + + it('Config validation fails when app name is not defined', async () => { + const json = '{"apps": {"ios": [{"id": "com.salesforce.Test"}]}}'; + const configFileJson = JSON.parse(json); + const configSchema = JSON.parse(mockSchema); + stubMethod($$.SANDBOX, CommonUtils, 'loadJsonFromFile').returns(configFileJson); + + const validationResult = await PreviewUtils.validateConfigFileWithSchema('myConfig.json', configSchema); + + expect(validationResult.passed).to.be.false; + expect(validationResult.errorMessage).to.be.equal("data/apps/ios/0 must have required property 'name'"); + }); + + it('Config validation fails when launch arguments is not defined as key/value pair', async () => { + const json = ` + { + "apps": { + "ios": [ + { + "id": "com.salesforce.Test", + "name": "LWC Test App", + "launch_arguments": [ + { "name": "arg1", "value": "val1" }, + { "name": "arg2" } + ] + } + ] + } + }`; + const configFileJson = JSON.parse(json); + const configSchema = JSON.parse(mockSchema); + stubMethod($$.SANDBOX, CommonUtils, 'loadJsonFromFile').returns(configFileJson); + + const validationResult = await PreviewUtils.validateConfigFileWithSchema('myConfig.json', configSchema); + + expect(validationResult.passed).to.be.false; + expect(validationResult.errorMessage).to.be.equal( + "data/apps/ios/0/launch_arguments/1 must have required property 'value'" + ); + }); + + it('Config validation fails when activity is not defined for an android app', async () => { + const json = ` + { + "apps": { + "android": [ + { + "id": "com.salesforce.Test", + "name": "LWC Test App" + } + ] + } + }`; + const configFileJson = JSON.parse(json); + const configSchema = JSON.parse(mockSchema); + stubMethod($$.SANDBOX, CommonUtils, 'loadJsonFromFile').returns(configFileJson); + + const validationResult = await PreviewUtils.validateConfigFileWithSchema('myConfig.json', configSchema); + + expect(validationResult.passed).to.be.false; + expect(validationResult.errorMessage).to.be.equal("data/apps/android/0 must have required property 'activity'"); + }); + + it('Can retrieve launch arguments from config file', async () => { + const json = ` + { + "apps": { + "ios": [ + { + "id": "com.salesforce.Test", + "name": "LWC Test App", + "launch_arguments": [ + { "name": "arg1", "value": "val1" }, + { "name": "arg2", "value": "val2" } + ] + } + ] + } + }`; + const configFileJson = JSON.parse(json); + stubMethod($$.SANDBOX, CommonUtils, 'loadJsonFromFile').returns(configFileJson); + + const configFile = PreviewUtils.loadConfigFile('myConfig.json'); + const appConfig = configFile.getAppConfig('ios', 'com.salesforce.Test') as IOSAppPreviewConfig; + + const args = appConfig.launch_arguments ?? []; + expect(args.length).to.be.equal(2); + expect(args[0]).to.deep.equal({ name: 'arg1', value: 'val1' }); + expect(args[1]).to.deep.equal({ name: 'arg2', value: 'val2' }); + }); + + it('Can retrieve launch activity from config file', async () => { + const json = ` + { + "apps": { + "android": [ + { + "id": "com.salesforce.Test", + "name": "LWC Test App", + "activity": ".MyActivity" + } + ] + } + }`; + const configFileJson = JSON.parse(json); + stubMethod($$.SANDBOX, CommonUtils, 'loadJsonFromFile').returns(configFileJson); + + const configFile = PreviewUtils.loadConfigFile('myConfig.json'); + const appConfig = configFile.getAppConfig('android', 'com.salesforce.Test') as AndroidAppPreviewConfig; + + expect(appConfig.activity).to.be.equal('.MyActivity'); + }); + + it('Checks for obtaining app bundle path', async () => { + const iOSAppConfig = new IOSAppPreviewConfig(); + iOSAppConfig.get_app_bundle = undefined; + expect(PreviewUtils.getAppBundlePath('', iOSAppConfig)).to.be.undefined; + + iOSAppConfig.get_app_bundle = 'testGetAppBundleScript'; + const bundlePath = PreviewUtils.getAppBundlePath( + path.dirname(path.resolve(fileURLToPath(import.meta.url))), + iOSAppConfig + ); + expect(bundlePath).to.be.equal('sample/path/to/app/bundle'); + }); + + it('Generates correct websocket url', async () => { + // ensure that for iOS the proper url is generated + expect(PreviewUtils.generateWebSocketUrlForLocalDevServer('ios', '1234')).to.be.equal('wss://localhost:1234'); + + // ensure that for Android the proper url is generated + expect(PreviewUtils.generateWebSocketUrlForLocalDevServer('android', '1234')).to.be.equal( + 'wss://10.0.2.2:1234' + ); + + // ensure that for non-Mac desktop, the proper url is generated + let stub1 = $$.SANDBOX.stub(process, 'platform').value('win32'); // sinon.stub(process, 'platform').value('win32'); + expect(PreviewUtils.generateWebSocketUrlForLocalDevServer('desktop', '1234')).to.be.equal( + 'ws://localhost:1234' + ); + stub1.restore(); + + // ensure that for Mac desktop where Safari IS NOT default browser, the proper url is generated + stub1 = $$.SANDBOX.stub(process, 'platform').value('darwin'); + let stub2 = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandSync').returns('com.google.chrome'); + expect(PreviewUtils.generateWebSocketUrlForLocalDevServer('desktop', '1234')).to.be.equal( + 'ws://localhost:1234' + ); + stub1.restore(); + stub2.restore(); + + // ensure that for Mac desktop where Safari IS default browser, the proper url is generated + stub1 = $$.SANDBOX.stub(process, 'platform').value('darwin'); + stub2 = stubMethod($$.SANDBOX, CommonUtils, 'executeCommandSync').returns('com.apple.safari'); + expect(PreviewUtils.generateWebSocketUrlForLocalDevServer('desktop', '1234')).to.be.equal( + 'wss://localhost:1234' + ); + stub1.restore(); + stub2.restore(); + }); +}); diff --git a/test/unit/common/Requirements.test.ts b/test/unit/common/Requirements.test.ts new file mode 100644 index 0000000..78e0b99 --- /dev/null +++ b/test/unit/common/Requirements.test.ts @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2021, salesforce.com, inc. + * All rights reserved. + * SPDX-License-Identifier: MIT + * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT + */ +import { expect } from 'chai'; +import { Logger, Messages, SfError } from '@salesforce/core'; +import { RequirementProcessor, HasRequirements, CommandRequirements } from '../../../src/common/Requirements.js'; + +const logger = new Logger('test'); + +Messages.importMessagesDirectoryFromMetaUrl(import.meta.url); + +class TruthyRequirements implements HasRequirements { + public commandRequirements: CommandRequirements = {}; + public constructor() { + const requirements = [ + { + checkFunction: () => Promise.resolve(''), + title: 'SDK Check', + fulfilledMessage: 'Android SDK was detected.', + unfulfilledMessage: 'You must install Android SDK and add it to the path.', + logger + }, + { + checkFunction: () => Promise.resolve(''), + title: 'ANDROID_HOME check', + fulfilledMessage: 'ANDROID_HOME has been detected.', + unfulfilledMessage: 'You must setup ANDROID_HOME.', + logger + } + ]; + this.commandRequirements.baseRequirements = { + requirements, + enabled: true + }; + } +} + +class FalsyRequirements implements HasRequirements { + public commandRequirements: CommandRequirements = {}; + public constructor() { + const requirements = [ + { + checkFunction: () => Promise.resolve(''), + logger, + title: 'SDK Check', + fulfilledMessage: 'Android SDK was detected.', + unfulfilledMessage: 'You must install Android SDK add it to the path.' + }, + { + checkFunction: () => Promise.reject(), + logger, + title: 'ANDROID_HOME check', + fulfilledMessage: 'ANDROID_HOME has been detected.', + unfulfilledMessage: 'You must setup ANDROID_HOME.' + }, + { + checkFunction: () => Promise.reject(), + logger, + title: 'Checking SDK Tools' + }, + { + checkFunction: () => Promise.reject(), + logger, + title: 'Checking SDK Platform Tools', + fulfilledMessage: 'Android Platform tools were detected at /usr/bin.', + unfulfilledMessage: 'Install at least one Android Platform tools package (23 - 30).', + supplementalMessage: 'Get Android platform tools!' + } + ]; + this.commandRequirements.baseRequirements = { + requirements, + enabled: true + }; + } +} + +class TwoFalsyOneTruthyRequirements implements HasRequirements { + public commandRequirements: CommandRequirements = {}; + public constructor() { + this.commandRequirements.falsyRequirementOne = { + requirements: [ + { + title: 'title1', + checkFunction: () => Promise.reject(), + logger + } + ], + enabled: true + }; + this.commandRequirements.falsyRequirementTwo = { + requirements: [ + { + title: 'title2', + checkFunction: () => Promise.reject(), + logger + } + ], + enabled: true + }; + this.commandRequirements.truthyRequirement = { + requirements: [ + { + title: 'title3', + checkFunction: () => Promise.resolve(''), + logger + } + ], + enabled: true + }; + } +} + +describe('Requirements Processing', () => { + const messages = Messages.loadMessages('@salesforce/lwc-dev-mobile-core', 'requirement'); + + const failureMessage = messages.getMessage('error:requirementCheckFailed'); + const recommendationMessage = messages.getMessage('error:requirementCheckFailed:recommendation'); + + it('Meets all requirements', async () => { + try { + await RequirementProcessor.execute(new TruthyRequirements().commandRequirements); + } catch (error: any) { + throw new Error(`Should have met the requirements: ${error}`); + } + }); + + it('Throws when any requirement fails', async () => { + try { + await RequirementProcessor.execute(new FalsyRequirements().commandRequirements); + } catch (error: any) { + expect(error instanceof SfError).to.be.true; + const sfError = error as SfError; + expect(sfError.message).to.be.equal(failureMessage); + expect(sfError.actions?.length).to.be.equal(1); + expect(sfError.actions?.[0]).to.be.equal(recommendationMessage); + return; + } + + throw new Error('Should have failed the requirements'); + }); + + it('Skips all requirements that would fail and only executes a requirement that succeeds', async () => { + const requirements = new TwoFalsyOneTruthyRequirements(); + requirements.commandRequirements.falsyRequirementOne.enabled = false; + requirements.commandRequirements.falsyRequirementTwo.enabled = false; + try { + await RequirementProcessor.execute(requirements.commandRequirements); + } catch (error: any) { + throw new Error(`Should have met the requirements: ${error}`); + } + }); + + it('Fails when there is a failed requirement check in combo checks', async () => { + try { + await RequirementProcessor.execute(new TwoFalsyOneTruthyRequirements().commandRequirements); + } catch (error) { + expect(error instanceof SfError).to.be.true; + const sfError = error as SfError; + expect(sfError.message).to.be.equal(failureMessage); + expect(sfError.actions?.length).to.be.equal(1); + expect(sfError.actions?.[0]).to.be.equal(recommendationMessage); + return; + } + throw new Error('Should have failed the requirements'); + }); + + it('Skips all checks', async () => { + const requirements = new FalsyRequirements(); + requirements.commandRequirements.baseRequirements.enabled = false; + try { + await RequirementProcessor.execute(requirements.commandRequirements); + } catch (error: any) { + throw new Error(`Should have skipped the requirements: ${error}`); + } + }); +}); diff --git a/src/common/__tests__/testGetAppBundleScript b/test/unit/common/testGetAppBundleScript similarity index 100% rename from src/common/__tests__/testGetAppBundleScript rename to test/unit/common/testGetAppBundleScript diff --git a/tsconfig.json b/tsconfig.json index 260e309..7f091ac 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,72 +1,17 @@ { + "extends": "@salesforce/dev-config/tsconfig-strict-esm", "compilerOptions": { - "experimentalDecorators": true, + "outDir": "dist", + "rootDir": "src", "resolveJsonModule": true, + "skipLibCheck": true, + "baseUrl": ".", + "experimentalDecorators": true, "pretty": true, - /* Basic Options */ - "target": "es2019", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true, /* Generates corresponding '.d.ts' file. */ - "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./lib", /* Redirect output structure to the directory. */ - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "baseUrl": "./src", /* Base directory to resolve non-absolute module names. */ - /*"paths": { - "*": ["*", "../extra-types/*"] - }, A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": ["dist", "extra-types"], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": ["node", "jest"], /* Type declaration files to be included in compilation. */ - "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "declarationMap": true, + "removeComments": true }, "include": [ - "src/**/*", - "**/*.test.ts" - ], - "exclude": [ - "node_modules", - "**/*.spec.ts" + "./src/**/*.ts" ] -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 23f3c5f..4895831 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,353 +2,1045 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + version "2.3.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13": - version "7.22.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" - integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== +"@aws-crypto/crc32@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== dependencies: - "@babel/highlight" "^7.22.13" - chalk "^2.4.2" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" -"@babel/compat-data@^7.22.9": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc" - integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ== +"@aws-crypto/crc32c@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz" + integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94" - integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ== +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.0" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" + tslib "^1.11.1" -"@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@aws-crypto/sha1-browser@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz" + integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== dependencies: - "@babel/types" "^7.23.0" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" -"@babel/helper-compilation-targets@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" - lru-cache "^5.1.1" - semver "^6.3.1" + tslib "^1.11.1" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-cloudfront@^3.574.0": + version "3.574.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.574.0.tgz" + integrity sha512-2eMBoeGbVStjovGr3hqCzsX0ARVm2JP9HtUmdD59Xc0mnybZpVr47PjhV/SUqMJopHu/vxQFvKAmMj6g7C+mpw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.574.0" + "@aws-sdk/client-sts" "3.574.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@aws-sdk/xml-builder" "3.567.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@aws-sdk/client-s3@^3.569.0": + version "3.574.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.574.0.tgz" + integrity sha512-198QLFeJEs3xgCkLcGD8r0IVCR+BTjXGbVpDYC0DCU7vWjINR8igwwnuA5kbCHDALXvWmkX5MVuAlDuawsUn6w== + dependencies: + "@aws-crypto/sha1-browser" "3.0.0" + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.574.0" + "@aws-sdk/client-sts" "3.574.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-bucket-endpoint" "3.568.0" + "@aws-sdk/middleware-expect-continue" "3.572.0" + "@aws-sdk/middleware-flexible-checksums" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-location-constraint" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-sdk-s3" "3.572.0" + "@aws-sdk/middleware-signing" "3.572.0" + "@aws-sdk/middleware-ssec" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/signature-v4-multi-region" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@aws-sdk/xml-builder" "3.567.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/eventstream-serde-browser" "^2.2.0" + "@smithy/eventstream-serde-config-resolver" "^2.2.0" + "@smithy/eventstream-serde-node" "^2.2.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-blob-browser" "^2.2.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/hash-stream-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/md5-js" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-stream" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + "@smithy/util-waiter" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.574.0": + version "3.574.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.574.0.tgz" + integrity sha512-WcR8AnFhx7bqhYwfSl3OrF0Pu0LfHGgSOnmmORHqRF7ykguE09M/WUlCCjTGmZjJZ1we3uF5Xg8Jg12eiD+bmw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.574.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.572.0.tgz" + integrity sha512-S+xhScao5MD79AkrcHmFpEDk+CgoiuB/31WFcTcnrTio5TOUONAaT0QyscOIwRp7BZ7Aez7TBM+loTteJ+TQvg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.574.0": + version "3.574.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.574.0.tgz" + integrity sha512-WNDSG9nipap/L1gGDkCQvU2u413HmVxMJKr41lBCibioz42Z4i6XkCr1etYwIjuVfGF6QPrsEsYLqRwlAC/BQg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sso-oidc" "3.574.0" + "@aws-sdk/core" "3.572.0" + "@aws-sdk/credential-provider-node" "3.572.0" + "@aws-sdk/middleware-host-header" "3.567.0" + "@aws-sdk/middleware-logger" "3.568.0" + "@aws-sdk/middleware-recursion-detection" "3.567.0" + "@aws-sdk/middleware-user-agent" "3.572.0" + "@aws-sdk/region-config-resolver" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@aws-sdk/util-user-agent-browser" "3.567.0" + "@aws-sdk/util-user-agent-node" "3.568.0" + "@smithy/config-resolver" "^2.2.0" + "@smithy/core" "^1.4.2" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/hash-node" "^2.2.0" + "@smithy/invalid-dependency" "^2.2.0" + "@smithy/middleware-content-length" "^2.2.0" + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-body-length-browser" "^2.2.0" + "@smithy/util-body-length-node" "^2.3.0" + "@smithy/util-defaults-mode-browser" "^2.2.1" + "@smithy/util-defaults-mode-node" "^2.3.1" + "@smithy/util-endpoints" "^1.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.572.0.tgz" + integrity sha512-DBmf94qfN0dfaLl5EnNcq6TakWfOtVXYifHoTbX+VBwESj3rlY4W+W4mAnvBgAqDjlLFy7bBljmx+vnjnV73lg== + dependencies: + "@smithy/core" "^1.4.2" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + fast-xml-parser "4.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.568.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.568.0.tgz" + integrity sha512-MVTQoZwPnP1Ev5A7LG+KzeU6sCB8BcGkZeDT1z1V5Wt7GPq0MgFQTSSjhImnB9jqRSZkl1079Bt3PbO6lfIS8g== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@aws-sdk/credential-provider-http@3.568.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.568.0.tgz" + integrity sha512-gL0NlyI2eW17hnCrh45hZV+qjtBquB+Bckiip9R6DIVRKqYcoILyiFhuOgf2bXeF23gVh6j18pvUvIoTaFWs5w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.572.0.tgz" + integrity sha512-05KzbAp77fEiQXqMeodXeMbT83FOqSyBrfSEMz6U8uBXeJCy8zPUjN3acqcbG55/HNJHUvg1cftqzy+fUz71gA== + dependencies: + "@aws-sdk/credential-provider-env" "3.568.0" + "@aws-sdk/credential-provider-process" "3.572.0" + "@aws-sdk/credential-provider-sso" "3.572.0" + "@aws-sdk/credential-provider-web-identity" "3.568.0" + "@aws-sdk/types" "3.567.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.572.0.tgz" + integrity sha512-anlYZnpmVkfp9Gan+LcEkQvmRf/m0KcbR11th8sBEyI5lxMaHKXhnAtC/hEGT7e3L6rgNOrFYTPuSvllITD/Pg== + dependencies: + "@aws-sdk/credential-provider-env" "3.568.0" + "@aws-sdk/credential-provider-http" "3.568.0" + "@aws-sdk/credential-provider-ini" "3.572.0" + "@aws-sdk/credential-provider-process" "3.572.0" + "@aws-sdk/credential-provider-sso" "3.572.0" + "@aws-sdk/credential-provider-web-identity" "3.568.0" + "@aws-sdk/types" "3.567.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.572.0.tgz" + integrity sha512-hXcOytf0BadSm/MMy7MV8mmY0+Jv3mkavsHNBx0R82hw5ollD0I3JyOAaCtdUpztF0I72F8K+q8SpJQZ+EwArw== dependencies: - "@babel/types" "^7.22.5" + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.572.0.tgz" + integrity sha512-iIlnpJiDXFp3XC4hJNSiNurnU24mr3iLB3HoNa9efr944bo6XBl9FQdk3NssIkqzSmgyoB2CEUx/daBHz4XSow== + dependencies: + "@aws-sdk/client-sso" "3.572.0" + "@aws-sdk/token-providers" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@aws-sdk/credential-provider-web-identity@3.568.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.568.0.tgz" + integrity sha512-ZJSmTmoIdg6WqAULjYzaJ3XcbgBzVy36lir6Y0UBMRGaxDgos1AARuX6EcYzXOl+ksLvxt/xMQ+3aYh1LWfKSw== dependencies: - "@babel/types" "^7.22.15" + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@aws-sdk/middleware-bucket-endpoint@3.568.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.568.0.tgz" + integrity sha512-uc/nbSpXv64ct/wV3Ksz0/bXAsEtXuoZu5J9FTcFnM7c2MSofa0YQrtrJ8cG65uGbdeiFoJwPA048BTG/ilhCA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.572.0.tgz" + integrity sha512-+NKWVK295rOEANU/ohqEfNjkcEdZao7z6HxkMXX4gu4mDpSsVU8WhYr5hp5k3PUhtaiPU8M1rdfQBrZQc4uttw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@aws-sdk/middleware-flexible-checksums@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.572.0.tgz" + integrity sha512-ysblGDRn1yy8TlKUrwhnFbl3RuMfbVW1rbtePClEYpC/1u9MsqPmm/fmWJJGKat7NclnsgpQyfSQ64DCuaEedg== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@aws-crypto/crc32c" "3.0.0" + "@aws-sdk/types" "3.567.0" + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== +"@aws-sdk/middleware-host-header@3.567.0": + version "3.567.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.567.0.tgz" + integrity sha512-zQHHj2N3in9duKghH7AuRNrOMLnKhW6lnmb7dznou068DJtDr76w475sHp2TF0XELsOGENbbBsOlN/S5QBFBVQ== dependencies: - "@babel/types" "^7.22.5" + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@aws-sdk/middleware-location-constraint@3.567.0": + version "3.567.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.567.0.tgz" + integrity sha512-XiGTH4VxrJ5fj6zeF6UL5U5EuJwLqj9bHW5pB+EKfw0pmbnyqfRdYNt46v4GsQql2iVOq1Z/Fiv754nIItBI/A== dependencies: - "@babel/types" "^7.22.5" + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@aws-sdk/middleware-logger@3.568.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.568.0.tgz" + integrity sha512-BinH72RG7K3DHHC1/tCulocFv+ZlQ9SrPF9zYT0T1OT95JXuHhB7fH8gEABrc6DAtOdJJh2fgxQjPy5tzPtsrA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@aws-sdk/middleware-recursion-detection@3.567.0": + version "3.567.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.567.0.tgz" + integrity sha512-rFk3QhdT4IL6O/UWHmNdjJiURutBCy+ogGqaNHf/RELxgXH3KmYorLwCe0eFb5hq8f6vr3zl4/iH7YtsUOuo1w== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.572.0.tgz" + integrity sha512-ygQL1G2hWoJXkUGL/Xr5q9ojXCH8hgt/oKsxJtc5U8ZXw3SRlL6pCVE7+aiD0l8mgIGbW0vrL08Oc/jYWlakdw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-arn-parser" "3.568.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + tslib "^2.6.2" -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@aws-sdk/middleware-signing@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.572.0.tgz" + integrity sha512-/pEVgHnf8LsTG0hu9yqqvmLMknlKO5c19NM3J9qTWGLPfySi8tWrFuREAFKAxqJFgDw1IdFWd+dXIkodpbGwew== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" -"@babel/helpers@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" - integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== +"@aws-sdk/middleware-ssec@3.567.0": + version "3.567.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.567.0.tgz" + integrity sha512-lhpBwFi3Tcw+jlOdaCsg3lCAg4oOSJB00bW/aLTFeZWutwi9VexMmsddZllx99lN+LDeCjryNyVd2TCRCKwYhQ== dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.2" - "@babel/types" "^7.23.0" + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/highlight@^7.22.13": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" - integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== +"@aws-sdk/middleware-user-agent@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.572.0.tgz" + integrity sha512-R4bBbLp1ywtF1kJoOX1juDMztKPWeQHNj6XuTvtruFDn1RdfnBlbM3+9rguRfH5s4V+xfl8SSWchnyo2cI00xg== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" + "@aws-sdk/types" "3.567.0" + "@aws-sdk/util-endpoints" "3.572.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@aws-sdk/region-config-resolver@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.572.0.tgz" + integrity sha512-xkZMIxek44F4YW5r9otD1O5Y/kDkgAb6JNJePkP1qPVojrkCmin3OFYAOZgGm+T4DZAQ5rWhpaqTAWmnRumYfw== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.572.0.tgz" + integrity sha512-FD6FIi8py1ZAR53NjD2VXKDvvQUhhZu7CDUfC9gjAa7JDtv+rJvM9ZuoiQjaDnzzqYxTr4pKqqjLsd6+8BCSWA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.572.0" + "@aws-sdk/types" "3.567.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/signature-v4" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== +"@aws-sdk/token-providers@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.572.0.tgz" + integrity sha512-IkSu8p32tQZhKqwmfLZLGfYwNhsS/HUQBLnDMHJlr9VifmDqlTurcr+DwMCaMimuFhcLeb45vqTymKf/ro/OBw== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@aws-sdk/types" "3.567.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== +"@aws-sdk/types@3.567.0", "@aws-sdk/types@^3.222.0": + version "3.567.0" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.567.0.tgz" + integrity sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== +"@aws-sdk/util-arn-parser@3.568.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz" + integrity sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + tslib "^2.6.2" -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== +"@aws-sdk/util-endpoints@3.572.0": + version "3.572.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.572.0.tgz" + integrity sha512-AIEC7ItIWBqkJLtqcSd0HG8tvdh3zVwqnKPHNrcfFay0Xonqx3p/qTCDwGosh5CM5hDGzyOSRA5PkacEDBTz9w== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + "@smithy/util-endpoints" "^1.2.0" + tslib "^2.6.2" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== +"@aws-sdk/util-locate-window@^3.0.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz" + integrity sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + tslib "^2.6.2" -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== +"@aws-sdk/util-user-agent-browser@3.567.0": + version "3.567.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.567.0.tgz" + integrity sha512-cqP0uXtZ7m7hRysf3fRyJwcY1jCgQTpJy7BHB5VpsE7DXlXHD5+Ur5L42CY7UrRPrB6lc6YGFqaAOs5ghMcLyA== + dependencies: + "@aws-sdk/types" "3.567.0" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.568.0": + version "3.568.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.568.0.tgz" + integrity sha512-NVoZoLnKF+eXPBvXg+KqixgJkPSrerR6Gqmbjwqbv14Ini+0KNKB0/MXas1mDGvvEgtNkHI/Cb9zlJ3KXpti2A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@aws-sdk/types" "3.567.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + tslib "^2.3.1" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== +"@aws-sdk/xml-builder@3.567.0": + version "3.567.0" + resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.567.0.tgz" + integrity sha512-Db25jK9sZdGa7PEQTdm60YauUVbeYGsSEMQOHGP6ifbXfCknqgkPgWV16DqAKJUsbII0xgkJ9LpppkmYal3K/g== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== +"@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== + +"@babel/core@^7.7.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz" + integrity sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.5" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.24.5" + "@babel/helpers" "^7.24.5" + "@babel/parser" "^7.24.5" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== +"@babel/generator@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz" + integrity sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/types" "^7.24.5" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/plugin-syntax-typescript@^7.7.2": +"@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/runtime-corejs3@^7.12.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.23.2.tgz#a5cd9d8b408fb946b2f074b21ea40c04e516795c" - integrity sha512-54cIh74Z1rp4oIjsHjqN+WM4fMyCBYe+LpZ9jWm51CZ1fbH3SkAzQD/3XLoNkjbJ7YEmjobLXyvQrFypRHOrXw== +"@babel/helper-module-imports@^7.24.3": + version "7.24.3" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== dependencies: - core-js-pure "^3.30.2" - regenerator-runtime "^0.14.0" + "@babel/types" "^7.24.0" -"@babel/runtime@^7.12.5": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== +"@babel/helper-module-transforms@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz" + integrity sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A== dependencies: - regenerator-runtime "^0.14.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.24.3" + "@babel/helper-simple-access" "^7.24.5" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/helper-validator-identifier" "^7.24.5" + +"@babel/helper-simple-access@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz" + integrity sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ== + dependencies: + "@babel/types" "^7.24.5" + +"@babel/helper-split-export-declaration@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz" + integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== + dependencies: + "@babel/types" "^7.24.5" + +"@babel/helper-string-parser@^7.24.1": + version "7.24.1" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + +"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz" + integrity sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz" + integrity sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.5" + "@babel/types" "^7.24.5" + +"@babel/highlight@^7.24.2": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz" + integrity sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.5" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== +"@babel/parser@^7.24.0", "@babel/parser@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz" + integrity sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg== + +"@babel/template@^7.22.15", "@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" -"@babel/traverse@^7.23.2": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" - integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== +"@babel/traverse@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz" + integrity sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA== dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.5" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" - debug "^4.1.0" + "@babel/helper-split-export-declaration" "^7.24.5" + "@babel/parser" "^7.24.5" + "@babel/types" "^7.24.5" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.24.5": + version "7.24.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz" + integrity sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ== dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.1" + "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@commitlint/cli@^17.1.2": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.1.tgz" + integrity sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg== + dependencies: + "@commitlint/format" "^17.8.1" + "@commitlint/lint" "^17.8.1" + "@commitlint/load" "^17.8.1" + "@commitlint/read" "^17.8.1" + "@commitlint/types" "^17.8.1" + execa "^5.0.0" + lodash.isfunction "^3.0.9" + resolve-from "5.0.0" + resolve-global "1.0.0" + yargs "^17.0.0" + +"@commitlint/config-conventional@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz" + integrity sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg== + dependencies: + conventional-changelog-conventionalcommits "^6.1.0" + +"@commitlint/config-validator@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.8.1.tgz" + integrity sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA== + dependencies: + "@commitlint/types" "^17.8.1" + ajv "^8.11.0" + +"@commitlint/ensure@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.8.1.tgz" + integrity sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow== + dependencies: + "@commitlint/types" "^17.8.1" + lodash.camelcase "^4.3.0" + lodash.kebabcase "^4.1.1" + lodash.snakecase "^4.1.1" + lodash.startcase "^4.4.0" + lodash.upperfirst "^4.3.1" + +"@commitlint/execute-rule@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz" + integrity sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ== + +"@commitlint/format@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/format/-/format-17.8.1.tgz" + integrity sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg== + dependencies: + "@commitlint/types" "^17.8.1" + chalk "^4.1.0" + +"@commitlint/is-ignored@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz" + integrity sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g== + dependencies: + "@commitlint/types" "^17.8.1" + semver "7.5.4" + +"@commitlint/lint@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.1.tgz" + integrity sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA== + dependencies: + "@commitlint/is-ignored" "^17.8.1" + "@commitlint/parse" "^17.8.1" + "@commitlint/rules" "^17.8.1" + "@commitlint/types" "^17.8.1" + +"@commitlint/load@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/load/-/load-17.8.1.tgz" + integrity sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA== + dependencies: + "@commitlint/config-validator" "^17.8.1" + "@commitlint/execute-rule" "^17.8.1" + "@commitlint/resolve-extends" "^17.8.1" + "@commitlint/types" "^17.8.1" + "@types/node" "20.5.1" + chalk "^4.1.0" + cosmiconfig "^8.0.0" + cosmiconfig-typescript-loader "^4.0.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" + resolve-from "^5.0.0" + ts-node "^10.8.1" + typescript "^4.6.4 || ^5.2.2" + +"@commitlint/message@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/message/-/message-17.8.1.tgz" + integrity sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA== + +"@commitlint/parse@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/parse/-/parse-17.8.1.tgz" + integrity sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw== + dependencies: + "@commitlint/types" "^17.8.1" + conventional-changelog-angular "^6.0.0" + conventional-commits-parser "^4.0.0" + +"@commitlint/read@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/read/-/read-17.8.1.tgz" + integrity sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w== + dependencies: + "@commitlint/top-level" "^17.8.1" + "@commitlint/types" "^17.8.1" + fs-extra "^11.0.0" + git-raw-commits "^2.0.11" + minimist "^1.2.6" + +"@commitlint/resolve-extends@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz" + integrity sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q== + dependencies: + "@commitlint/config-validator" "^17.8.1" + "@commitlint/types" "^17.8.1" + import-fresh "^3.0.0" + lodash.mergewith "^4.6.2" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/rules@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/rules/-/rules-17.8.1.tgz" + integrity sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA== + dependencies: + "@commitlint/ensure" "^17.8.1" + "@commitlint/message" "^17.8.1" + "@commitlint/to-lines" "^17.8.1" + "@commitlint/types" "^17.8.1" + execa "^5.0.0" + +"@commitlint/to-lines@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.8.1.tgz" + integrity sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA== + +"@commitlint/top-level@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.8.1.tgz" + integrity sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA== + dependencies: + find-up "^5.0.0" + +"@commitlint/types@^17.8.1": + version "17.8.1" + resolved "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz" + integrity sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ== + dependencies: + chalk "^4.1.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@es-joy/jsdoccomment@~0.40.1": - version "0.40.1" - resolved "https://registry.yarnpkg.com/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz#13acd77fb372ed1c83b7355edd865a3b370c9ec4" - integrity sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg== +"@es-joy/jsdoccomment@~0.41.0": + version "0.41.0" + resolved "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz" + integrity sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw== dependencies: - comment-parser "1.4.0" + comment-parser "1.4.1" esquery "^1.5.0" jsdoc-type-pratt-parser "~4.0.0" "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -360,38 +1052,128 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.52.0": - version "8.52.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c" - integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== - -"@gar/promisify@^1.0.1", "@gar/promisify@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@inquirer/confirm@^2.0.17": + version "2.0.17" + resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-2.0.17.tgz" + integrity sha512-EqzhGryzmGpy2aJf6LxJVhndxYmFs+m8cxXzf8nejb1DE3sabf6mUgBcp4J0jAUEiAcYzqmkqRr7LPFh/WdnXA== + dependencies: + "@inquirer/core" "^6.0.0" + "@inquirer/type" "^1.1.6" + chalk "^4.1.2" + +"@inquirer/confirm@^3.1.6": + version "3.1.6" + resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.6.tgz" + integrity sha512-Mj4TU29g6Uy+37UtpA8UpEOI2icBfpCwSW1QDtfx60wRhUy90s/kHPif2OXSSvuwDQT1lhAYRWUfkNf9Tecxvg== + dependencies: + "@inquirer/core" "^8.1.0" + "@inquirer/type" "^1.3.1" + +"@inquirer/core@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@inquirer/core/-/core-6.0.0.tgz" + integrity sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw== + dependencies: + "@inquirer/type" "^1.1.6" + "@types/mute-stream" "^0.0.4" + "@types/node" "^20.10.7" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + cli-spinners "^2.9.2" + cli-width "^4.1.0" + figures "^3.2.0" + mute-stream "^1.0.0" + run-async "^3.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + +"@inquirer/core@^8.1.0": + version "8.1.0" + resolved "https://registry.npmjs.org/@inquirer/core/-/core-8.1.0.tgz" + integrity sha512-kfx0SU9nWgGe1f03ao/uXc85SFH1v2w3vQVH7QDGjKxdtJz+7vPitFtG++BTyJMYyYgH8MpXigutcXJeiQwVRw== + dependencies: + "@inquirer/figures" "^1.0.1" + "@inquirer/type" "^1.3.1" + "@types/mute-stream" "^0.0.4" + "@types/node" "^20.12.7" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + cli-spinners "^2.9.2" + cli-width "^4.1.0" + mute-stream "^1.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + +"@inquirer/figures@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.1.tgz" + integrity sha512-mtup3wVKia3ZwULPHcbs4Mor8Voi+iIXEWD7wCNbIO6lYR62oPCTQyrddi5OMYVXHzeCSoneZwJuS8sBvlEwDw== + +"@inquirer/input@^2.1.1": + version "2.1.6" + resolved "https://registry.npmjs.org/@inquirer/input/-/input-2.1.6.tgz" + integrity sha512-M8bUFOlcn/kQcVYskl4kkB6dYrHtymJJ1S4nSg/khXT3W3l71u2qhSzfo6PdBG3jUe6ILJZ0gUh4Kef2uJ5pxw== + dependencies: + "@inquirer/core" "^8.1.0" + "@inquirer/type" "^1.3.1" + +"@inquirer/password@^1.1.16": + version "1.1.16" + resolved "https://registry.npmjs.org/@inquirer/password/-/password-1.1.16.tgz" + integrity sha512-aZYZVHLUXZ2gbBot+i+zOJrks1WaiI95lvZCn1sKfcw6MtSSlYC8uDX8sTzQvAsQ8epHoP84UNvAIT0KVGOGqw== + dependencies: + "@inquirer/core" "^6.0.0" + "@inquirer/type" "^1.1.6" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + +"@inquirer/select@^2.3.2": + version "2.3.2" + resolved "https://registry.npmjs.org/@inquirer/select/-/select-2.3.2.tgz" + integrity sha512-VzLHVpaobBpI3o/CWSG2sCDqrjHZEYAfT1bowbR8Q72fEi0WfBO3Fnh595QqBit9kQhI1uJbVHaaovg1I7eE7Q== + dependencies: + "@inquirer/core" "^8.1.0" + "@inquirer/figures" "^1.0.1" + "@inquirer/type" "^1.3.1" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + +"@inquirer/type@^1.1.6", "@inquirer/type@^1.3.1": + version "1.3.1" + resolved "https://registry.npmjs.org/@inquirer/type/-/type-1.3.1.tgz" + integrity sha512-Pe3PFccjPVJV1vtlfVvm9OnlbxqdnP5QcscFEFEnK5quChf1ufZtM0r8mR5ToWHMxZOh0s8o/qp9ANGRTo/DAw== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -401,14 +1183,9 @@ wrap-ansi "^8.1.0" wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -419,1048 +1196,1040 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/set-array" "^1.0.1" + "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== +"@jsforce/jsforce-node@^3.2.0": + version "3.2.0" + resolved "https://registry.npmjs.org/@jsforce/jsforce-node/-/jsforce-node-3.2.0.tgz" + integrity sha512-3GjWNgWs0HFajVhIhwvBPb0B45o500wTBNEBYxy8XjeeRra+qw8A9xUrfVU7TAGev8kXuKhjJwaTiSzThpEnew== + dependencies: + "@sindresorhus/is" "^4" + "@types/node" "^18.15.3" + abort-controller "^3.0.0" + base64url "^3.0.1" + csv-parse "^5.5.2" + csv-stringify "^6.4.4" + faye "^1.4.0" + form-data "^4.0.0" + fs-extra "^8.1.0" + https-proxy-agent "^5.0.0" + multistream "^3.1.0" + node-fetch "^2.6.1" + strip-ansi "^6.0.0" + xml2js "^0.6.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@npmcli/arborist@^4.0.4": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-4.3.1.tgz#a08cddce3339882f688c1dea1651f6971e781c44" - integrity sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/installed-package-contents" "^1.0.7" - "@npmcli/map-workspaces" "^2.0.0" - "@npmcli/metavuln-calculator" "^2.0.0" - "@npmcli/move-file" "^1.1.0" - "@npmcli/name-from-folder" "^1.0.1" - "@npmcli/node-gyp" "^1.0.3" - "@npmcli/package-json" "^1.0.1" - "@npmcli/run-script" "^2.0.0" - bin-links "^3.0.0" - cacache "^15.0.3" - common-ancestor-path "^1.0.1" - json-parse-even-better-errors "^2.3.1" - json-stringify-nice "^1.1.4" - mkdirp "^1.0.4" - mkdirp-infer-owner "^2.0.0" - npm-install-checks "^4.0.0" - npm-package-arg "^8.1.5" - npm-pick-manifest "^6.1.0" - npm-registry-fetch "^12.0.1" - pacote "^12.0.2" - parse-conflict-json "^2.0.1" - proc-log "^1.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.1" - read-package-json-fast "^2.0.2" - readdir-scoped-modules "^1.1.0" - rimraf "^3.0.2" - semver "^7.3.5" - ssri "^8.0.1" - treeverse "^1.0.4" - walk-up-path "^1.0.0" +"@oclif/core@3.26.6", "@oclif/core@^3.26.2", "@oclif/core@^3.26.5", "@oclif/core@^3.26.6": + version "3.26.6" + resolved "https://registry.npmjs.org/@oclif/core/-/core-3.26.6.tgz" + integrity sha512-+FiTw1IPuJTF9tSAlTsY8bGK4sgthehjz7c2SvYdgQncTkxI2xvUch/8QpjNYGLEmUneNygvYMRBax2KJcLccA== + dependencies: + "@types/cli-progress" "^3.11.5" + ansi-escapes "^4.3.2" + ansi-styles "^4.3.0" + cardinal "^2.1.1" + chalk "^4.1.2" + clean-stack "^3.0.1" + cli-progress "^3.12.0" + color "^4.2.3" + debug "^4.3.4" + ejs "^3.1.10" + get-package-type "^0.1.0" + globby "^11.1.0" + hyperlinker "^1.0.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + js-yaml "^3.14.1" + minimatch "^9.0.4" + natural-orderby "^2.0.3" + object-treeify "^1.1.33" + password-prompt "^1.1.3" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + supports-color "^8.1.1" + supports-hyperlinks "^2.2.0" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== +"@oclif/plugin-command-snapshot@^5.1.9": + version "5.1.9" + resolved "https://registry.npmjs.org/@oclif/plugin-command-snapshot/-/plugin-command-snapshot-5.1.9.tgz" + integrity sha512-PeSQP2IxzL34e3DYoEdAw8UCcsuawcJqnQe97HNUSBpBSC2PY/7uL887TfmMIo/rhzM7PtSUNxfNwOiKw5cNUw== dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" + "@oclif/core" "3.26.6" + "@types/lodash.difference" "^4.5.9" + chalk "^5.3.0" + globby "^14.0.1" + just-diff "^5.2.0" + lodash.difference "^4.5.0" + lodash.get "^4.4.2" + lodash.sortby "^4.7.0" + semver "^7.6.0" + ts-json-schema-generator "^1.5.1" + +"@oclif/plugin-help@^6.0.21": + version "6.0.21" + resolved "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.0.21.tgz" + integrity sha512-w860r9d456xhw1GPaos9yQF+BZeFY9UKdrINbL3fZFX5ZHhr/zGT4Fep5wUkHogjjnSB8+ZHi3D6j2jScIizUw== + dependencies: + "@oclif/core" "^3.26.2" + +"@oclif/plugin-not-found@^3.1.8": + version "3.1.8" + resolved "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.1.8.tgz" + integrity sha512-TbpMJ7PODaXuodSivqJo9cFxiVxNUmkCCl1BTdMpLuy82nxMv6aON0W1DVJryJ/OQjM4RKXvH3x3qCB7Xn0U8g== + dependencies: + "@inquirer/confirm" "^3.1.6" + "@oclif/core" "^3.26.5" + chalk "^5.3.0" + fast-levenshtein "^3.0.0" -"@npmcli/fs@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" - integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== +"@oclif/plugin-warn-if-update-available@^3.0.18": + version "3.0.19" + resolved "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.0.19.tgz" + integrity sha512-CauYLxNuPtK9ig1ZlzFiCqxzGJJd73CKyJDiSzGkg3QRooyZkE9G+l1Lz18fHzj+TEeXUZ74t6RWWPC5p0TL4w== dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" + "@oclif/core" "^3.26.6" + chalk "^5.3.0" + debug "^4.1.0" + http-call "^5.2.2" + lodash "^4.17.21" -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@salesforce/cli-plugins-testkit@^5.3.4": + version "5.3.4" + resolved "https://registry.npmjs.org/@salesforce/cli-plugins-testkit/-/cli-plugins-testkit-5.3.4.tgz" + integrity sha512-VgEIKuf3nr1HKwQ3t+cIoLqe7Xo4TGfzDoqXNdwPyMLneCrrktYZFnZs6sAi4gTQYuXIE4X23tzaEfjqRgwpvA== dependencies: - semver "^7.3.5" + "@salesforce/core" "^7.3.5" + "@salesforce/kit" "^3.1.1" + "@salesforce/ts-types" "^2.0.9" + "@types/shelljs" "^0.8.15" + debug "^4.3.1" + jszip "^3.10.1" + shelljs "^0.8.4" + sinon "^17.0.2" + strip-ansi "6.0.1" + ts-retry-promise "^0.8.0" + +"@salesforce/core@^7.3.1", "@salesforce/core@^7.3.5": + version "7.3.5" + resolved "https://registry.npmjs.org/@salesforce/core/-/core-7.3.5.tgz" + integrity sha512-9hkK4EyV1Z7T1mDyb/Rj1dO0Owp3f2PNGXSyQhCG2nozSCxAQlPeFFqn2L3d7kJJxdhlr58P4QXiFCoJVVvbLQ== + dependencies: + "@jsforce/jsforce-node" "^3.2.0" + "@salesforce/kit" "^3.1.1" + "@salesforce/schemas" "^1.7.0" + "@salesforce/ts-types" "^2.0.9" + ajv "^8.13.0" + change-case "^4.1.2" + faye "^1.4.0" + form-data "^4.0.0" + js2xmlparser "^4.0.1" + jsonwebtoken "9.0.2" + jszip "3.10.1" + pino "^8.21.0" + pino-abstract-transport "^1.1.0" + pino-pretty "^10.3.1" + proper-lockfile "^4.1.2" + semver "^7.6.0" + ts-retry-promise "^0.7.1" -"@npmcli/git@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.1.0.tgz#2fbd77e147530247d37f325930d457b3ebe894f6" - integrity sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw== +"@salesforce/core@^7.3.6": + version "7.3.6" + resolved "https://registry.npmjs.org/@salesforce/core/-/core-7.3.6.tgz" + integrity sha512-LngaY4GxixZ7X5oPGa00NdRzpqTXC8jPOQ/H+oFNiZb8nhMfYTBsQob258z33sIBf+G/5RZOJgX10Z+teJzt6A== dependencies: - "@npmcli/promise-spawn" "^1.3.2" - lru-cache "^6.0.0" - mkdirp "^1.0.4" - npm-pick-manifest "^6.1.1" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^2.0.2" + "@jsforce/jsforce-node" "^3.2.0" + "@salesforce/kit" "^3.1.1" + "@salesforce/schemas" "^1.7.0" + "@salesforce/ts-types" "^2.0.9" + ajv "^8.13.0" + change-case "^4.1.2" + faye "^1.4.0" + form-data "^4.0.0" + js2xmlparser "^4.0.1" + jsonwebtoken "9.0.2" + jszip "3.10.1" + pino "^8.21.0" + pino-abstract-transport "^1.1.0" + pino-pretty "^10.3.1" + proper-lockfile "^4.1.2" + semver "^7.6.2" + ts-retry-promise "^0.7.1" -"@npmcli/git@^4.0.0": +"@salesforce/dev-config@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" - integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== - dependencies: - "@npmcli/promise-spawn" "^6.0.0" - lru-cache "^7.4.4" - npm-pick-manifest "^8.0.0" - proc-log "^3.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^3.0.0" + resolved "https://registry.npmjs.org/@salesforce/dev-config/-/dev-config-4.1.0.tgz" + integrity sha512-2iDDepiIwjXHS5IVY7pwv8jMo4xWosJ7p/UTj+lllpB/gnJiYLhjJPE4Z3FCGFKyvfg5jGaimCd8Ca6bLGsCQA== + +"@salesforce/dev-scripts@^9.1.1": + version "9.1.1" + resolved "https://registry.npmjs.org/@salesforce/dev-scripts/-/dev-scripts-9.1.1.tgz" + integrity sha512-Nl0jJt6ywPw8QtBa0scZxJeGUEwJl2t2MazZxkXBkdfi13I1ce6NQ6Ce2CYCgh8gsKVP65NWBdyBWRoTz1BMBA== + dependencies: + "@commitlint/cli" "^17.1.2" + "@commitlint/config-conventional" "^17.8.1" + "@salesforce/dev-config" "^4.1.0" + "@salesforce/prettier-config" "^0.0.3" + "@types/chai" "^4.3.14" + "@types/mocha" "^10.0.6" + "@types/node" "^18.19.32" + "@types/sinon" "^10.0.20" + chai "^4.3.10" + chalk "^4.0.0" + cosmiconfig "^8.3.6" + eslint-config-salesforce-typescript "^3.3.0" + husky "^7.0.4" + linkinator "^6.0.4" + mocha "^10.4.0" + nyc "^15.1.0" + prettier "^2.8.8" + pretty-quick "^3.3.1" + shelljs "^0.8.5" + sinon "10.0.0" + source-map-support "^0.5.21" + ts-node "^10.9.2" + typedoc "^0.25.12" + typedoc-plugin-missing-exports "0.23.0" + typescript "^5.4.3" + wireit "^0.14.4" + +"@salesforce/kit@^3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@salesforce/kit/-/kit-3.1.1.tgz" + integrity sha512-Cjkh+USp5PtdZmD30r1Y7d+USpIhQz9B48w76esBtYpgqzhyj806LHkVgEfmorLNq2Qe8EO5rtUYd+XZ3rnV9w== + dependencies: + "@salesforce/ts-types" "^2.0.9" + tslib "^2.6.2" -"@npmcli/installed-package-contents@^1.0.6", "@npmcli/installed-package-contents@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" - integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== +"@salesforce/prettier-config@^0.0.3": + version "0.0.3" + resolved "https://registry.npmjs.org/@salesforce/prettier-config/-/prettier-config-0.0.3.tgz" + integrity sha512-hYOhoPTCSYMDYn+U1rlEk16PoBeAJPkrdg4/UtAzupM1mRRJOwEPMG1d7U8DxJFKuXW3DMEYWr2MwAIBDaHmFg== + +"@salesforce/schemas@^1.7.0": + version "1.7.0" + resolved "https://registry.npmjs.org/@salesforce/schemas/-/schemas-1.7.0.tgz" + integrity sha512-Z0PiCEV55khm0PG+DsnRYCjaDmacNe3HDmsoSm/CSyYvJJm+D5vvkHKN9/PKD/gaRe8XAU836yfamIYFblLINw== + +"@salesforce/sf-plugins-core@^9.0.10": + version "9.0.10" + resolved "https://registry.npmjs.org/@salesforce/sf-plugins-core/-/sf-plugins-core-9.0.10.tgz" + integrity sha512-vj6tjqRAweTuzxi7OBPsqC+kLPk6pl6wZUtpC8bf+CKqrVhouPtZUBnG01Xm0jG6Antjgn0vZrd26j23Yjs9Kw== + dependencies: + "@inquirer/confirm" "^2.0.17" + "@inquirer/password" "^1.1.16" + "@oclif/core" "^3.26.6" + "@salesforce/core" "^7.3.6" + "@salesforce/kit" "^3.1.1" + "@salesforce/ts-types" "^2.0.9" + chalk "^5.3.0" + +"@salesforce/ts-sinon@1.4.19": + version "1.4.19" + resolved "https://registry.npmjs.org/@salesforce/ts-sinon/-/ts-sinon-1.4.19.tgz" + integrity sha512-vopxKrI6QD0OCtPlge1eGGHFWLkoDee7KaB/dpGeRwioeNfCVJ8ikELN0hv0zq9Ys6gUYWYcdpxzTP1upslCJA== dependencies: - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" + "@salesforce/ts-types" "^2.0.9" + sinon "^5.1.1" + tslib "^2.6.1" -"@npmcli/installed-package-contents@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" - integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== +"@salesforce/ts-types@^2.0.9": + version "2.0.9" + resolved "https://registry.npmjs.org/@salesforce/ts-types/-/ts-types-2.0.9.tgz" + integrity sha512-boUD9jw5vQpTCPCCmK/NFTWjSuuW+lsaxOynkyNXLW+zxOc4GDjhtKc4j0vWZJQvolpafbyS8ZLFHZJvs12gYA== dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" + tslib "^2.6.2" -"@npmcli/map-workspaces@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" - integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== +"@sindresorhus/is@^4": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== + +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + +"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1": + version "1.8.6" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: - "@npmcli/name-from-folder" "^1.0.1" - glob "^8.0.1" - minimatch "^5.0.1" - read-package-json-fast "^2.0.3" + type-detect "4.0.8" -"@npmcli/metavuln-calculator@^2.0.0": +"@sinonjs/commons@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-2.0.0.tgz#70937b8b5a5cad5c588c8a7b38c4a8bd6f62c84c" - integrity sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg== + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz" + integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== dependencies: - cacache "^15.0.5" - json-parse-even-better-errors "^2.3.1" - pacote "^12.0.0" - semver "^7.3.2" + type-detect "4.0.8" -"@npmcli/move-file@^1.0.1", "@npmcli/move-file@^1.1.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== +"@sinonjs/commons@^3.0.0", "@sinonjs/commons@^3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + type-detect "4.0.8" -"@npmcli/move-file@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" - integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== +"@sinonjs/fake-timers@^11.2.2": + version "11.2.2" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz" + integrity sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw== dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "@sinonjs/commons" "^3.0.0" -"@npmcli/name-from-folder@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" - integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== +"@sinonjs/fake-timers@^6.0.0", "@sinonjs/fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz" + integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + dependencies: + "@sinonjs/commons" "^1.7.0" -"@npmcli/node-gyp@^1.0.2", "@npmcli/node-gyp@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz#a912e637418ffc5f2db375e93b85837691a43a33" - integrity sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA== +"@sinonjs/formatio@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz" + integrity sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg== + dependencies: + samsam "1.3.0" -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== +"@sinonjs/formatio@^3.2.1": + version "3.2.2" + resolved "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz" + integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== + dependencies: + "@sinonjs/commons" "^1" + "@sinonjs/samsam" "^3.1.0" -"@npmcli/package-json@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-1.0.1.tgz#1ed42f00febe5293c3502fd0ef785647355f6e89" - integrity sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg== +"@sinonjs/samsam@^3.1.0": + version "3.3.3" + resolved "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz" + integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== dependencies: - json-parse-even-better-errors "^2.3.1" + "@sinonjs/commons" "^1.3.0" + array-from "^2.1.1" + lodash "^4.17.15" -"@npmcli/promise-spawn@^1.2.0", "@npmcli/promise-spawn@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz#42d4e56a8e9274fba180dabc0aea6e38f29274f5" - integrity sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg== +"@sinonjs/samsam@^5.3.1": + version "5.3.1" + resolved "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz" + integrity sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg== dependencies: - infer-owner "^1.0.4" + "@sinonjs/commons" "^1.6.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" -"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" - integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== +"@sinonjs/samsam@^8.0.0": + version "8.0.0" + resolved "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz" + integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== dependencies: - which "^3.0.0" + "@sinonjs/commons" "^2.0.0" + lodash.get "^4.4.2" + type-detect "^4.0.8" -"@npmcli/run-script@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-2.0.0.tgz#9949c0cab415b17aaac279646db4f027d6f1e743" - integrity sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig== +"@sinonjs/text-encoding@^0.7.1", "@sinonjs/text-encoding@^0.7.2": + version "0.7.2" + resolved "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz" + integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== + +"@smithy/abort-controller@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz" + integrity sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw== dependencies: - "@npmcli/node-gyp" "^1.0.2" - "@npmcli/promise-spawn" "^1.3.2" - node-gyp "^8.2.0" - read-package-json-fast "^2.0.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@npmcli/run-script@^6.0.0": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" - integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== +"@smithy/chunked-blob-reader-native@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz" + integrity sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ== dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^6.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^3.0.0" - which "^3.0.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" -"@oclif/core@^2.15.0": - version "2.15.0" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-2.15.0.tgz#f27797b30a77d13279fba88c1698fc34a0bd0d2a" - integrity sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA== +"@smithy/chunked-blob-reader@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz" + integrity sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ== dependencies: - "@types/cli-progress" "^3.11.0" - ansi-escapes "^4.3.2" - ansi-styles "^4.3.0" - cardinal "^2.1.1" - chalk "^4.1.2" - clean-stack "^3.0.1" - cli-progress "^3.12.0" - debug "^4.3.4" - ejs "^3.1.8" - get-package-type "^0.1.0" - globby "^11.1.0" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.14.1" - natural-orderby "^2.0.3" - object-treeify "^1.1.33" - password-prompt "^1.1.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - supports-color "^8.1.1" - supports-hyperlinks "^2.2.0" - ts-node "^10.9.1" - tslib "^2.5.0" - widest-line "^3.1.0" - wordwrap "^1.0.0" - wrap-ansi "^7.0.0" + tslib "^2.6.2" -"@oclif/core@^3.0.0", "@oclif/core@^3.0.4", "@oclif/core@^3.2.1", "@oclif/core@^3.3.1", "@oclif/core@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-3.8.0.tgz#45f5f630b3b593c3486e7835953ad6fb2af01bcb" - integrity sha512-fKqg9QzjIflDcYljZkZEeY6zoRyk4AZ5e2V4LUIsSOR7+B78qpqNqDPJFTI8TvrEU3+Q+ssELntOL2VA3SMsqQ== +"@smithy/config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz" + integrity sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA== dependencies: - ansi-escapes "^4.3.2" - ansi-styles "^4.3.0" - cardinal "^2.1.1" - chalk "^4.1.2" - clean-stack "^3.0.1" - cli-progress "^3.12.0" - debug "^4.3.4" - ejs "^3.1.9" - get-package-type "^0.1.0" - globby "^11.1.0" - hyperlinker "^1.0.0" - indent-string "^4.0.0" - is-wsl "^2.2.0" - js-yaml "^3.14.1" - natural-orderby "^2.0.3" - object-treeify "^1.1.33" - password-prompt "^1.1.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - supports-color "^8.1.1" - supports-hyperlinks "^2.2.0" - widest-line "^3.1.0" - wordwrap "^1.0.0" - wrap-ansi "^7.0.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-config-provider" "^2.3.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" + +"@smithy/core@^1.4.2": + version "1.4.2" + resolved "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz" + integrity sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-retry" "^2.3.1" + "@smithy/middleware-serde" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" -"@oclif/plugin-help@^5.2.14": - version "5.2.20" - resolved "https://registry.yarnpkg.com/@oclif/plugin-help/-/plugin-help-5.2.20.tgz#4035a0ac231f95fb8e334da342175e3ca00f6abc" - integrity sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ== +"@smithy/credential-provider-imds@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz" + integrity sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w== dependencies: - "@oclif/core" "^2.15.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + tslib "^2.6.2" -"@oclif/plugin-not-found@^2.3.32": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-2.4.3.tgz#3d24095adb0f3876cb4bcfdfdcb775086cf6d4b5" - integrity sha512-nIyaR4y692frwh7wIHZ3fb+2L6XEecQwRDIb4zbEam0TvaVmBQWZoColQyWA84ljFBPZ8XWiQyTz+ixSwdRkqg== +"@smithy/eventstream-codec@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz" + integrity sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw== dependencies: - "@oclif/core" "^2.15.0" - chalk "^4" - fast-levenshtein "^3.0.0" + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + tslib "^2.6.2" -"@oclif/plugin-version@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@oclif/plugin-version/-/plugin-version-2.0.3.tgz#4a0fb1fc6c8deae670cfb18221c001bb913d25c9" - integrity sha512-Hge6BOHlTwh569avM/S7jPnv9wvp3KW+I+BSjbpTNwzJP894+bj/rNxt4IhbmZxLfscy0DP1l2Lc4vAb13BiTw== +"@smithy/eventstream-serde-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz" + integrity sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw== dependencies: - "@oclif/core" "^3.2.1" + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@oclif/plugin-warn-if-update-available@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.0.2.tgz#76d02069c0d5545b5000660460edb6085272cbcd" - integrity sha512-dUXfRNFtnezS4uqQ+Ap4qb6UP0DWExTvoqghNvvGTIN4PEgfYHogvBORn+rFnDXXE8kgZFuqP4ZQJRP9NyLhOA== +"@smithy/eventstream-serde-config-resolver@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz" + integrity sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA== dependencies: - "@oclif/core" "^3.3.1" - chalk "^5.3.0" - debug "^4.1.0" - http-call "^5.2.2" - lodash.template "^4.5.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@octokit/auth-token@^2.4.4": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== +"@smithy/eventstream-serde-node@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz" + integrity sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA== dependencies: - "@octokit/types" "^6.0.3" + "@smithy/eventstream-serde-universal" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@octokit/core@^3.5.1": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.6.0.tgz#3376cb9f3008d9b3d110370d90e0a1fcd5fe6085" - integrity sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.3" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.5.8": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" - integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== - dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^12.11.0": - version "12.11.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-12.11.0.tgz#da5638d64f2b919bca89ce6602d059f1b52d3ef0" - integrity sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ== - -"@octokit/plugin-paginate-rest@^2.16.8": - version "2.21.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz#7f12532797775640dbb8224da577da7dc210c87e" - integrity sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw== - dependencies: - "@octokit/types" "^6.40.0" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== +"@smithy/eventstream-serde-universal@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz" + integrity sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA== + dependencies: + "@smithy/eventstream-codec" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@octokit/plugin-rest-endpoint-methods@^5.12.0": - version "5.16.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz#7ee8bf586df97dd6868cf68f641354e908c25342" - integrity sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw== +"@smithy/fetch-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz" + integrity sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw== dependencies: - "@octokit/types" "^6.39.0" - deprecation "^2.3.1" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + tslib "^2.6.2" -"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== +"@smithy/hash-blob-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz" + integrity sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg== dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" + "@smithy/chunked-blob-reader" "^2.2.0" + "@smithy/chunked-blob-reader-native" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@octokit/request@^5.6.0", "@octokit/request@^5.6.3": - version "5.6.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.3.tgz#19a022515a5bba965ac06c9d1334514eb50c48b0" - integrity sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A== +"@smithy/hash-node@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz" + integrity sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g== dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" + "@smithy/types" "^2.12.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" -"@octokit/rest@^18.0.6": - version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" - integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== +"@smithy/hash-stream-node@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz" + integrity sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ== dependencies: - "@octokit/core" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.39.0", "@octokit/types@^6.40.0": - version "6.41.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.41.0.tgz#e58ef78d78596d2fb7df9c6259802464b5f84a04" - integrity sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg== +"@smithy/invalid-dependency@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz" + integrity sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q== dependencies: - "@octokit/openapi-types" "^12.11.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" -"@pkgr/utils@^2.3.1": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc" - integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw== +"@smithy/md5-js@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.2.0.tgz" + integrity sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ== dependencies: - cross-spawn "^7.0.3" - fast-glob "^3.3.0" - is-glob "^4.0.3" - open "^9.1.0" - picocolors "^1.0.0" - tslib "^2.6.0" - -"@salesforce/core@^5.3.1", "@salesforce/core@^5.3.12": - version "5.3.12" - resolved "https://registry.yarnpkg.com/@salesforce/core/-/core-5.3.12.tgz#0ff38307b39d9abb8aedaa575ecd6d037bc8eee1" - integrity sha512-A2oOBiGvZRxcdUcz8oA1B0l2nQZApmBQnbUUrsH18isgb9seQLTGuV6YelY4rLZbGsfcp3rzbERMGrHas+OuXQ== - dependencies: - "@salesforce/kit" "^3.0.14" - "@salesforce/schemas" "^1.6.0" - "@salesforce/ts-types" "^2.0.8" - "@types/semver" "^7.5.3" - ajv "^8.12.0" - change-case "^4.1.2" - faye "^1.4.0" - form-data "^4.0.0" - js2xmlparser "^4.0.1" - jsforce "^2.0.0-beta.28" - jsonwebtoken "9.0.2" - jszip "3.10.1" - pino "^8.16.0" - pino-abstract-transport "^1.0.0" - pino-pretty "^10.2.3" - proper-lockfile "^4.1.2" - semver "^7.5.4" - ts-retry-promise "^0.7.1" + "@smithy/types" "^2.12.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" -"@salesforce/kit@^3.0.13", "@salesforce/kit@^3.0.14": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@salesforce/kit/-/kit-3.0.15.tgz#713df3f5767f874c70a2e731c7cb5ba677989559" - integrity sha512-XkA8jsuLvVnyP460dAbU3pBFP2IkmmmsVxMQVifcKKbNWaIBbZBzAfj+vdaQfnvZyflLhsrFT3q2xkb0vHouPg== +"@smithy/middleware-content-length@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz" + integrity sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ== dependencies: - "@salesforce/ts-types" "^2.0.9" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" tslib "^2.6.2" -"@salesforce/schemas@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@salesforce/schemas/-/schemas-1.6.0.tgz#14505ebad2fb2d4f7b14837545d662766d293561" - integrity sha512-SwhDTLucj/GRbPpxlEoDZeqlX22o+G6fiebTXTu1cZKmd1oE0W2L7SlTTgJnWck8bhTeBIgQi9cpD8c2t5ISKA== +"@smithy/middleware-endpoint@^2.5.1": + version "2.5.1" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz" + integrity sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ== + dependencies: + "@smithy/middleware-serde" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + "@smithy/url-parser" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + tslib "^2.6.2" -"@salesforce/sf-plugins-core@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@salesforce/sf-plugins-core/-/sf-plugins-core-4.0.0.tgz#587d8131531b7a53392d73bc4d6d0b0fd75b7e08" - integrity sha512-rg0HeqJ4GsyJjow+Rs7icicm7c3Tp43XmwfVUurN/8mKdtG8vR0d5DmZapKP7+r45Mqtlgpkzp2fSjr5fjadNg== - dependencies: - "@oclif/core" "^3.0.0" - "@salesforce/core" "^5.3.1" - "@salesforce/kit" "^3.0.13" - "@salesforce/ts-types" "^2.0.7" - chalk "^4" - inquirer "^8.2.5" +"@smithy/middleware-retry@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz" + integrity sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA== + dependencies: + "@smithy/node-config-provider" "^2.3.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-retry" "^2.2.0" + tslib "^2.6.2" + uuid "^9.0.1" -"@salesforce/ts-types@^2.0.7", "@salesforce/ts-types@^2.0.8", "@salesforce/ts-types@^2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@salesforce/ts-types/-/ts-types-2.0.9.tgz#66bff7b41720065d6b01631b6f6a3ccca02857c5" - integrity sha512-boUD9jw5vQpTCPCCmK/NFTWjSuuW+lsaxOynkyNXLW+zxOc4GDjhtKc4j0vWZJQvolpafbyS8ZLFHZJvs12gYA== +"@smithy/middleware-serde@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz" + integrity sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q== dependencies: + "@smithy/types" "^2.12.0" tslib "^2.6.2" -"@sigstore/bundle@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-1.1.0.tgz#17f8d813b09348b16eeed66a8cf1c3d6bd3d04f1" - integrity sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog== +"@smithy/middleware-stack@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz" + integrity sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA== dependencies: - "@sigstore/protobuf-specs" "^0.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@sigstore/protobuf-specs@^0.2.0": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz#be9ef4f3c38052c43bd399d3f792c97ff9e2277b" - integrity sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A== +"@smithy/node-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz" + integrity sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg== + dependencies: + "@smithy/property-provider" "^2.2.0" + "@smithy/shared-ini-file-loader" "^2.4.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@sigstore/sign@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-1.0.0.tgz#6b08ebc2f6c92aa5acb07a49784cb6738796f7b4" - integrity sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA== +"@smithy/node-http-handler@^2.5.0": + version "2.5.0" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz" + integrity sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA== dependencies: - "@sigstore/bundle" "^1.1.0" - "@sigstore/protobuf-specs" "^0.2.0" - make-fetch-happen "^11.0.1" + "@smithy/abort-controller" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/querystring-builder" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@sigstore/tuf@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.3.tgz#2a65986772ede996485728f027b0514c0b70b160" - integrity sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg== +"@smithy/property-provider@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz" + integrity sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg== dependencies: - "@sigstore/protobuf-specs" "^0.2.0" - tuf-js "^1.1.7" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@smithy/protocol-http@^3.3.0": + version "3.3.0" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz" + integrity sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@smithy/querystring-builder@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz" + integrity sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A== + dependencies: + "@smithy/types" "^2.12.0" + "@smithy/util-uri-escape" "^2.2.0" + tslib "^2.6.2" -"@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== +"@smithy/querystring-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz" + integrity sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA== dependencies: - type-detect "4.0.8" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== +"@smithy/service-error-classification@^2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz" + integrity sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ== dependencies: - "@sinonjs/commons" "^3.0.0" + "@smithy/types" "^2.12.0" -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== +"@smithy/shared-ini-file-loader@^2.4.0": + version "2.4.0" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz" + integrity sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA== dependencies: - defer-to-connect "^2.0.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@smithy/signature-v4@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz" + integrity sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + "@smithy/types" "^2.12.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-middleware" "^2.2.0" + "@smithy/util-uri-escape" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@smithy/smithy-client@^2.5.1": + version "2.5.1" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz" + integrity sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ== + dependencies: + "@smithy/middleware-endpoint" "^2.5.1" + "@smithy/middleware-stack" "^2.2.0" + "@smithy/protocol-http" "^3.3.0" + "@smithy/types" "^2.12.0" + "@smithy/util-stream" "^2.2.0" + tslib "^2.6.2" -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== +"@smithy/url-parser@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz" + integrity sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ== + dependencies: + "@smithy/querystring-parser" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== +"@smithy/util-base64@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz" + integrity sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@smithy/util-body-length-browser@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz" + integrity sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w== + dependencies: + tslib "^2.6.2" -"@tufjs/canonical-json@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" - integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== +"@smithy/util-body-length-node@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz" + integrity sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw== + dependencies: + tslib "^2.6.2" -"@tufjs/models@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" - integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== +"@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== dependencies: - "@tufjs/canonical-json" "1.0.0" - minimatch "^9.0.0" + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" -"@types/babel__core@^7.1.14": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.3.tgz#d5625a50b6f18244425a1359a858c73d70340778" - integrity sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA== +"@smithy/util-config-provider@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz" + integrity sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ== dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" + tslib "^2.6.2" -"@types/babel__generator@*": - version "7.6.6" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.6.tgz#676f89f67dc8ddaae923f70ebc5f1fa800c031a8" - integrity sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w== +"@smithy/util-defaults-mode-browser@^2.2.1": + version "2.2.1" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz" + integrity sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw== dependencies: - "@babel/types" "^7.0.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz" + integrity sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA== + dependencies: + "@smithy/config-resolver" "^2.2.0" + "@smithy/credential-provider-imds" "^2.3.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/property-provider" "^2.2.0" + "@smithy/smithy-client" "^2.5.1" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@types/babel__template@*": - version "7.4.3" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.3.tgz#db9ac539a2fe05cfe9e168b24f360701bde41f5f" - integrity sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ== +"@smithy/util-endpoints@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz" + integrity sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@smithy/node-config-provider" "^2.3.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.3.tgz#a971aa47441b28ef17884ff945d0551265a2d058" - integrity sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw== +"@smithy/util-hex-encoding@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz" + integrity sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ== dependencies: - "@babel/types" "^7.20.7" + tslib "^2.6.2" -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== +"@smithy/util-middleware@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz" + integrity sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw== dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@types/cli-progress@^3.11.0": - version "3.11.4" - resolved "https://registry.yarnpkg.com/@types/cli-progress/-/cli-progress-3.11.4.tgz#58d9e60bd5fd85a57984890ef9c9d831a0dda896" - integrity sha512-yufTxeeNCZuEIxx2uebK8lpSAsJM4lvzakm/VxzYhDtqhXCzwH9jpn7nPCxzrROuEbLATqhFq4MIPoG0tlrsvw== +"@smithy/util-retry@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz" + integrity sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g== dependencies: - "@types/node" "*" + "@smithy/service-error-classification" "^2.1.5" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@types/expect@^1.20.4": - version "1.20.4" - resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5" - integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg== +"@smithy/util-stream@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz" + integrity sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA== + dependencies: + "@smithy/fetch-http-handler" "^2.5.0" + "@smithy/node-http-handler" "^2.5.0" + "@smithy/types" "^2.12.0" + "@smithy/util-base64" "^2.3.0" + "@smithy/util-buffer-from" "^2.2.0" + "@smithy/util-hex-encoding" "^2.2.0" + "@smithy/util-utf8" "^2.3.0" + tslib "^2.6.2" -"@types/graceful-fs@^4.1.3": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.8.tgz#417e461e4dc79d957dc3107f45fe4973b09c2915" - integrity sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw== +"@smithy/util-uri-escape@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz" + integrity sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA== dependencies: - "@types/node" "*" - -"@types/http-cache-semantics@*": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#a3ff232bf7d5c55f38e4e45693eda2ebb545794d" - integrity sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA== + tslib "^2.6.2" -"@types/inquirer@^9.0.6": - version "9.0.6" - resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-9.0.6.tgz#24e61f8ccdcddc5d34c30034368b8ddd0c101769" - integrity sha512-1Go1AAP/yOy3Pth5Xf1DC3nfZ03cJLCPx6E2YnSN/5I3w1jHBVH4170DkZ+JxfmA7c9kL9+bf9z3FRGa4kNAqg== +"@smithy/util-utf8@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== dependencies: - "@types/through" "*" - rxjs "^7.2.0" + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#fdfdd69fa16d530047d9963635bd77c71a08c068" - integrity sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ== +"@smithy/util-waiter@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.2.0.tgz" + integrity sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA== + dependencies: + "@smithy/abort-controller" "^2.2.0" + "@smithy/types" "^2.12.0" + tslib "^2.6.2" -"@types/istanbul-lib-report@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz#394798d5f727402eb5ec99eb9618ffcd2b7645a1" - integrity sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w== +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== dependencies: - "@types/istanbul-lib-coverage" "*" + defer-to-connect "^2.0.1" -"@types/istanbul-reports@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz#0313e2608e6d6955d195f55361ddeebd4b74c6e7" - integrity sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg== +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/chai@^4.3.14": + version "4.3.16" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz" + integrity sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ== + +"@types/cli-progress@^3.11.5": + version "3.11.5" + resolved "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.5.tgz" + integrity sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g== dependencies: - "@types/istanbul-lib-report" "*" + "@types/node" "*" -"@types/jest@^29.5.6": - version "29.5.6" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.6.tgz#f4cf7ef1b5b0bfc1aa744e41b24d9cc52533130b" - integrity sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w== +"@types/glob@~7.2.0": + version "7.2.0" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== -"@types/json-schema@^7.0.12": - version "7.0.14" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1" - integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== +"@types/lodash.difference@^4.5.9": + version "4.5.9" + resolved "https://registry.npmjs.org/@types/lodash.difference/-/lodash.difference-4.5.9.tgz" + integrity sha512-MNlajcjtwzLpXk+cw38UkBvEXJNEPhULgS8A4EHwtUwT7f7yFH/SFKD0iw5Rfilwh60yJIgFo0vsMr7xsa5+aw== dependencies: - "@types/node" "*" + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.1" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz" + integrity sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/mocha@^10.0.6": + version "10.0.6" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz" + integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== -"@types/minimatch@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" -"@types/node@*", "@types/node@^20.8.9": - version "20.8.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.9.tgz#646390b4fab269abce59c308fc286dcd818a2b08" - integrity sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg== +"@types/node@*", "@types/node@^20.10.7", "@types/node@^20.12.11", "@types/node@^20.12.7": + version "20.12.11" + resolved "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz" + integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw== dependencies: undici-types "~5.26.4" -"@types/node@^12.19.9": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== +"@types/node@20.5.1": + version "20.5.1" + resolved "https://registry.npmjs.org/@types/node/-/node-20.5.1.tgz" + integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== -"@types/node@^15.6.2": - version "15.14.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" - integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== +"@types/node@^18.15.3", "@types/node@^18.19.32": + version "18.19.33" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz" + integrity sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A== + dependencies: + undici-types "~5.26.4" "@types/normalize-package-data@^2.4.0": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz#291c243e4b94dbfbc0c0ee26b7666f1d5c030e2c" - integrity sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg== + version "2.4.4" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/semver@^7.5.0": + version "7.5.8" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== -"@types/responselike@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.2.tgz#8de1b0477fd7c12df77e50832fa51701a8414bd6" - integrity sha512-/4YQT5Kp6HxUDb4yhRkm0bJ7TbjvTddqX7PZ5hz6qV3pxSo72f/6YPRo+Mu2DU307tm9IioO69l7uAwn5XNcFA== +"@types/shelljs@^0.8.15": + version "0.8.15" + resolved "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.15.tgz" + integrity sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q== dependencies: + "@types/glob" "~7.2.0" "@types/node" "*" -"@types/semver@^7.5.0", "@types/semver@^7.5.3": - version "7.5.4" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff" - integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ== - "@types/sinon@^10.0.20": version "10.0.20" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.20.tgz#f1585debf4c0d99f9938f4111e5479fb74865146" + resolved "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.20.tgz" integrity sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg== dependencies: "@types/sinonjs__fake-timers" "*" "@types/sinonjs__fake-timers@*": - version "8.1.4" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.4.tgz#663bb44e01f6bae4eaae3719d8b037411217c992" - integrity sha512-GDV68H0mBSN449sa5HEj51E0wfpVQb8xNSMzxf/PrypMFcLTMwJMOM/cgXiv71Mq5drkOQmUGvL1okOZcu6RrQ== - -"@types/stack-utils@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.2.tgz#01284dde9ef4e6d8cef6422798d9a3ad18a66f8b" - integrity sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw== - -"@types/through@*": - version "0.0.32" - resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.32.tgz#1c4c8a29140221c1b29c2874dea1f4a1f2092c6a" - integrity sha512-7XsfXIsjdfJM2wFDRAtEWp3zb2aVPk5QeyZxGlVK57q4u26DczMHhJmlhr0Jqv0THwxam/L8REXkj8M2I/lcvw== - dependencies: - "@types/node" "*" - -"@types/vinyl@^2.0.4": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.9.tgz#5686de441312881498665744c1dcdffe80721ea5" - integrity sha512-KCr4aTEUkzSF89qw09e2oxsC/RXXT3K5ZPv4gvj3XTiWVrxNoi7WrqNTahNE/Hul5C9z3B8w+yWNTQgua12oag== - dependencies: - "@types/expect" "^1.20.4" - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.2.tgz#7bd04c5da378496ef1695a1008bf8f71847a8b8b" - integrity sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw== + version "8.1.5" + resolved "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz" + integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== -"@types/yargs@^17.0.8": - version "17.0.29" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.29.tgz#06aabc72497b798c643c812a8b561537fea760cf" - integrity sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA== - dependencies: - "@types/yargs-parser" "*" +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== -"@typescript-eslint/eslint-plugin@^6.9.0": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.0.tgz#fdb6f3821c0167e3356e9d89c80e8230b2e401f4" - integrity sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA== +"@typescript-eslint/eslint-plugin@^6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz" + integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.9.0" - "@typescript-eslint/type-utils" "6.9.0" - "@typescript-eslint/utils" "6.9.0" - "@typescript-eslint/visitor-keys" "6.9.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/type-utils" "6.21.0" + "@typescript-eslint/utils" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -1468,123 +2237,127 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^6.9.0": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.9.0.tgz#2b402cadeadd3f211c25820e5433413347b27391" - integrity sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw== +"@typescript-eslint/parser@^6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== dependencies: - "@typescript-eslint/scope-manager" "6.9.0" - "@typescript-eslint/types" "6.9.0" - "@typescript-eslint/typescript-estree" "6.9.0" - "@typescript-eslint/visitor-keys" "6.9.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.9.0": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.9.0.tgz#2626e9a7fe0e004c3e25f3b986c75f584431134e" - integrity sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "6.9.0" - "@typescript-eslint/visitor-keys" "6.9.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" -"@typescript-eslint/type-utils@6.9.0": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.9.0.tgz#23923c8c9677c2ad41457cf8e10a5f2946be1b04" - integrity sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ== +"@typescript-eslint/type-utils@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz" + integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== dependencies: - "@typescript-eslint/typescript-estree" "6.9.0" - "@typescript-eslint/utils" "6.9.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/utils" "6.21.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.9.0": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.9.0.tgz#86a0cbe7ac46c0761429f928467ff3d92f841098" - integrity sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== -"@typescript-eslint/typescript-estree@6.9.0": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.0.tgz#d0601b245be873d8fe49f3737f93f8662c8693d4" - integrity sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "6.9.0" - "@typescript-eslint/visitor-keys" "6.9.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" + minimatch "9.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.9.0", "@typescript-eslint/utils@^6.7.5": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.9.0.tgz#5bdac8604fca4823f090e4268e681c84d3597c9f" - integrity sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ== +"@typescript-eslint/utils@6.21.0", "@typescript-eslint/utils@^6.17.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz" + integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.9.0" - "@typescript-eslint/types" "6.9.0" - "@typescript-eslint/typescript-estree" "6.9.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.9.0": - version "6.9.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.0.tgz#cc69421c10c4ac997ed34f453027245988164e80" - integrity sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "6.9.0" + "@typescript-eslint/types" "6.21.0" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -abbrev@1, abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.2" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^8.4.1, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + version "8.11.3" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -agent-base@6, agent-base@^6.0.2: +agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -agentkeepalive@^4.1.3, agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== +agent-base@^7.0.2: + version "7.1.1" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== dependencies: - humanize-ms "^1.2.1" + debug "^4.3.4" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -1592,7 +2365,7 @@ aggregate-error@^3.0.0: ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1600,163 +2373,164 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.12.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== +ajv@^8.11.0, ajv@^8.13.0: + version "8.13.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz" + integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" + uri-js "^4.4.1" -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.3.2: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" -ansi-escapes@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" - integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== - dependencies: - type-fest "^1.0.2" +ansi-escapes@^6.2.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz" + integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-sequence-parser@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz" + integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== + ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0, ansi-styles@^6.1.0: +ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansicolors@~0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== -anymatch@^3.0.3: +anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" -"aproba@^1.0.3 || ^2.0.0": +append-transform@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + resolved "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== are-docs-informative@^0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" + resolved "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz" integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bind "^1.0.5" + is-array-buffer "^3.0.4" -array-differ@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" - integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== +array-from@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz" + integrity sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg== -array-includes@^3.1.6, array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-includes@^3.1.7: + version "3.1.8" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + version "1.2.5" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: +array.prototype.flat@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== dependencies: call-bind "^1.0.2" @@ -1764,9 +2538,9 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== dependencies: call-bind "^1.0.2" @@ -1774,216 +2548,97 @@ array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.tosorted@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz#620eff7442503d66c799d95503f82b475745cefd" - integrity sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -asap@*, asap@^2.0.0: +asap@*: version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async-retry@^1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + resolved "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== dependencies: retry "0.13.1" async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynciterator.prototype@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" - integrity sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg== - dependencies: - has-symbols "^1.0.3" + version "3.2.5" + resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== atomic-sleep@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sdk@^2.1231.0: - version "2.1481.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1481.0.tgz#2ecfbb9b404feaf345c0fd65f3f2541909b7ca92" - integrity sha512-frg2IDi5Ozw6Vym0Y7WNyGUpgGalhmz41oAJVVvNl9AfKFLMw8AU8RfUvKt16snQ1yq847wuF14O73eFIKuIpw== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.16.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - util "^0.12.4" - uuid "8.0.0" - xml2js "0.5.0" - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - 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" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - 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" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" + possible-typed-array-names "^1.0.0" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2, base64-js@^1.3.1: +base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64url@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + resolved "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -big-integer@^1.6.44: - version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" - integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== - -bin-links@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" - integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== - dependencies: - cmd-shim "^5.0.0" - mkdirp-infer-owner "^2.0.0" - npm-normalize-package-bin "^2.0.0" - read-cmd-shim "^3.0.0" - rimraf "^3.0.0" - write-file-atomic "^4.0.0" - -binaryextensions@^4.15.0, binaryextensions@^4.16.0: - version "4.18.0" - resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-4.18.0.tgz#22aeada2d14de062c60e8ca59a504a5636a76ceb" - integrity sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bplist-parser@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== - dependencies: - big-integer "^1.6.44" +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1991,72 +2646,46 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" -braces@^3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browserslist@^4.21.9: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== +browserslist@^4.22.2, browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== dependencies: - node-int64 "^0.4.0" + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" buffer-equal-constant-time@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -2064,152 +2693,88 @@ buffer@^6.0.3: builtin-modules@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== dependencies: - semver "^7.0.0" + "@types/http-cache-semantics" "^4.0.2" + 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" -bundle-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" - integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== dependencies: - run-applescript "^5.0.0" + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" -cacache@^15.0.3, cacache@^15.0.5, cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacache@^16.1.0: - version "16.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" - integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== - 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" - -cacache@^17.0.0: - version "17.1.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^7.0.3" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - 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" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase@^5.3.1: +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: +camelcase@^6.0.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001541: - version "1.0.30001554" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001554.tgz#ba80d88dff9acbc0cd4b7535fc30e0191c5e2e2a" - integrity sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ== +caniuse-lite@^1.0.30001587: + version "1.0.30001617" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz" + integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA== capital-case@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + resolved "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz" integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== dependencies: no-case "^3.0.4" @@ -2218,37 +2783,50 @@ capital-case@^1.0.4: cardinal@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + resolved "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz" integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== dependencies: ansicolors "~0.3.2" redeyed "~2.1.0" -chalk@5.3.0, chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== +chai@^4.3.10: + version "4.4.1" + resolved "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: +chalk@^4, chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.0, chalk@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + change-case@^4, change-case@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz" integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== dependencies: camel-case "^4.1.2" @@ -2264,247 +2842,209 @@ change-case@^4, change-case@^4.1.2: snake-case "^3.0.4" tslib "^2.0.3" -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" -ci-info@^3.2.0, ci-info@^3.8.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + optionalDependencies: + fsevents "~2.3.2" -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== +ci-info@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz" + integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== clean-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + resolved "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz" integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== dependencies: escape-string-regexp "^1.0.5" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== clean-stack@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz" integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== dependencies: escape-string-regexp "4.0.0" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - cli-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz" integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== dependencies: restore-cursor "^4.0.0" cli-progress@^3.12.0: version "3.12.0" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.12.0.tgz#807ee14b66bcc086258e444ad0f19e7d42577942" + resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== dependencies: string-width "^4.2.3" -cli-spinners@^2.5.0: - version "2.9.1" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.1.tgz#9c0b9dad69a6d47cbb4333c14319b060ed395a35" - integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== -cli-table@^0.3.1: - version "0.3.11" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" - integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== dependencies: - colors "1.0.3" + slice-ansi "^5.0.0" + string-width "^7.0.0" -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag== - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" - integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== - dependencies: - mkdirp-infer-owner "^2.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" colorette@^2.0.20, colorette@^2.0.7: version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw== - combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== - -commander@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" - integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== - -commander@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -comment-parser@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.0.tgz#0f8c560f59698193854f12884c20c0e39a26d32c" - integrity sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw== +commander@^12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz" + integrity sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA== -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== +comment-parser@1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - constant-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + resolved "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz" integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== dependencies: no-case "^3.0.4" @@ -2513,50 +3053,78 @@ constant-case@^3.0.4: content-type@^1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== +conventional-changelog-angular@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz" + integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-conventionalcommits@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz" + integrity sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw== + dependencies: + compare-func "^2.0.0" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-pure@^3.30.2: - version "3.33.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.1.tgz#7f27dd239da8eb97dbea30120071be8e5565cb0e" - integrity sha512-wCXGbLjnsP10PlK/thHSQlOLlLKNEkaWbTzVvHHZ79fZNeN1gUmw2gBlpItxPv/pvqldevEXFh/d5stdNvl6EQ== - -core-js@^3.6.4: - version "3.33.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.33.1.tgz#ef3766cfa382482d0a2c2bc5cb52c6d88805da52" - integrity sha512-qVSq3s+d4+GsqN0teRCJtM6tdEEXyWxjzbhVrCHmBS5ZTM0FS2MOS0D13dUXAWDUN6a+lHI/N1hF9Ytz6iLl9Q== +core-js-compat@^3.34.0: + version "3.37.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz" + integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== + dependencies: + browserslist "^4.23.0" core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== +cosmiconfig-typescript-loader@^4.0.0: + version "4.4.0" + resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz" + integrity sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw== + +cosmiconfig@^8.0.0, cosmiconfig@^8.3.6: + version "8.3.6" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -2565,124 +3133,133 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: csprng@*: version "0.1.2" - resolved "https://registry.yarnpkg.com/csprng/-/csprng-0.1.2.tgz#4bc68f12fa368d252a59841cbaca974b18ab45e2" + resolved "https://registry.npmjs.org/csprng/-/csprng-0.1.2.tgz" integrity sha512-D3WAbvvgUVIqSxUfdvLeGjuotsB32bvfVPd+AaaTWMtyUeC9zgCnw5xs94no89yFLVsafvY9dMZEhTwsY/ZecA== dependencies: sequin "*" -csv-parse@^4.8.2: - version "4.16.3" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" - integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== +csv-parse@^5.5.2: + version "5.5.5" + resolved "https://registry.npmjs.org/csv-parse/-/csv-parse-5.5.5.tgz" + integrity sha512-erCk7tyU3yLWAhk6wvKxnyPtftuy/6Ak622gOO7BCJ05+TYffnPCJF905wmOQm+BpkX54OdAl8pveJwUdpnCXQ== -csv-stringify@^5.3.4: - version "5.6.5" - resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" - integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== +csv-stringify@^6.4.4: + version "6.4.6" + resolved "https://registry.npmjs.org/csv-stringify/-/csv-stringify-6.4.6.tgz" + integrity sha512-h2V2XZ3uOTLilF5dPIptgUfN/o2ia/80Ie0Lly18LAnw5s8Eb7kt8rfxSUy24AztJZas9f6DPZpVlzDUtFt/ag== dargs@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + resolved "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz" integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== -dateformat@^4.5.0, dateformat@^4.6.3: +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +dateformat@^4.6.3: version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz" integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "^2.1.1" + ms "^2.1.1" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" -debuglog@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-browser-id@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" - integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== - dependencies: - bplist-parser "^0.2.0" - untildify "^4.0.0" - -default-browser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" - integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== - dependencies: - bundle-name "^3.0.0" - default-browser-id "^3.0.0" - execa "^7.1.1" - titleize "^3.0.0" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== +default-require-extensions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz" + integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== dependencies: - clone "^1.0.2" + strip-bom "^4.0.0" -defer-to-connect@^2.0.0: +defer-to-connect@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -2691,269 +3268,318 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0, de delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +detect-indent@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz" + integrity sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g== -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-newline@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz" + integrity sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog== -dezalgo@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" +diff@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== +diff@^3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== -diff@^4.0.1: +diff@^4.0.1, diff@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" tslib "^2.0.3" +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ecdsa-sig-formatter@1.0.11: version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== dependencies: safe-buffer "^5.0.1" -ejs@^3.1.8, ejs@^3.1.9: +ejs@^3.1.10: version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz" integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.535: - version "1.4.567" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.567.tgz#c92e8fbc2bd15df3068d92571733a218a5413add" - integrity sha512-8KR114CAYQ4/r5EIEsOmOMqQ9j0MRbJZR3aXD/KFA8RuKzyoUB4XrUCg+l8RUGqTVQgKNIgTpjaG8YHRPAbX2w== +electron-to-chromium@^1.4.668: + version "1.4.763" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.763.tgz" + integrity sha512-k4J8NrtJ9QrvHLRo8Q18OncqBCB7tIUyqxRcJnlonQ0ioHKYB988GcDFF3ZePmnb8eHEopDs/wPHR/iGAFgoUQ== -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== +emoji-regex@^10.3.0: + version "10.3.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz" + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== +entities@^4.2.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -error@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/error/-/error-10.4.0.tgz#6fcf0fd64bceb1e750f8ed9a3dd880f00e46a487" - integrity sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw== - -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" - is-negative-zero "^2.0.2" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.15" -es-iterator-helpers@^1.0.12: - version "1.0.15" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz#bd81d275ac766431d19305923707c3efd9f1ae40" - integrity sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: - asynciterator.prototype "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.1" - es-abstract "^1.22.1" - es-set-tostringtag "^2.0.1" - function-bind "^1.1.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - iterator.prototype "^1.1.2" - safe-array-concat "^1.0.1" + get-intrinsic "^1.2.4" -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1, escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== -eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" - integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== +eslint-config-salesforce-license@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eslint-config-salesforce-license/-/eslint-config-salesforce-license-0.2.0.tgz" + integrity sha512-DJdBvgj82Erum82YMe+YvG/o6ukna3UA++lRl0HSTldj0VlBl3Q8hzCp97nRXZHra6JH1I912yievZzklXDw6w== + +eslint-config-salesforce-typescript@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/eslint-config-salesforce-typescript/-/eslint-config-salesforce-typescript-3.3.0.tgz" + integrity sha512-83+zp2Y2h9oz9D3UksjNGCw+xWD7ylIiAJZ58vUbBD10l8FRUMNyn+RDCKn0xCQz7xed5/LcmgUE4T7roe+HBw== + dependencies: + "@typescript-eslint/eslint-plugin" "^6.21.0" + "@typescript-eslint/parser" "^6.21.0" + eslint "^8.56.0" + eslint-config-prettier "^9.1.0" + eslint-config-salesforce "^2.2.0" + eslint-config-salesforce-license "^0.2.0" + eslint-plugin-header "^3.1.1" + eslint-plugin-import "^2.29.1" + eslint-plugin-jsdoc "^46.10.1" + eslint-plugin-unicorn "^50.0.1" + +eslint-config-salesforce@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/eslint-config-salesforce/-/eslint-config-salesforce-2.2.0.tgz" + integrity sha512-0zUEFJ2nNpMvVO3MgKEDUTGtaFZjL3xEIErr5h+BOft+OhGoIvZBNPnBBu12lvv29ylqIAQz5SwoVCCUzBhyPQ== eslint-import-resolver-node@^0.3.9: version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== dependencies: debug "^3.2.7" @@ -2961,16 +3587,21 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + version "2.8.1" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== dependencies: debug "^3.2.7" -eslint-plugin-import@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" - integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== +eslint-plugin-header@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz" + integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg== + +eslint-plugin-import@^2.29.1: + version "2.29.1" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== dependencies: array-includes "^3.1.7" array.prototype.findlastindex "^1.2.3" @@ -2988,81 +3619,46 @@ eslint-plugin-import@^2.29.0: object.groupby "^1.0.1" object.values "^1.1.7" semver "^6.3.1" - tsconfig-paths "^3.14.2" + tsconfig-paths "^3.15.0" -eslint-plugin-jsdoc@^46.8.2: - version "46.8.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.8.2.tgz#3e6b1c93e91e38fe01874d45da121b56393c54a5" - integrity sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ== +eslint-plugin-jsdoc@^46.10.1: + version "46.10.1" + resolved "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz" + integrity sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag== dependencies: - "@es-joy/jsdoccomment" "~0.40.1" + "@es-joy/jsdoccomment" "~0.41.0" are-docs-informative "^0.0.2" - comment-parser "1.4.0" + comment-parser "1.4.1" debug "^4.3.4" escape-string-regexp "^4.0.0" esquery "^1.5.0" is-builtin-module "^3.2.1" semver "^7.5.4" - spdx-expression-parse "^3.0.1" - -eslint-plugin-perfectionist@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-2.2.0.tgz#a1b1f1407ce9bc20a4f0e2b8113fb84e5b9dfb9f" - integrity sha512-/nG2Uurd6AY7CI6zlgjHPOoiPY8B7EYMUWdNb5w+EzyauYiQjjD5lQwAI1FlkBbCCFFZw/CdZIPQhXumYoiyaw== - dependencies: - "@typescript-eslint/utils" "^6.7.5" - minimatch "^9.0.3" - natural-compare-lite "^1.4.0" - -eslint-plugin-prefer-arrow@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prefer-arrow/-/eslint-plugin-prefer-arrow-1.2.3.tgz#e7fbb3fa4cd84ff1015b9c51ad86550e55041041" - integrity sha512-J9I5PKCOJretVuiZRGvPQxCbllxGAV/viI20JO3LYblAodofBxyMnZAJ+WGeClHgANnSJberTNoFWWjrWKBuXQ== - -eslint-plugin-prettier@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515" - integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.8.5" + spdx-expression-parse "^4.0.0" -eslint-plugin-react@^7.33.2: - version "7.33.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" - integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== +eslint-plugin-sf-plugin@^1.18.3: + version "1.18.3" + resolved "https://registry.npmjs.org/eslint-plugin-sf-plugin/-/eslint-plugin-sf-plugin-1.18.3.tgz" + integrity sha512-Cl2ZpraMOwOm/kDn2hlud7mkDH3OrImueAyX8nkX1LA0kFma9/yokdxabWE/uaPpWPUlADeqgKWwgTjgf75SYQ== dependencies: - array-includes "^3.1.6" - array.prototype.flatmap "^1.3.1" - array.prototype.tosorted "^1.1.1" - doctrine "^2.1.0" - es-iterator-helpers "^1.0.12" - 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.1" - string.prototype.matchall "^4.0.8" + "@salesforce/core" "^7.3.1" + "@typescript-eslint/utils" "^6.17.0" -eslint-plugin-unicorn@^48.0.1: - version "48.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz#a6573bc1687ae8db7121fdd8f92394b6549a6959" - integrity sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw== +eslint-plugin-unicorn@^50.0.1: + version "50.0.1" + resolved "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz" + integrity sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA== dependencies: - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" "@eslint-community/eslint-utils" "^4.4.0" - ci-info "^3.8.0" + "@eslint/eslintrc" "^2.1.4" + ci-info "^4.0.0" clean-regexp "^1.0.0" + core-js-compat "^3.34.0" esquery "^1.5.0" indent-string "^4.0.0" is-builtin-module "^3.2.1" jsesc "^3.0.2" - lodash "^4.17.21" pluralize "^8.0.0" read-pkg-up "^7.0.1" regexp-tree "^0.1.27" @@ -3072,7 +3668,7 @@ eslint-plugin-unicorn@^48.0.1: eslint-scope@^7.2.2: version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" @@ -3080,19 +3676,19 @@ eslint-scope@^7.2.2: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.52.0: - version "8.52.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.52.0.tgz#d0cd4a1fac06427a61ef9242b9353f36ea7062fc" - integrity sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg== +eslint@^8.56.0, eslint@^8.57.0: + version "8.57.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.52.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -3129,7 +3725,7 @@ eslint@^8.52.0: espree@^9.6.0, espree@^9.6.1: version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -3138,76 +3734,66 @@ espree@^9.6.0, espree@^9.6.1: esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2, esquery@^1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - eventemitter3@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== - events@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== +execa@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" + 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 "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" - strip-final-newline "^3.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" -execa@^5.0.0, execa@^5.1.1: +execa@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -3220,70 +3806,25 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" - integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== - 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" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" +extend@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== fast-copy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" - integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== + version "3.0.2" + resolved "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz" + integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -3291,55 +3832,62 @@ fast-glob@^3.2.9, fast-glob@^3.3.0: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-levenshtein@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz" integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== dependencies: fastest-levenshtein "^1.0.7" fast-redact@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== + version "3.5.0" + resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== fast-safe-stringify@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + fastest-levenshtein@^1.0.7: version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" faye-websocket@>=0.9.1: version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" faye@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/faye/-/faye-1.4.0.tgz#01d3d26ed5642c1cb203eed358afb1c1444b8669" + resolved "https://registry.npmjs.org/faye/-/faye-1.4.0.tgz" integrity sha512-kRrIg4be8VNYhycS2PY//hpBJSzZPr/DBbcy9VWelhZMW3KhyLkQR0HL0k0MNpmVoNFF4EdfMFkNAWjTP65g6w== dependencies: asap "*" @@ -3349,158 +3897,163 @@ faye@^1.4.0: tough-cookie "*" tunnel-agent "*" -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -figures@^3.0.0: +figures@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" filelist@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +find-cache-dir@^3.2.0: + version "3.3.2" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" -find-up@^5.0.0: +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" -find-yarn-workspace-root2@1.2.16: - version "1.2.16" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" - integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: - micromatch "^4.0.2" - pkg-dir "^4.2.0" + locate-path "^5.0.0" + path-exists "^4.0.0" find-yarn-workspace-root@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz#f47fb8d239c900eb78179aa81b66673eac88f7bd" + resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== dependencies: micromatch "^4.0.2" -first-chunk-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" - integrity sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg== - dependencies: - readable-stream "^2.0.2" - flat-cache@^3.0.4: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b" - integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q== + version "3.2.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + foreground-child@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" +form-data-encoder@^2.1.2: + 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== + form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" mime-types "^2.1.12" +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + +fs-extra@^11.0.0: + version "11.2.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1, fs-extra@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: graceful-fs "^4.2.0" jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^2.0.0, fs-minipass@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.3.2: +fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== dependencies: call-bind "^1.0.2" @@ -3510,53 +4063,46 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - 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" +gaxios@^6.0.0: + version "6.5.0" + resolved "https://registry.npmjs.org/gaxios/-/gaxios-6.5.0.tgz" + integrity sha512-R9QGdv8j4/dlNoQbX3hSaK/S0rkMijqjVvW3YM06CoBdbU/VdKd159j4hePpng0KuE6Lh6JJ7UdmVGJZFcAG1w== + dependencies: + extend "^3.0.2" + https-proxy-agent "^7.0.1" + is-stream "^2.0.0" + node-fetch "^2.6.9" + uuid "^9.0.1" gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-east-asian-width@^1.0.0: + version "1.2.0" + resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz" + integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -3564,74 +4110,95 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@ get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^5.1.0: +get-stdin@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz" + integrity sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA== + +get-stream@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" -github-slugger@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== +git-hooks-list@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.1.0.tgz" + integrity sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA== -github-username@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/github-username/-/github-username-6.0.0.tgz#d543eced7295102996cd8e4e19050ebdcbe60658" - integrity sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ== +git-raw-commits@^2.0.11: + version "2.0.11" + resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== dependencies: - "@octokit/rest" "^18.0.6" + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +github-slugger@^2: + version "2.0.0" + resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz" + integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw== -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" -glob@^10.2.2: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== +glob@8.1.0, glob@^8.0.3: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^10.3.10: + version "10.3.14" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.14.tgz" + integrity sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" + jackspeak "^2.3.6" minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + minipass "^7.0.4" + path-scurry "^1.11.0" glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -3641,39 +4208,36 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.0, glob@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" + ini "^1.3.4" globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" -globby@^11.0.1, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -3683,144 +4247,182 @@ globby@^11.0.1, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globby@^13.1.2: + version "13.2.2" + resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.3.0" + ignore "^5.2.4" + merge2 "^1.4.1" + slash "^4.0.0" + +globby@^14.0.1: + version "14.0.1" + resolved "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz" + integrity sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.2" + ignore "^5.2.4" + path-type "^5.0.0" + slash "^5.1.0" + unicorn-magic "^0.1.0" + gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" -got@^11: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" +got@^13: + version "13.0.0" + resolved "https://registry.npmjs.org/got/-/got-13.0.0.tgz" + integrity sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== + dependencies: + "@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" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.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" -graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.15, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -grouped-queue@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-2.0.0.tgz#a2c6713f2171e45db2c300a3a9d7c119d694dac8" - integrity sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw== +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" +he@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + header-case@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + resolved "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz" integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== dependencies: capital-case "^1.0.4" tslib "^2.0.3" -help-me@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" - integrity sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA== - dependencies: - glob "^8.0.0" - readable-stream "^3.6.0" +help-me@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz" + integrity sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg== hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" -hosted-git-info@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" - integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== +hosted-git-info@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== dependencies: - lru-cache "^7.5.1" + lru-cache "^10.0.1" html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: +htmlparser2@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.1.0" + entities "^4.5.0" + +http-cache-semantics@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-call@^5.2.2: version "5.3.0" - resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" + resolved "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz" integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== dependencies: content-type "^1.0.4" @@ -3832,265 +4434,153 @@ http-call@^5.2.2: http-parser-js@>=0.5.1: version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== dependencies: quick-lru "^5.1.1" - resolve-alpn "^1.0.0" + resolve-alpn "^1.2.0" https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" +https-proxy-agent@^7.0.1: + version "7.0.4" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -husky@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" - integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== +husky@^7.0.4: + version "7.0.4" + resolved "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== hyperlinker@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" + resolved "https://registry.npmjs.org/hyperlinker/-/hyperlinker-1.0.0.tgz" integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ== -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: +ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-walk@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-4.0.1.tgz#fc840e8346cf88a3a9380c5b17933cd8f4d39fa3" - integrity sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw== - dependencies: - minimatch "^3.0.4" - -ignore-walk@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb" - integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== - dependencies: - minimatch "^9.0.0" - -ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.0: + version "5.3.1" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immediate@~3.0.5: version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -inquirer@^8.0.0, inquirer@^8.2.5: - version "8.2.6" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.6.tgz#733b74888195d8d400a67ac332011b5fae5ea562" - integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^6.0.1" +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" interpret@^1.0.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -ip@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== dependencies: call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + get-intrinsic "^1.2.1" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -4098,138 +4588,116 @@ is-boolean-object@^1.1.0: is-builtin-module@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz" integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== dependencies: builtin-modules "^3.3.0" is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: hasown "^2.0.0" -is-date-object@^1.0.1, is-date-object@^1.0.5: +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" is-docker@^2.0.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-fullwidth-code-point@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.10, is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== dependencies: - has-tostringtag "^1.0.0" + get-east-asian-width "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-map@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^2.0.0: +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== +is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" @@ -4237,735 +4705,300 @@ is-regex@^1.1.4: is-retry-allowed@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== -is-scoped@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-2.1.0.tgz#fef0713772658bdf5bee418608267ddae6d3566d" - integrity sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ== - dependencies: - scoped-regex "^2.0.0" - -is-set@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isbinaryfile@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" - integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== - -isbinaryfile@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" - integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - 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" - -istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.8.7" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" - integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -jest-chain@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/jest-chain/-/jest-chain-1.1.6.tgz#24637e9d5136b6c15aa3c2e05c3e55a816523108" - integrity sha512-eIkGzVBGQ1VuEErDceMYAET53pcwYVVTXtJEbY+x60Dwi+2M2uOt4rhKAej+wfVOAlE4G0plI9mstmv6GBtJjw== - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.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.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.0.0, jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" -jest-extended@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/jest-extended/-/jest-extended-4.0.2.tgz#d23b52e687cedf66694e6b2d77f65e211e99e021" - integrity sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog== +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== dependencies: - jest-diff "^29.0.0" - jest-get-type "^29.0.0" + which-typed-array "^1.1.14" -jest-get-type@^29.0.0, jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@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.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -jest-junit@^16.0.0: - version "16.0.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-16.0.0.tgz#d838e8c561cf9fdd7eb54f63020777eee4136785" - integrity sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: - mkdirp "^1.0.4" - strip-ansi "^6.0.1" - uuid "^8.3.2" - xml "^1.0.1" + call-bind "^1.0.2" -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" + is-docker "^2.0.0" -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@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.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" + append-transform "^2.0.0" -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - 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/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== +istanbul-lib-processinfo@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz" + integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" + archy "^1.0.0" + cross-spawn "^7.0.3" + istanbul-lib-coverage "^3.2.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^8.3.2" -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== +istanbul-reports@^3.0.2: + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== +jackspeak@^2.3.6: + version "2.3.6" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" -jmespath@0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" - integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== +jake@^10.8.5: + version "10.9.1" + resolved "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz" + integrity sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" joycon@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.14.1: +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.13.1, js-yaml@^3.14.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - js2xmlparser@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-4.0.2.tgz#2a1fdf01e90585ef2ae872a01bc169c6a8d5e60a" + resolved "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz" integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== dependencies: xmlcreate "^2.0.4" jsdoc-type-pratt-parser@~4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz#136f0571a99c184d84ec84662c45c29ceff71114" + resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz" integrity sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -jsforce@^2.0.0-beta.28: - version "2.0.0-beta.28" - resolved "https://registry.yarnpkg.com/jsforce/-/jsforce-2.0.0-beta.28.tgz#5fd8d9b8e5efc798698793b147e00371f3d74e8f" - integrity sha512-tTmKRhr4yWNinhmurY/tiiltLFQq9RQ+gpYAt3wjFdCGjzd49/wqYQIFw4SsI3+iLjxXnc0uTgGwdAkDjxDWnA== - dependencies: - "@babel/runtime" "^7.12.5" - "@babel/runtime-corejs3" "^7.12.5" - "@types/node" "^12.19.9" - abort-controller "^3.0.0" - base64url "^3.0.1" - commander "^4.0.1" - core-js "^3.6.4" - csv-parse "^4.8.2" - csv-stringify "^5.3.4" - faye "^1.4.0" - form-data "^4.0.0" - fs-extra "^8.1.0" - https-proxy-agent "^5.0.0" - inquirer "^7.0.0" - multistream "^3.1.0" - node-fetch "^2.6.1" - open "^7.0.0" - regenerator-runtime "^0.13.3" - strip-ansi "^6.0.0" - xml2js "^0.5.0" - json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-parse-even-better-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" - integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== - json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - json5@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonc-parser@^3.0.0, jsonc-parser@^3.2.0: + version "3.2.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz" + integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.3.1: +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsonwebtoken@9.0.2: version "9.0.2" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== dependencies: jws "^3.2.2" @@ -4979,19 +5012,9 @@ jsonwebtoken@9.0.2: ms "^2.1.1" semver "^7.5.4" -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -jszip@3.10.1: +jszip@3.10.1, jszip@^3.10.1: version "3.10.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz" integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== dependencies: lie "~3.3.0" @@ -4999,19 +5022,24 @@ jszip@3.10.1: readable-stream "~2.3.6" setimmediate "^1.0.5" -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^5.0.1: +just-diff@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz" integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== +just-extend@^4.0.2: + version "4.2.1" + resolved "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz" + integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== + +just-extend@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz" + integrity sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw== + jwa@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== dependencies: buffer-equal-constant-time "1.0.1" @@ -5020,32 +5048,27 @@ jwa@^1.4.1: jws@^3.2.2: version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== dependencies: jwa "^1.4.1" safe-buffer "^5.0.1" -keyv@^4.0.0, keyv@^4.5.3: +keyv@^4.5.3: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -5053,328 +5076,311 @@ levn@^0.4.1: lie@~3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== dependencies: immediate "~3.0.5" -lilconfig@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@^15.0.2: - version "15.0.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.0.2.tgz#abef713182ec2770143e40a5d6d0130fe61ed442" - integrity sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw== - dependencies: - chalk "5.3.0" - commander "11.1.0" - debug "4.3.4" - execa "8.0.1" - lilconfig "2.1.0" - listr2 "7.0.2" - micromatch "4.0.5" - pidtree "0.6.0" - string-argv "0.3.2" - yaml "2.3.3" - -listr2@7.0.2, listr2@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-7.0.2.tgz#3aa3e1549dfaf3c57ab5eeaba754da3b87f33063" - integrity sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g== - dependencies: - cli-truncate "^3.1.0" +linkinator@^6.0.4: + version "6.0.4" + resolved "https://registry.npmjs.org/linkinator/-/linkinator-6.0.4.tgz" + integrity sha512-gxZ9ePUBeoaCk29p+2gAwrRIVnKOqAV8ZVCEM8N7MvpwbccDBQiKjXFyS6nQx56K1CCZLboan2i5iJfpWCsnSQ== + dependencies: + chalk "^5.0.0" + escape-html "^1.0.3" + gaxios "^6.0.0" + glob "^10.3.10" + htmlparser2 "^9.0.0" + marked "^10.0.0" + meow "^13.0.0" + mime "^4.0.0" + server-destroy "^1.0.1" + srcset "^5.0.0" + +listr2@^8.2.1: + version "8.2.1" + resolved "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz" + integrity sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g== + dependencies: + cli-truncate "^4.0.0" colorette "^2.0.20" eventemitter3 "^5.0.1" - log-update "^5.0.1" - rfdc "^1.3.0" - wrap-ansi "^8.1.0" - -load-yaml-file@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" - integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== - dependencies: - graceful-fs "^4.1.5" - js-yaml "^3.13.0" - pify "^4.0.1" - strip-bom "^3.0.0" + log-update "^6.0.0" + rfdc "^1.3.1" + wrap-ansi "^9.0.0" locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz" + integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== + +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== lodash.includes@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== lodash.isboolean@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + lodash.isinteger@^4.0.4: version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== lodash.isnumber@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + lodash.once@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -lodash.template@^4.5.0: +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + +lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17.21: +lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.0.0, log-symbols@^4.1.0: +log-symbols@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-update@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-5.0.1.tgz#9e928bf70cb183c1f0c9e91d9e6b7115d597ce09" - integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== +log-update@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz" + integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw== dependencies: - ansi-escapes "^5.0.0" + ansi-escapes "^6.2.0" cli-cursor "^4.0.0" - slice-ansi "^5.0.0" - strip-ansi "^7.0.1" - wrap-ansi "^8.0.1" + slice-ansi "^7.0.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== +lolex@^2.4.2: + version "2.7.5" + resolved "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz" + integrity sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q== + +lolex@^5.0.1: + version "5.1.2" + resolved "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== + dependencies: + "@sinonjs/commons" "^1.7.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - js-tokens "^3.0.0 || ^4.0.0" + get-func-name "^2.0.1" lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +lru-cache@^10.0.1, lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +lunr@^2.3.9: + version "2.3.9" + resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz" + integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" make-dir@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: semver "^7.5.3" -make-error@1.x, make-error@^1.1.1: +make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^10.0.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" - integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== - 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" - -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, make-fetch-happen@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - 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 "^10.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -"mem-fs-editor@^8.1.2 || ^9.0.0", mem-fs-editor@^9.0.0: - version "9.7.0" - resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-9.7.0.tgz#dbb458b8acb885c84013645e93f71aa267a7fdf6" - integrity sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg== - dependencies: - binaryextensions "^4.16.0" - commondir "^1.0.1" - deep-extend "^0.6.0" - ejs "^3.1.8" - globby "^11.1.0" - isbinaryfile "^5.0.0" - minimatch "^7.2.0" - multimatch "^5.0.0" - normalize-path "^3.0.0" - textextensions "^5.13.0" +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== -"mem-fs@^1.2.0 || ^2.0.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-2.3.0.tgz#d38bdd729ab0316bfb56d0d0ff669f91e7078463" - integrity sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw== - dependencies: - "@types/node" "^15.6.2" - "@types/vinyl" "^2.0.4" - vinyl "^2.0.1" - vinyl-file "^3.0.0" +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +marked@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/marked/-/marked-10.0.0.tgz" + integrity sha512-YiGcYcWj50YrwBgNzFoYhQ1hT6GmQbFG8SksnYJX1z4BXTHSOrz1GB5/Jm2yQvMg4nN1FHP4M6r03R10KrVUiA== + +marked@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== + +meow@^13.0.0: + version "13.2.0" + resolved "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz" + integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== + +meow@^8.0.0, meow@^8.1.2: + version "8.1.2" + resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + 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" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.2, micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -5382,311 +5388,222 @@ micromatch@4.0.5, micromatch@^4.0.2, micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/mime/-/mime-4.0.3.tgz" + integrity sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ== + mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +mimic-response@^4.0.0: + 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== + min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^7.2.0: - version "7.4.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2, minipass-fetch@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" - integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - minipass "^3.0.0" + brace-expansion "^2.0.1" -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" + brace-expansion "^2.0.1" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: - minipass "^3.0.0" + brace-expansion "^1.1.7" -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: - minipass "^3.0.0" + brace-expansion "^2.0.1" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== +minimatch@^9.0.1, minimatch@^9.0.3, minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== dependencies: - yallist "^4.0.0" + brace-expansion "^2.0.1" -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: + version "7.1.1" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz" + integrity sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA== -mkdirp-infer-owner@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" - integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== +mocha@^10.4.0: + version "10.4.0" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: - chownr "^2.0.0" - infer-owner "^1.0.4" - mkdirp "^1.0.3" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mri@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multimatch@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" - integrity sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA== - dependencies: - "@types/minimatch" "^3.0.3" - array-differ "^3.0.0" - array-union "^2.1.0" - arrify "^2.0.1" - minimatch "^3.0.4" - multistream@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/multistream/-/multistream-3.1.0.tgz#49c382bc0bb355e34d15ba3a9fc1cf0f66b9fded" + resolved "https://registry.npmjs.org/multistream/-/multistream-3.1.0.tgz" integrity sha512-zBgD3kn8izQAN/TaL1PCMv15vYpf+Vcrsfub06njuYVYlzUldzpopTlrEZ53pZVEbfn3Shtv7vRFoOv6LOV87Q== dependencies: inherits "^2.0.1" readable-stream "^3.4.0" -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== natural-orderby@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016" + resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz" integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q== -negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +nise@^1.3.3: + version "1.5.3" + resolved "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz" + integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== + dependencies: + "@sinonjs/formatio" "^3.2.1" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + lolex "^5.0.1" + path-to-regexp "^1.7.0" + +nise@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz" + integrity sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA== + dependencies: + "@sinonjs/commons" "^1.7.0" + "@sinonjs/fake-timers" "^6.0.0" + "@sinonjs/text-encoding" "^0.7.1" + just-extend "^4.0.2" + path-to-regexp "^1.7.0" + +nise@^5.1.9: + version "5.1.9" + resolved "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz" + integrity sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww== + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers" "^11.2.2" + "@sinonjs/text-encoding" "^0.7.2" + just-extend "^6.2.0" + path-to-regexp "^6.2.1" no-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@^2.6.1, node-fetch@^2.6.7: +node-fetch@^2.6.1, node-fetch@^2.6.9: version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-gyp@^8.2.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-gyp@^9.0.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^11.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" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== dependencies: - abbrev "1" + process-on-spawn "^1.0.0" -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -5694,9 +5611,9 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.3: +normalize-package-data@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -5704,489 +5621,243 @@ normalize-package-data@^3.0.3: semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-package-data@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" - integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== +normalize-package-data@^6: + version "6.0.1" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz" + integrity sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ== dependencies: - hosted-git-info "^6.0.0" + hosted-git-info "^7.0.0" is-core-module "^2.8.1" semver "^7.3.5" validate-npm-package-license "^3.0.4" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-bundled@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" - integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" - integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== - dependencies: - semver "^7.1.1" - -npm-install-checks@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-normalize-package-bin@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" - integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" - integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== - dependencies: - hosted-git-info "^6.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-package-arg@^8.0.1, npm-package-arg@^8.1.2, npm-package-arg@^8.1.5: - version "8.1.5" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz#3369b2d5fe8fdc674baa7f1786514ddc15466e44" - integrity sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q== - dependencies: - hosted-git-info "^4.0.1" - semver "^7.3.4" - validate-npm-package-name "^3.0.0" - -npm-packlist@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-3.0.0.tgz#0370df5cfc2fcc8f79b8f42b37798dd9ee32c2a9" - integrity sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ== - dependencies: - glob "^7.1.6" - ignore-walk "^4.0.1" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-packlist@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" - integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== - dependencies: - ignore-walk "^6.0.0" - -npm-pick-manifest@^6.0.0, npm-pick-manifest@^6.1.0, npm-pick-manifest@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz#7b5484ca2c908565f43b7f27644f36bb816f5148" - integrity sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA== - dependencies: - npm-install-checks "^4.0.0" - npm-normalize-package-bin "^1.0.1" - npm-package-arg "^8.1.2" - semver "^7.3.4" - -npm-pick-manifest@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.2.tgz#2159778d9c7360420c925c1a2287b5a884c713aa" - integrity sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^10.0.0" - semver "^7.3.5" +normalize-url@^8.0.0: + version "8.0.1" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== -npm-registry-fetch@^12.0.0, npm-registry-fetch@^12.0.1: - version "12.0.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz#ae583bb3c902a60dae43675b5e33b5b1f6159f1e" - integrity sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA== - dependencies: - make-fetch-happen "^10.0.1" - minipass "^3.1.6" - minipass-fetch "^1.4.1" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^8.1.5" - -npm-registry-fetch@^14.0.0: - version "14.0.5" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" - integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== - dependencies: - make-fetch-happen "^11.0.0" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^10.0.0" - proc-log "^3.0.0" - -npm-run-path@^4.0.1: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== +nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-treeify@^1.1.33: version "1.1.33" - resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40" + resolved "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz" integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A== -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" + call-bind "^1.0.5" + define-properties "^1.2.1" has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" - integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.fromentries@^2.0.6, object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - -object.hasown@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" - integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== - dependencies: - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.values@^1.1.6, object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + version "1.0.3" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" -oclif@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/oclif/-/oclif-4.0.3.tgz#2ff8fab10c29b2cd0bbf8e9c87640a64151b65ff" - integrity sha512-Bq7t1bJvAKYwW3DKQIzok3jkXv7yUIMneoSec1qUr9wfSqzRTZQB0UUDovwlT/L+3TBMVoRyw1WeX+YDvfRJNA== +object.values@^1.1.7: + version "1.2.0" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - "@oclif/core" "^3.0.4" - "@oclif/plugin-help" "^5.2.14" - "@oclif/plugin-not-found" "^2.3.32" - "@oclif/plugin-warn-if-update-available" "^3.0.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +oclif@^4.10.9: + version "4.10.9" + resolved "https://registry.npmjs.org/oclif/-/oclif-4.10.9.tgz" + integrity sha512-Rz+I3KBD/gBEZOzKioaLO817PpZldl11K2xvbssAaxman5eGMWtzayn4CgMixB7jcI8TONyLF5MuHdKVn2JBWA== + dependencies: + "@aws-sdk/client-cloudfront" "^3.574.0" + "@aws-sdk/client-s3" "^3.569.0" + "@inquirer/confirm" "^3.1.6" + "@inquirer/input" "^2.1.1" + "@inquirer/select" "^2.3.2" + "@oclif/core" "^3.26.5" + "@oclif/plugin-help" "^6.0.21" + "@oclif/plugin-not-found" "^3.1.8" + "@oclif/plugin-warn-if-update-available" "^3.0.18" async-retry "^1.3.3" - aws-sdk "^2.1231.0" + chalk "^4" change-case "^4" - debug "^4.3.3" - eslint-plugin-perfectionist "^2.1.0" + debug "^4.3.4" + ejs "^3.1.10" find-yarn-workspace-root "^2.0.0" fs-extra "^8.1" - github-slugger "^1.5.0" - got "^11" - lodash.template "^4.5.0" - normalize-package-data "^3.0.3" - semver "^7.3.8" - yeoman-environment "^3.15.1" - yeoman-generator "^5.8.0" + github-slugger "^2" + got "^13" + lodash "^4.17.21" + normalize-package-data "^6" + semver "^7.6.0" + sort-package-json "^2.10.0" + tiny-jsonc "^1.0.1" + validate-npm-package-name "^5.0.0" on-exit-leak-free@^2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -open@^7.0.0: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -open@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" - integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== - dependencies: - default-browser "^4.0.0" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - is-wsl "^2.2.0" - optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== 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" + word-wrap "^1.2.5" -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== dependencies: aggregate-error "^3.0.0" -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-transform@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-transform/-/p-transform-1.3.0.tgz#2da960ba92c6a56efbe75cbd1edf3ea7b3191049" - integrity sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg== - dependencies: - debug "^4.3.2" - p-queue "^6.6.2" - p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@^12.0.0, pacote@^12.0.2: - version "12.0.3" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-12.0.3.tgz#b6f25868deb810e7e0ddf001be88da2bcaca57c7" - integrity sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow== - dependencies: - "@npmcli/git" "^2.1.0" - "@npmcli/installed-package-contents" "^1.0.6" - "@npmcli/promise-spawn" "^1.2.0" - "@npmcli/run-script" "^2.0.0" - cacache "^15.0.5" - chownr "^2.0.0" - fs-minipass "^2.1.0" - infer-owner "^1.0.4" - minipass "^3.1.3" - mkdirp "^1.0.3" - npm-package-arg "^8.0.1" - npm-packlist "^3.0.0" - npm-pick-manifest "^6.0.0" - npm-registry-fetch "^12.0.0" - promise-retry "^2.0.1" - read-package-json-fast "^2.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.1.0" - -pacote@^15.2.0: - version "15.2.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" - integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== - dependencies: - "@npmcli/git" "^4.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^6.0.1" - "@npmcli/run-script" "^6.0.0" - cacache "^17.0.0" - fs-minipass "^3.0.0" - minipass "^5.0.0" - npm-package-arg "^10.0.0" - npm-packlist "^7.0.0" - npm-pick-manifest "^8.0.0" - npm-registry-fetch "^14.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^6.0.0" - read-package-json-fast "^3.0.0" - sigstore "^1.3.0" - ssri "^10.0.0" - tar "^6.1.11" +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" pako@~1.0.2: version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== param-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -6194,23 +5865,14 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" -parse-conflict-json@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" - integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== - dependencies: - json-parse-even-better-errors "^2.3.1" - just-diff "^5.0.1" - just-diff-apply "^5.2.0" - parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" @@ -6218,7 +5880,7 @@ parse-json@^4.0.0: parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -6228,15 +5890,15 @@ parse-json@^5.0.0, parse-json@^5.2.0: pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" tslib "^2.0.3" -password-prompt@^1.1.2: +password-prompt@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.3.tgz#05e539f4e7ca4d6c865d479313f10eb9db63ee5f" + resolved "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz" integrity sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw== dependencies: ansi-escapes "^4.3.2" @@ -6244,7 +5906,7 @@ password-prompt@^1.1.2: path-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + resolved "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz" integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== dependencies: dot-case "^3.0.4" @@ -6252,85 +5914,92 @@ path-case@^3.0.4: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.11.0: + version "1.11.0" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.0.tgz" + integrity sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-to-regexp@^6.2.1: + version "6.2.2" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz" + integrity sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw== + path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +path-type@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz" + integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== +picomatch@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz" + integrity sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag== -pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" - integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== +pino-abstract-transport@^1.0.0, pino-abstract-transport@^1.1.0, pino-abstract-transport@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz" + integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== dependencies: readable-stream "^4.0.0" split2 "^4.0.0" -pino-pretty@^10.2.3: - version "10.2.3" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-10.2.3.tgz#db539c796a1421fd4d130734fa994f5a26027783" - integrity sha512-4jfIUc8TC1GPUfDyMSlW1STeORqkoxec71yhxIpLDQapUu8WOuoz2TTCoidrIssyz78LZC69whBMPIKCMbi3cw== +pino-pretty@^10.3.1: + version "10.3.1" + resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.1.tgz" + integrity sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g== dependencies: colorette "^2.0.7" dateformat "^4.6.3" fast-copy "^3.0.0" fast-safe-stringify "^2.1.1" - help-me "^4.0.1" + help-me "^5.0.0" joycon "^3.1.1" minimist "^1.2.6" on-exit-leak-free "^2.1.0" @@ -6343,152 +6012,91 @@ pino-pretty@^10.2.3: pino-std-serializers@^6.0.0: version "6.2.2" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz" integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== -pino@^8.16.0: - version "8.16.1" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.16.1.tgz#dcaf82764b1a27f24101317cdd6453e96290f1d9" - integrity sha512-3bKsVhBmgPjGV9pyn4fO/8RtoVDR8ssW1ev819FsRXlRNgW8gR/9Kx+gCK4UPWd4JjrRDLWpzd/pb1AyWm3MGA== +pino@^8.21.0: + version "8.21.0" + resolved "https://registry.npmjs.org/pino/-/pino-8.21.0.tgz" + integrity sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.1.0 + pino-abstract-transport "^1.2.0" pino-std-serializers "^6.0.0" - process-warning "^2.0.0" + process-warning "^3.0.0" quick-format-unescaped "^4.0.3" real-require "^0.2.0" safe-stable-stringify "^2.3.1" sonic-boom "^3.7.0" - thread-stream "^2.0.0" - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + thread-stream "^2.6.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pluralize@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -preferred-pm@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.1.2.tgz#aedb70550734a574dffcbf2ce82642bd1753bdd6" - integrity sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q== - dependencies: - find-up "^5.0.0" - find-yarn-workspace-root2 "1.2.16" - path-exists "^4.0.0" - which-pm "2.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== - -pretty-bytes@^5.3.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-1.0.0.tgz#0d927307401f69ed79341e83a0b2c9a13395eb77" - integrity sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg== - -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-warning@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.2.0.tgz#008ec76b579820a8e5c35d81960525ca64feb626" - integrity sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -promise-call-limit@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" - integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== +prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== +pretty-quick@^3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.3.1.tgz" + integrity sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg== + dependencies: + execa "^4.1.0" + find-up "^4.1.0" + ignore "^5.3.0" + mri "^1.2.0" + picocolors "^1.0.0" + picomatch "^3.0.1" + tslib "^2.6.2" -promise-retry@^2.0.1: +process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" + fromentries "^1.2.0" -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" +process-warning@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz" + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== proper-lockfile@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + resolved "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz" integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== dependencies: graceful-fs "^4.2.4" @@ -6497,101 +6105,57 @@ proper-lockfile@^4.1.2: psl@^1.1.33: version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz" integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== - punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-format-unescaped@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -read-cmd-shim@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" - integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== - -read-package-json-fast@^2.0.1, read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" - integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== - dependencies: - json-parse-even-better-errors "^2.3.0" - npm-normalize-package-bin "^1.0.1" - -read-package-json-fast@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" - integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.0" + safe-buffer "^5.1.0" read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" @@ -6600,7 +6164,7 @@ read-pkg-up@^7.0.1: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -6608,32 +6172,19 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^2.0.2, readable-stream@^2.3.5, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - 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" - -readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.4.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^4.0.0, readable-stream@^4.3.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== +readable-stream@^4.0.0: + version "4.5.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== dependencies: abort-controller "^3.0.0" buffer "^6.0.3" @@ -6641,166 +6192,143 @@ readable-stream@^4.0.0, readable-stream@^4.3.0: process "^0.11.10" string_decoder "^1.3.0" -readdir-scoped-modules@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.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" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" real-require@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== rechoir@^0.6.2: version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + redeyed@~2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + resolved "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz" integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== dependencies: esprima "~4.0.0" -reflect.getprototypeof@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz#aaccbf41aca3821b87bb71d9dcbc7ad0ba50a3f3" - integrity sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerator-runtime@^0.13.3: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - regexp-tree@^0.1.27: version "0.1.27" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" + resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regjsparser@^0.10.0: version "0.10.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.10.0.tgz#b1ed26051736b436f22fdec1c8f72635f9f44892" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz" integrity sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA== dependencies: jsesc "~0.5.0" -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -replace-ext@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" - integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw== +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz" + integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== + dependencies: + es6-error "^4.0.1" require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -resolve-alpn@^1.0.0: +resolve-alpn@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== +resolve-global@1.0.0, resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.4: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.22.4: version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.4: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + lowercase-keys "^3.0.0" restore-cursor@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz" integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== dependencies: onetime "^5.1.0" @@ -6808,143 +6336,117 @@ restore-cursor@^4.0.0: retry@0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== +rfdc@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -run-applescript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" - integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== - dependencies: - execa "^5.0.0" - -run-async@^2.0.0, run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -rxjs@^7.2.0, rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.7" + get-intrinsic "^1.2.4" has-symbols "^1.0.3" isarray "^2.0.5" -safe-buffer@*, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@~5.2.0: +safe-buffer@*, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" -safe-stable-stringify@^2.3.1: +safe-stable-stringify@^2.3.1, safe-stable-stringify@^2.4.3: version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== +samsam@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz" + integrity sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg== sax@>=0.6.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" + resolved "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz" integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== -scoped-regex@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-2.1.0.tgz#7b9be845d81fd9d21d1ec97c61a0b7cf86d2015f" - integrity sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ== - secure-json-parse@^2.4.0: version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" + resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== "semver@2 || 3 || 4 || 5": version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: +semver@7.5.4: version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4, semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2: + version "7.6.2" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== + sentence-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + resolved "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== dependencies: no-case "^3.0.4" @@ -6953,102 +6455,174 @@ sentence-case@^3.0.4: sequin@*: version "0.1.1" - resolved "https://registry.yarnpkg.com/sequin/-/sequin-0.1.1.tgz#5c2d389d66a383734eaafbc45edeb2c1cb1be701" + resolved "https://registry.npmjs.org/sequin/-/sequin-0.1.1.tgz" integrity sha512-hJWMZRwP75ocoBM+1/YaCsvS0j5MTPeBHJkS2/wruehl9xwtX30HlDF1Gt6UZ8HHHY8SJa2/IL+jo+JJCd59rA== +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +server-destroy@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz" + integrity sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ== + set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" -set-function-name@^2.0.0, set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== +set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== dependencies: - define-data-property "^1.0.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" setimmediate@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shelljs@^0.8.5: +shelljs@^0.8.4, shelljs@^0.8.5: version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" interpret "^1.0.0" rechoir "^0.6.2" +shiki@^0.14.7: + version "0.14.7" + resolved "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz" + integrity sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg== + dependencies: + ansi-sequence-parser "^1.1.0" + jsonc-parser "^3.2.0" + vscode-oniguruma "^1.7.0" + vscode-textmate "^8.0.0" + +shx@0.3.4: + version "0.3.4" + resolved "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz" + integrity sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g== + dependencies: + minimist "^1.2.3" + shelljs "^0.8.5" + side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.6" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -sigstore@^1.3.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.9.0.tgz#1e7ad8933aa99b75c6898ddd0eeebc3eb0d59875" - integrity sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: - "@sigstore/bundle" "^1.1.0" - "@sigstore/protobuf-specs" "^0.2.0" - "@sigstore/sign" "^1.0.0" - "@sigstore/tuf" "^1.0.3" - make-fetch-happen "^11.0.1" + is-arrayish "^0.3.1" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +sinon@10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/sinon/-/sinon-10.0.0.tgz" + integrity sha512-XAn5DxtGVJBlBWYrcYKEhWCz7FLwZGdyvANRyK06419hyEpdT0dMc5A8Vcxg5SCGHc40CsqoKsc1bt1CbJPfNw== + dependencies: + "@sinonjs/commons" "^1.8.1" + "@sinonjs/fake-timers" "^6.0.1" + "@sinonjs/samsam" "^5.3.1" + diff "^4.0.2" + nise "^4.1.0" + supports-color "^7.1.0" + +sinon@^17.0.2: + version "17.0.2" + resolved "https://registry.npmjs.org/sinon/-/sinon-17.0.2.tgz" + integrity sha512-uihLiaB9FhzesElPDFZA7hDcNABzsVHwr3YfmM9sBllVwab3l0ltGlRV1XhpNfIacNDLGD1QRZNLs5nU5+hTuA== + dependencies: + "@sinonjs/commons" "^3.0.1" + "@sinonjs/fake-timers" "^11.2.2" + "@sinonjs/samsam" "^8.0.0" + diff "^5.2.0" + nise "^5.1.9" + supports-color "^7" + +sinon@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/sinon/-/sinon-5.1.1.tgz" + integrity sha512-h/3uHscbt5pQNxkf7Y/Lb9/OM44YNCicHakcq73ncbrIS8lXg+ZGOZbtuU+/km4YnyiCYfQQEwANaReJz7KDfw== + dependencies: + "@sinonjs/formatio" "^2.0.0" + diff "^3.5.0" + lodash.get "^4.4.2" + lolex "^2.4.2" + nise "^1.3.3" + supports-color "^5.4.0" + type-detect "^4.0.8" slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -7057,337 +6631,274 @@ slice-ansi@^4.0.0: slice-ansi@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== dependencies: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== +slice-ansi@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" snake-case@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== dependencies: dot-case "^3.0.4" tslib "^2.0.3" -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - sonic-boom@^3.0.0, sonic-boom@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.7.0.tgz#b4b7b8049a912986f4a92c51d4660b721b11f2f2" - integrity sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg== + version "3.8.1" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz" + integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== dependencies: atomic-sleep "^1.0.0" -sort-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-4.2.0.tgz#6b7638cee42c506fff8c1cecde7376d21315be18" - integrity sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg== - dependencies: - is-plain-obj "^2.0.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== +sort-object-keys@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz" + integrity sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg== + +sort-package-json@^2.10.0: + version "2.10.0" + resolved "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.10.0.tgz" + integrity sha512-MYecfvObMwJjjJskhxYfuOADkXp1ZMMnCFC8yhp+9HDsk7HhR336hd7eiBs96lTXfiqmUNI+WQCeCMRBhl251g== + dependencies: + detect-indent "^7.0.1" + detect-newline "^4.0.0" + get-stdin "^9.0.0" + git-hooks-list "^3.0.0" + globby "^13.1.2" + is-plain-obj "^4.1.0" + semver "^7.6.0" + sort-object-keys "^1.1.3" + +source-map-support@^0.5.21: + 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== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== -spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: +spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.17" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== + +split2@^3.0.0, split2@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" split2@^4.0.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^10.0.0: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -ssri@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" - integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== - dependencies: - minipass "^3.1.1" - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -string-argv@0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" +srcset@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/srcset/-/srcset-5.0.1.tgz" + integrity sha512-/P1UYbGfJVlxZag7aABNRrulEXAwCSDo7fklafOQrantuPTDmYgijJMks2zusPCVzgW9+4P69mq7w6pYuZpgxw== -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: +string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.matchall@^4.0.8: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" + strip-ansi "^7.0.1" -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== +string-width@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz" + integrity sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" -strip-bom-buf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572" - integrity sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ== - dependencies: - is-utf8 "^0.2.1" - -strip-bom-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" - integrity sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w== - dependencies: - first-chunk-stream "^2.0.0" - strip-bom "^2.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@^5.3.0: +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + +supports-color@8.1.1, supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7, supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-hyperlinks@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" @@ -7395,93 +6906,68 @@ supports-hyperlinks@^2.2.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synckit@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" - integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== - dependencies: - "@pkgr/utils" "^2.3.1" - tslib "^2.5.0" - -tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" glob "^7.1.4" minimatch "^3.0.4" +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -textextensions@^5.12.0, textextensions@^5.13.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-5.16.0.tgz#57dd60c305019bba321e848b1fdf0f99bfa59ec1" - integrity sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw== - -thread-stream@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.1.tgz#6d588b14f0546e59d3f306614f044bc01ce43351" - integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== +thread-stream@^2.6.0: + version "2.7.0" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz" + integrity sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw== dependencies: real-require "^0.2.0" -through@^2.3.6: +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +"through@>=2.2.7 <3": version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -titleize@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" - integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +tiny-jsonc@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/tiny-jsonc/-/tiny-jsonc-1.0.1.tgz" + integrity sha512-ik6BCxzva9DoiEfDX/li0L2cWKPPENYvixUprFdl3YPi4bZZUhDnNI9YUkacrv+uIG90dnxR5mNqaoD6UhD6Bw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tough-cookie@*: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -7490,37 +6976,36 @@ tough-cookie@*: tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -treeverse@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-1.0.4.tgz#a6b0ebf98a1bca6846ddc7ecbc900df08cb9cd5f" - integrity sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g== +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + version "1.3.0" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -ts-jest@^29.1.1: - version "29.1.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" - integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== +ts-json-schema-generator@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-1.5.1.tgz" + integrity sha512-apX5qG2+NA66j7b4AJm8q/DpdTeOsjfh7A3LpKsUiil0FepkNwtN28zYgjrsiiya2/OPhsr/PSjX5FUYg79rCg== dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" + "@types/json-schema" "^7.0.15" + commander "^12.0.0" + glob "^8.0.3" json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" + normalize-path "^3.0.0" + safe-stable-stringify "^2.4.3" + typescript "~5.4.2" -ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== +ts-node@^10.8.1, ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -7538,129 +7023,152 @@ ts-node@^10.9.1: ts-retry-promise@^0.7.1: version "0.7.1" - resolved "https://registry.yarnpkg.com/ts-retry-promise/-/ts-retry-promise-0.7.1.tgz#176d6eee6415f07b6c7c286d3657355e284a6906" + resolved "https://registry.npmjs.org/ts-retry-promise/-/ts-retry-promise-0.7.1.tgz" integrity sha512-NhHOCZ2AQORvH42hOPO5UZxShlcuiRtm7P2jIq2L2RY3PBxw2mLnUsEdHrIslVBFya1v5aZmrR55lWkzo13LrQ== -tsconfig-paths@^3.14.2: - version "3.14.2" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" - integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== +ts-retry-promise@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/ts-retry-promise/-/ts-retry-promise-0.8.0.tgz" + integrity sha512-elI/GkojPANBikPaMWQnk4T/bOJ6tq/hqXyQRmhfC9PAD6MoHmXIXK7KilJrlpx47VAKCGcmBrTeK5dHk6YAYg== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== dependencies: "@types/json5" "^0.0.29" json5 "^1.0.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.9.0: +tslib@^1.11.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.0, tslib@^2.6.2: +tslib@^2.0.3, tslib@^2.3.1, tslib@^2.6.1, tslib@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tuf-js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" - integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== - dependencies: - "@tufjs/models" "1.0.4" - debug "^4.3.4" - make-fetch-happen "^11.1.1" - tunnel-agent@*, tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.1: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== dependencies: - call-bind "^1.0.2" + call-bind "^1.0.7" for-each "^0.3.3" - is-typed-array "^1.1.9" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" -typescript@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +typedarray-to-buffer@^3.1.5: + 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== + dependencies: + is-typedarray "^1.0.0" + +typedoc-plugin-missing-exports@0.23.0: + version "0.23.0" + resolved "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-0.23.0.tgz" + integrity sha512-9smahDSsFRno9ZwoEshQDuIYMHWGB1E6LUud5qMxR2wNZ0T4DlZz0QjoK3HzXtX34mUpTH0dYtt7NQUK4D6B6Q== + +typedoc@^0.25.12: + version "0.25.13" + resolved "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz" + integrity sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ== + dependencies: + lunr "^2.3.9" + marked "^4.3.0" + minimatch "^9.0.3" + shiki "^0.14.7" + +"typescript@^4.6.4 || ^5.2.2", typescript@^5.4.3, typescript@^5.4.5, typescript@~5.4.2: + version "5.4.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -7670,228 +7178,117 @@ unbox-primitive@^1.0.2: undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-filename@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" - integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== - dependencies: - unique-slug "^3.0.0" - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" - integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + version "1.0.15" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz" + integrity sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA== dependencies: - escalade "^3.1.1" + escalade "^3.1.2" picocolors "^1.0.0" upper-case-first@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + resolved "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz" integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== dependencies: tslib "^2.0.3" upper-case@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + resolved "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz" integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== dependencies: tslib "^2.0.3" -uri-js@^4.2.2: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.4: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== - uuid@^8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-to-istanbul@^9.0.1: - version "9.1.3" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b" - integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== - dependencies: - builtins "^1.0.3" - validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - -vinyl-file@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-3.0.0.tgz#b104d9e4409ffa325faadd520642d0a3b488b365" - integrity sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.3.0" - strip-bom-buf "^1.0.0" - strip-bom-stream "^2.0.0" - vinyl "^2.0.1" - -vinyl@^2.0.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -walk-up-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" - integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + version "5.0.1" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" +vscode-oniguruma@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz" + integrity sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA== -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" +vscode-textmate@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz" + integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== websocket-driver@>=0.5.1: version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -7900,12 +7297,12 @@ websocket-driver@>=0.5.1: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -7913,7 +7310,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -7922,186 +7319,217 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== - dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-pm@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" - integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== - dependencies: - load-yaml-file "^0.2.0" - path-exists "^4.0.0" +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-tostringtag "^1.0.0" + has-tostringtag "^1.0.2" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -which@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" - integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - widest-line@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" +wireit@^0.14.4: + version "0.14.4" + resolved "https://registry.npmjs.org/wireit/-/wireit-0.14.4.tgz" + integrity sha512-WNAXEw2cJs1nSRNJNRcPypARZNumgtsRTJFTNpd6turCA6JZ6cEwl4ZU3C1IHc/3IaXoPu9LdxcI5TBTdD6/pg== + dependencies: + braces "^3.0.2" + chokidar "^3.5.3" + fast-glob "^3.2.11" + jsonc-parser "^3.0.0" + proper-lockfile "^4.1.2" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^6.0.1: +wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: +wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" string-width "^5.0.1" strip-ansi "^7.0.1" +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^4.0.0, write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== +write-file-atomic@^3.0.0: + 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== dependencies: imurmurhash "^0.1.4" - signal-exit "^3.0.7" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" -xml2js@0.5.0, xml2js@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" - integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== +xml2js@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz" + integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== dependencies: sax ">=0.6.0" xmlbuilder "~11.0.0" -xml@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== - xmlbuilder@~11.0.0: version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlcreate@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-2.0.4.tgz#0c5ab0f99cdd02a81065fa9cd8f8ae87624889be" + resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.3.tgz#01f6d18ef036446340007db8e016810e5d64aad9" - integrity sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ== +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs-parser@^21.0.1, yargs-parser@^21.1.1: +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1: +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^15.0.2: + version "15.4.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.0.0: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -8112,76 +7540,12 @@ yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" -yeoman-environment@^3.15.1: - version "3.19.3" - resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-3.19.3.tgz#49c2339805fdf695fac42c88334a1daa94ee8b6c" - integrity sha512-/+ODrTUHtlDPRH9qIC0JREH8+7nsRcjDl3Bxn2Xo/rvAaVvixH5275jHwg0C85g4QsF4P6M2ojfScPPAl+pLAg== - dependencies: - "@npmcli/arborist" "^4.0.4" - are-we-there-yet "^2.0.0" - arrify "^2.0.1" - binaryextensions "^4.15.0" - chalk "^4.1.0" - cli-table "^0.3.1" - commander "7.1.0" - dateformat "^4.5.0" - debug "^4.1.1" - diff "^5.0.0" - error "^10.4.0" - escape-string-regexp "^4.0.0" - execa "^5.0.0" - find-up "^5.0.0" - globby "^11.0.1" - grouped-queue "^2.0.0" - inquirer "^8.0.0" - is-scoped "^2.1.0" - isbinaryfile "^4.0.10" - lodash "^4.17.10" - log-symbols "^4.0.0" - mem-fs "^1.2.0 || ^2.0.0" - mem-fs-editor "^8.1.2 || ^9.0.0" - minimatch "^3.0.4" - npmlog "^5.0.1" - p-queue "^6.6.2" - p-transform "^1.3.0" - pacote "^12.0.2" - preferred-pm "^3.0.3" - pretty-bytes "^5.3.0" - readable-stream "^4.3.0" - semver "^7.1.3" - slash "^3.0.0" - strip-ansi "^6.0.0" - text-table "^0.2.0" - textextensions "^5.12.0" - untildify "^4.0.0" - -yeoman-generator@^5.8.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-5.10.0.tgz#0dde5be9d815b01f77a7e77ee6f9047edcbeca04" - integrity sha512-iDUKykV7L4nDNzeYSedRmSeJ5eMYFucnKDi6KN1WNASXErgPepKqsQw55TgXPHnmpcyOh2Dd/LAZkyc+f0qaAw== - dependencies: - chalk "^4.1.0" - dargs "^7.0.0" - debug "^4.1.1" - execa "^5.1.1" - github-username "^6.0.0" - lodash "^4.17.11" - mem-fs-editor "^9.0.0" - minimist "^1.2.5" - pacote "^15.2.0" - read-pkg-up "^7.0.1" - run-async "^2.0.0" - semver "^7.2.1" - shelljs "^0.8.5" - sort-keys "^4.2.0" - text-table "^0.2.0" - yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==