diff --git a/.github/release.config.js b/.github/release.config.js new file mode 100644 index 0000000000..982be45358 --- /dev/null +++ b/.github/release.config.js @@ -0,0 +1,77 @@ +module.exports = { + branches: [ + { + name: "main", + channel: "latest", + level: "minor", + }, + { + name: "maintenance", + channel: "latest", + level: "patch", + }, + { + name: "v1-lts", + channel: "zowe-v1-lts", + level: "patch", + }, + // { + // name: "next", + // prerelease: true, + // } + ], + plugins: [ + [ + "@octorelease/changelog", + { + displayNames: { + "zowe-explorer": "Zowe Explorer", + "zowe-explorer-ftp-extension": "Zowe Explorer Extension for FTP", + "zowe-explorer-api": "Zowe Explorer APIs", + }, + headerLine: "## TBD Release", + }, + ], + [ + "@octorelease/lerna", + { + // Use Lerna only for versioning and publish packages independently + npmPublish: false, + }, + ], + [ + "@octorelease/npm", + { + $cwd: "packages/zowe-explorer-api", + aliasTags: { + "latest": ["zowe-v2-lts"], + }, + npmPublish: true, + tarballDir: "dist", + }, + ], + [ + "@octorelease/vsce", + { + $cwd: "packages/zowe-explorer", + ovsxPublish: true, + vscePublish: true, + vsixDir: "dist", + }, + { + $cwd: "packages/zowe-explorer-ftp-extension", + ovsxPublish: true, + vscePublish: true, + vsixDir: "dist", + }, + ], + [ + "@octorelease/github", + { + assets: ["dist/*.tgz", "dist/*.vsix"], + draftRelease: true, + }, + ], + "@octorelease/git", + ], +}; diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 194b9b1ed3..3415559366 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -4,225 +4,73 @@ on: push: branches: - main + - maintenance - v1-lts paths: - - package.json - workflow_dispatch: - inputs: - version: - description: Version to be published - default: v2.6.0 - required: false - # create_release: - # description: Create the release even if publishing already happened - # default: 'false' - # required: false + - .github/release.config.js + - .github/workflows/deployment.yml + - lerna.json + # workflow_dispatch: + # inputs: + # version: + # description: Override version to be published + # required: false jobs: - check_version: + release: + if: github.event_name == 'workflow_dispatch' || github.ref_protected runs-on: ubuntu-latest - outputs: - should_publish: ${{ steps.should_publish_any.outputs.should_publish != null }} - steps: - - name: Checkout the Source Code - uses: actions/checkout@v2 - - - name: Get Top-Level package.json - run: "echo ::set-output name=market_ze::$(cat package.json)" - id: get_info - - - name: Get the Zowe Explorer package.json - run: "echo ::set-output name=package::$(cat packages/zowe-explorer/package.json)" - id: get_ze_package - - - name: Get the Zowe Explorer - FTP Extension package.json - run: "echo ::set-output name=package::$(cat packages/zowe-explorer-ftp-extension/package.json)" - id: get_ze_ftp_package - - - name: Get the Zowe Explorer - API package.json - run: "echo ::set-output name=package::$(cat packages/zowe-explorer-api/package.json)" - id: get_ze_api_package - - name: Get the Zowe Explorer - ESLint Extension package.json - run: "echo ::set-output name=package::$(cat packages/eslint-plugin-zowe-explorer/package.json)" - id: get_ze_eslint_package - - - name: Verify that Deployment is Required - run: "echo ::set-output name=should_publish::true" - if: | - fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_package.outputs.package).version || - fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_ftp_package.outputs.package).version || - fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_api_package.outputs.package).version - # if: | - # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_package.outputs.package).version || - # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_ftp_package.outputs.package).version || - # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_api_package.outputs.package).version || - # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_eslint_package.outputs.package).version - id: should_publish_any - - deploy: - runs-on: ubuntu-latest - needs: check_version - if: needs.check_version.outputs.should_publish steps: - - name: Checkout the Source Code - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v3 with: fetch-depth: 0 + persist-credentials: false + ref: ${{ github.ref }} - name: Use Node.js LTS uses: actions/setup-node@v3 with: - node-version: 14 - - - name: Configure Git - run: | - git config --global user.name "zowe-robot" - git config --global user.email "zowe.robot@gmail.com" + node-version: 'lts/*' + cache: 'npm' - - name: Install CLIs for Workflow use - run: npm install -g vsce@1.103.1 yarn ovsx + - name: Install Yarn + run: npm install -g yarn - # Avoid adding node_modules to each .github/actions folder - - name: Install Internal Dependencies for Actions to Work - run: npm install @actions/core - working-directory: ./.github/actions/deploy-vscode-extension - - - name: Install Project Dependencies + - name: Build Source run: yarn - # TODO: Update ZE dependency on the ze-api to match the top-level version once published - # Maybe this will help https://yarnpkg.com/cli/version/apply - - - name: Get the Zowe Explorer Display Name - run: "echo ::set-output name=package_nls::$(cat packages/zowe-explorer/package.nls.json)" - id: get_ze_name - - - name: Publish the Zowe Explorer - id: deploy_zowe_explorer - uses: ./.github/actions/deploy-vscode-extension - with: - name: ${{ fromJson(steps.get_ze_name.outputs.package_nls).displayName }} - package: packages/zowe-explorer - token: ${{ secrets.VSCODE_PUBLISHER_TOKEN }} ${{ secrets.VSCODE_ZOWE_ROBOT_PUBLISH_TOKEN }} - - - name: Get the FTP Extension package.json - run: "echo ::set-output name=package::$(cat packages/zowe-explorer-ftp-extension/package.json)" - id: get_ftp_name + - name: Get Project Version + id: lerna + run: echo "version=$(jq -r .version lerna.json)" >> $GITHUB_OUTPUT - - name: Publish the FTP Extension for Zowe Explorer - id: deploy_zowe_explorer_ftp_extension - uses: ./.github/actions/deploy-vscode-extension - with: - name: ${{ fromJson(steps.get_ftp_name.outputs.package).displayName }} - package: packages/zowe-explorer-ftp-extension - token: ${{ secrets.VSCODE_PUBLISHER_TOKEN }} ${{ secrets.VSCODE_ZOWE_ROBOT_PUBLISH_TOKEN }} - - - name: Get the NPM API package.json - run: "echo ::set-output name=package::$(cat packages/zowe-explorer-api/package.json)" - id: get_npm_api_info - - - name: Publish the Zowe Explorer APIs - id: deploy_zowe_explorer_api - uses: ./.github/actions/deploy-npm-package - with: - name: ${{ fromJson(steps.get_npm_api_info.outputs.package).description }} - package: packages/zowe-explorer-api - token: ${{ secrets.NPM_PUBLISHER_TOKEN }} - - # - name: Publish the ESLint plugin for Zowe Explorer - # id: deploy_eslint_plugin_zowe_explorer - # uses: ./.github/actions/deploy-eslint-plugin-zowe-explorer - # with: - # package: packages/eslint-plugin-zowe-explorer - - - name: Create Packages for Archiving Purposes - run: yarn package - - - name: Archive Built Artifacts - uses: actions/upload-artifact@v2 - with: - name: zowe-explorer-artifacts - path: dist/* - - - name: Get Top-Level package.json - run: "echo ::set-output name=top_package::$(cat package.json)" - id: get_version - - name: Get most recent GitHub release version - id: get_gh_version - uses: "WyriHaximus/github-action-get-previous-tag@v1" - - # Removed step because of issues with publishing - # - name: Check if files were staged - # run: "echo ::set-output name=files_staged::$(git diff --cached --quiet || echo $?)" - # id: check_project - - - name: Check version is bumped - if: ${{ !contains(steps.get_gh_version.outputs.tag, fromJson(steps.get_version.outputs.top_package).version) }} - run: echo "::set-output name=version_bumped::true" - id: check_project - - - name: Check version is a pre-release - if: ${{ endsWith(fromJson(steps.get_version.outputs.top_package).version, 'SNAPSHOT') }} - run: echo "::set-output name=pre_release::true" - id: is_pre_release - - - name: Create the Release - if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release - id: create_release - uses: actions/create-release@v1 + - uses: zowe-actions/octorelease@master + id: octorelease + if: ${{ !contains(github.event.inputs.version || steps.lerna.outputs.version, '-SNAPSHOT') }} env: + GIT_COMMITTER_NAME: ${{ secrets.ZOWE_ROBOT_USER }} + GIT_COMMITTER_EMAIL: ${{ secrets.ZOWE_ROBOT_EMAIL }} + GIT_CREDENTIALS: x-access-token:${{ secrets.ZOWE_ROBOT_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_PUBLISHER_TOKEN }} + OVSX_PAT: ${{ secrets.VSCODE_ZOWE_ROBOT_PUBLISH_TOKEN }} + VSCE_PAT: ${{ secrets.VSCODE_PUBLISHER_TOKEN }} with: - tag_name: v${{ fromJson(steps.get_version.outputs.top_package).version }} - release_name: v${{ fromJson(steps.get_version.outputs.top_package).version }} - body: | - ${{ steps.deploy_zowe_explorer.outputs.changelog }} - ${{ steps.deploy_zowe_explorer_ftp_extension.outputs.changelog }} - ${{ steps.deploy_zowe_explorer_api.outputs.changelog }} - ${{ steps.deploy_eslint_plugin_zowe_explorer.outputs.changelog }} - draft: true - prerelease: false + config-dir: .github + new-version: ${{ github.event.inputs.version }} - - name: Upload the Zowe Explorer Assets - if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./dist/${{ steps.deploy_zowe_explorer.outputs.archive }}.vsix - asset_name: ${{ steps.deploy_zowe_explorer.outputs.archive }}.vsix - asset_content_type: application/octet-stream - - - name: Upload the FTP Extension for Zowe Explorer Assets - if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release - uses: actions/upload-release-asset@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./dist/${{ steps.deploy_zowe_explorer_ftp_extension.outputs.archive }}.vsix - asset_name: ${{ steps.deploy_zowe_explorer_ftp_extension.outputs.archive }}.vsix - asset_content_type: application/octet-stream + - name: Update Changelogs + if: steps.octorelease.outcome == 'success' + run: | + sed -i '0,/##/s//## TBD Release\n\n### New features and enhancements\n\n### Bug fixes\n\n##/' packages/*/CHANGELOG.md + git add packages/*/CHANGELOG.md - - name: Upload the Zowe Explorer APIs Assets - if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release - uses: actions/upload-release-asset@v1 + - name: Create Snapshot Version + if: steps.octorelease.outcome == 'success' + uses: zowe-actions/octorelease/script@master env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VERSION_STRING: "%s-SNAPSHOT" with: - upload_url: ${{ steps.create_release.outputs.upload_url }} - asset_path: ./dist/${{ steps.deploy_zowe_explorer_api.outputs.archive }}.tgz - asset_name: ${{ steps.deploy_zowe_explorer_api.outputs.archive }}.tgz - asset_content_type: application/octet-stream - # - name: Upload the ESLint plugin for Zowe Explorer Assets - # if: steps.check_project.outputs.version_bumped - # uses: actions/upload-release-asset@v1 - # env: - # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # with: - # upload_url: ${{ steps.create_release.outputs.upload_url }} - # asset_path: ./dist/${{ steps.deploy_eslint_plugin_zowe_explorer.outputs.archive }}.tgz - # asset_name: ${{ steps.deploy_eslint_plugin_zowe_explorer.outputs.archive }}.tgz - # asset_content_type: application/octet-stream + config-dir: .github + script: prepareRelease diff --git a/.github/workflows/deployment.yml.old b/.github/workflows/deployment.yml.old new file mode 100644 index 0000000000..2bab1a8227 --- /dev/null +++ b/.github/workflows/deployment.yml.old @@ -0,0 +1,228 @@ +name: Deployment of Zowe Explorer and related extensions + +on: + push: + branches: + - main + - v1-lts + paths: + - package.json + workflow_dispatch: + inputs: + version: + description: Version to be published + default: v2.6.0 + required: false + # create_release: + # description: Create the release even if publishing already happened + # default: 'false' + # required: false + +jobs: + check_version: + runs-on: ubuntu-latest + outputs: + should_publish: ${{ steps.should_publish_any.outputs.should_publish != null }} + steps: + - name: Checkout the Source Code + uses: actions/checkout@v2 + + - name: Get Top-Level package.json + run: echo "market_ze=$(cat package.json)" >> $GITHUB_OUTPUT + id: get_info + + - name: Get the Zowe Explorer package.json + run: echo "package=$(cat packages/zowe-explorer/package.json)" >> $GITHUB_OUTPUT + id: get_ze_package + + - name: Get the Zowe Explorer - FTP Extension package.json + run: echo "package=$(cat packages/zowe-explorer-ftp-extension/package.json)" >> $GITHUB_OUTPUT + id: get_ze_ftp_package + + - name: Get the Zowe Explorer - API package.json + run: echo "package=$(cat packages/zowe-explorer-api/package.json)" >> $GITHUB_OUTPUT + id: get_ze_api_package + + - name: Get the Zowe Explorer - ESLint Extension package.json + run: echo "package=$(cat packages/eslint-plugin-zowe-explorer/package.json)" >> $GITHUB_OUTPUT + id: get_ze_eslint_package + + - name: Verify that Deployment is Required + run: echo "should_publish=true" >> $GITHUB_OUTPUT + if: | + fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_package.outputs.package).version || + fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_ftp_package.outputs.package).version || + fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_api_package.outputs.package).version + # if: | + # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_package.outputs.package).version || + # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_ftp_package.outputs.package).version || + # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_api_package.outputs.package).version || + # fromJson(steps.get_info.outputs.market_ze).versions[0].version != fromJson(steps.get_ze_eslint_package.outputs.package).version + id: should_publish_any + + deploy: + runs-on: ubuntu-latest + needs: check_version + if: needs.check_version.outputs.should_publish + steps: + - name: Checkout the Source Code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Use Node.js LTS + uses: actions/setup-node@v3 + with: + node-version: 14 + + - name: Configure Git + run: | + git config --global user.name "zowe-robot" + git config --global user.email "zowe.robot@gmail.com" + + - name: Install CLIs for Workflow use + run: npm install -g vsce@1.103.1 yarn ovsx + + # Avoid adding node_modules to each .github/actions folder + - name: Install Internal Dependencies for Actions to Work + run: npm install @actions/core + working-directory: ./.github/actions/deploy-vscode-extension + + - name: Install Project Dependencies + run: yarn + + # TODO: Update ZE dependency on the ze-api to match the top-level version once published + # Maybe this will help https://yarnpkg.com/cli/version/apply + + - name: Get the Zowe Explorer Display Name + run: echo "package_nls=$(cat packages/zowe-explorer/package.nls.json)" >> $GITHUB_OUTPUT + id: get_ze_name + + - name: Publish the Zowe Explorer + id: deploy_zowe_explorer + uses: ./.github/actions/deploy-vscode-extension + with: + name: ${{ fromJson(steps.get_ze_name.outputs.package_nls).displayName }} + package: packages/zowe-explorer + token: ${{ secrets.VSCODE_PUBLISHER_TOKEN }} ${{ secrets.VSCODE_ZOWE_ROBOT_PUBLISH_TOKEN }} + + - name: Get the FTP Extension package.json + run: echo "package=$(cat packages/zowe-explorer-ftp-extension/package.json)" >> $GITHUB_OUTPUT + id: get_ftp_name + + - name: Publish the FTP Extension for Zowe Explorer + id: deploy_zowe_explorer_ftp_extension + uses: ./.github/actions/deploy-vscode-extension + with: + name: ${{ fromJson(steps.get_ftp_name.outputs.package).displayName }} + package: packages/zowe-explorer-ftp-extension + token: ${{ secrets.VSCODE_PUBLISHER_TOKEN }} ${{ secrets.VSCODE_ZOWE_ROBOT_PUBLISH_TOKEN }} + + - name: Get the NPM API package.json + run: echo "package=$(cat packages/zowe-explorer-api/package.json)" >> $GITHUB_OUTPUT + id: get_npm_api_info + + - name: Publish the Zowe Explorer APIs + id: deploy_zowe_explorer_api + uses: ./.github/actions/deploy-npm-package + with: + name: ${{ fromJson(steps.get_npm_api_info.outputs.package).description }} + package: packages/zowe-explorer-api + token: ${{ secrets.NPM_PUBLISHER_TOKEN }} + + # - name: Publish the ESLint plugin for Zowe Explorer + # id: deploy_eslint_plugin_zowe_explorer + # uses: ./.github/actions/deploy-eslint-plugin-zowe-explorer + # with: + # package: packages/eslint-plugin-zowe-explorer + + - name: Create Packages for Archiving Purposes + run: yarn package + + - name: Archive Built Artifacts + uses: actions/upload-artifact@v2 + with: + name: zowe-explorer-artifacts + path: dist/* + + - name: Get Top-Level package.json + run: echo "top_package=$(cat package.json)" >> $GITHUB_OUTPUT + id: get_version + - name: Get most recent GitHub release version + id: get_gh_version + uses: "WyriHaximus/github-action-get-previous-tag@v1" + + # Removed step because of issues with publishing + # - name: Check if files were staged + # run: echo "files_staged=$(git diff --cached --quiet || echo $?)" >> $GITHUB_OUTPUT + # id: check_project + + - name: Check version is bumped + if: ${{ !contains(steps.get_gh_version.outputs.tag, fromJson(steps.get_version.outputs.top_package).version) }} + run: echo "version_bumped=true" >> $GITHUB_OUTPUT + id: check_project + + - name: Check version is a pre-release + if: ${{ endsWith(fromJson(steps.get_version.outputs.top_package).version, 'SNAPSHOT') }} + run: echo "pre_release=true" >> $GITHUB_OUTPUT + id: is_pre_release + + - name: Create the Release + if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ fromJson(steps.get_version.outputs.top_package).version }} + release_name: v${{ fromJson(steps.get_version.outputs.top_package).version }} + body: | + ${{ steps.deploy_zowe_explorer.outputs.changelog }} + ${{ steps.deploy_zowe_explorer_ftp_extension.outputs.changelog }} + ${{ steps.deploy_zowe_explorer_api.outputs.changelog }} + ${{ steps.deploy_eslint_plugin_zowe_explorer.outputs.changelog }} + draft: true + prerelease: false + + - name: Upload the Zowe Explorer Assets + if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./dist/${{ steps.deploy_zowe_explorer.outputs.archive }}.vsix + asset_name: ${{ steps.deploy_zowe_explorer.outputs.archive }}.vsix + asset_content_type: application/octet-stream + + - name: Upload the FTP Extension for Zowe Explorer Assets + if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./dist/${{ steps.deploy_zowe_explorer_ftp_extension.outputs.archive }}.vsix + asset_name: ${{ steps.deploy_zowe_explorer_ftp_extension.outputs.archive }}.vsix + asset_content_type: application/octet-stream + + - name: Upload the Zowe Explorer APIs Assets + if: steps.check_project.outputs.version_bumped && !steps.is_pre_release.outputs.pre_release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./dist/${{ steps.deploy_zowe_explorer_api.outputs.archive }}.tgz + asset_name: ${{ steps.deploy_zowe_explorer_api.outputs.archive }}.tgz + asset_content_type: application/octet-stream + # - name: Upload the ESLint plugin for Zowe Explorer Assets + # if: steps.check_project.outputs.version_bumped + # uses: actions/upload-release-asset@v1 + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # with: + # upload_url: ${{ steps.create_release.outputs.upload_url }} + # asset_path: ./dist/${{ steps.deploy_eslint_plugin_zowe_explorer.outputs.archive }}.tgz + # asset_name: ${{ steps.deploy_eslint_plugin_zowe_explorer.outputs.archive }}.tgz + # asset_content_type: application/octet-stream diff --git a/lerna.json b/lerna.json new file mode 100644 index 0000000000..29d89ced41 --- /dev/null +++ b/lerna.json @@ -0,0 +1,10 @@ +{ + "version": "2.6.1-SNAPSHOT", + "command": { + "version": { + "forcePublish": true, + "private": true + } + }, + "useWorkspaces": true +} diff --git a/package.json b/package.json index 35c8931330..367901531b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,5 @@ { "name": "zowe-explorer", - "version": "2.7.0-SNAPSHOT", "description": "Monorepo for the Zowe Explorer project.", "publisher": "Zowe", "author": "Zowe", @@ -9,11 +8,9 @@ "url": "https://github.com/zowe/vscode-extension-for-zowe" }, "private": true, - "workspaces": { - "packages": [ - "packages/*" - ] - }, + "workspaces": [ + "packages/*" + ], "engines": { "vscode": "^1.53.2" }, @@ -55,6 +52,7 @@ "**/http-cache-semantics": "^4.1.1", "**/log4js": "6.4.6", "**/minimatch": "^3.1.2", + "**/http-cache-semantics": "^4.1.1", "**/minimist": "^1.2.6", "**/moment": "^2.29.4", "**/tar": "^6.1.9" diff --git a/packages/eslint-plugin-zowe-explorer/package.json b/packages/eslint-plugin-zowe-explorer/package.json index bfe6a4cbe7..ff55bf2e08 100644 --- a/packages/eslint-plugin-zowe-explorer/package.json +++ b/packages/eslint-plugin-zowe-explorer/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-zowe-explorer", - "version": "2.7.0-SNAPSHOT", + "version": "2.6.1-SNAPSHOT", "description": "Custom ESLint Rules for ZOWE Explorer", "keywords": [ "eslint", @@ -9,6 +9,7 @@ ], "author": "", "main": "lib/index.js", + "private": true, "scripts": { "clean": "echo \"eslint-plugin: nothing to clean.\"", "fresh-clone": "yarn clean && rimraf node_modules", @@ -22,10 +23,6 @@ "dependencies": { "requireindex": "^1.1.0" }, - "devDependencies": { - "eslint": "^4.18.2", - "jest": "^26.0.1" - }, "engines": { "node": ">=0.10.0" }, diff --git a/packages/eslint-plugin-zowe-explorer/tests/lib/rules/no-unmocked-core-modules.js b/packages/eslint-plugin-zowe-explorer/tests/lib/rules/no-unmocked-core-modules.js index 1661459334..bce9609726 100644 --- a/packages/eslint-plugin-zowe-explorer/tests/lib/rules/no-unmocked-core-modules.js +++ b/packages/eslint-plugin-zowe-explorer/tests/lib/rules/no-unmocked-core-modules.js @@ -33,13 +33,15 @@ ruleTester.run("no-unmocked-core-modules", rule, { invalid: [ { code: "import * as fs from 'fs'; // `fs` must be mocked", - options: [{ coreModuleNames: ["fs"], filePathPattern: ".*" }], errors: [{ message: "Use jest.mock('fs') to mock a node core module" }], + options: [{ coreModuleNames: ["fs"], filePathPattern: ".*" }], + output: "import * as fs from 'fs';\njest.mock('fs'); // `fs` must be mocked", }, { code: "import * as path from 'path'", errors: [{ message: "Use jest.mock('path') to mock a node core module" }], options: [{ coreModuleNames: ["path"], filePathPattern: ".*" }], + output: "import * as path from 'path'\njest.mock('path');", }, ], }); diff --git a/packages/zowe-explorer-api/CHANGELOG.md b/packages/zowe-explorer-api/CHANGELOG.md index 83b5cc9a95..cada6feeeb 100644 --- a/packages/zowe-explorer-api/CHANGELOG.md +++ b/packages/zowe-explorer-api/CHANGELOG.md @@ -20,6 +20,7 @@ All notable changes to the "zowe-explorer-api" extension will be documented in t ### Bug fixes - Updated Imperative to fix failure to load schema when there is no profile of that type. [zowe/imperative#916](https://github.com/zowe/imperative/pull/916) +- Added missing overload for `Gui.setStatusBarMessage` to allow passing `Thenable` objects. ## `2.5.0` diff --git a/packages/zowe-explorer-api/__tests__/__unit__/globals/Gui.unit.test.ts b/packages/zowe-explorer-api/__tests__/__unit__/globals/Gui.unit.test.ts index 9b14f53b83..ad5926efa4 100644 --- a/packages/zowe-explorer-api/__tests__/__unit__/globals/Gui.unit.test.ts +++ b/packages/zowe-explorer-api/__tests__/__unit__/globals/Gui.unit.test.ts @@ -9,9 +9,10 @@ * * */ -import { Gui } from "../../../src/"; +import { Gui, IZoweTree, IZoweTreeNode } from "../../../src/"; import * as vscode from "vscode"; +import { DOUBLE_CLICK_SPEED_MS } from "../../../src/globals"; jest.mock("vscode"); // eslint-disable-next-line @typescript-eslint/explicit-function-return-type @@ -134,9 +135,10 @@ describe("Gui unit tests", () => { }); it("can set a status bar message w/ a timeout", () => { - Gui.setStatusBarMessage("Example status bar message", 500); + const EXAMPLE_TIMEOUT_MS = 500; + Gui.setStatusBarMessage("Example status bar message", EXAMPLE_TIMEOUT_MS); - expect(mocks.setStatusBarMessage).toHaveBeenCalledWith("Example status bar message", 500); + expect(mocks.setStatusBarMessage).toHaveBeenCalledWith("Example status bar message", EXAMPLE_TIMEOUT_MS); }); it("can show a file open dialog", async () => { @@ -171,3 +173,39 @@ describe("Gui unit tests", () => { expect(mockDidHide).toHaveBeenCalledTimes(1); }); }); + +describe("Gui.utils - unit tests", () => { + beforeEach(() => { + jest.useFakeTimers(); + }); + + afterEach(() => { + jest.runOnlyPendingTimers(); + jest.useRealTimers(); + }); + + it("returns false when checking if an invalid node was double-clicked", () => { + const clicked = Gui.utils.wasDoubleClicked(null as unknown as IZoweTreeNode, { lastOpened: {} } as unknown as IZoweTree); + expect(clicked).toBe(false); + }); + + const testDoubleClickEvent = (timeout: number, expected: boolean): void => { + const mockTime = new Date(); + const fakeNode = { label: "fakeLabel" } as unknown as IZoweTreeNode; + + setTimeout(() => { + const wasDoubleClicked = Gui.utils.wasDoubleClicked(fakeNode, { + lastOpened: { node: fakeNode, date: mockTime }, + } as unknown as IZoweTree); + expect(wasDoubleClicked).toBe(expected); + }, timeout); + }; + + it("returns false when the second click event is after the DOUBLE_CLICK_SPEED_MS window", () => { + testDoubleClickEvent(DOUBLE_CLICK_SPEED_MS * 4, false); + }); + + it("returns true when the second click event is within the DOUBLE_CLICK_SPEED_MS window", () => { + testDoubleClickEvent(DOUBLE_CLICK_SPEED_MS / 8, true); + }); +}); diff --git a/packages/zowe-explorer-api/package.json b/packages/zowe-explorer-api/package.json index 440f2fd7c2..29540089bc 100644 --- a/packages/zowe-explorer-api/package.json +++ b/packages/zowe-explorer-api/package.json @@ -1,6 +1,6 @@ { "name": "@zowe/zowe-explorer-api", - "version": "2.7.0-SNAPSHOT", + "version": "2.6.1-SNAPSHOT", "description": "Extensibility API for Zowe Explorer.", "publisher": "Zowe", "author": "Zowe", diff --git a/packages/zowe-explorer-api/src/globals/Constants.ts b/packages/zowe-explorer-api/src/globals/Constants.ts index 770c6415dc..6398ae2704 100644 --- a/packages/zowe-explorer-api/src/globals/Constants.ts +++ b/packages/zowe-explorer-api/src/globals/Constants.ts @@ -17,3 +17,7 @@ export const SCS_BRIGHTSIDE = "@brightside/core"; export const SCS_ZOWE_CLI = "@zowe/cli"; export const SCS_BROADCOM_PLUGIN = "Broadcom-Plugin"; export const SETTINGS_SCS_DEFAULT = SCS_ZOWE_CLI_V2; + +// default double-click speed for Windows +// (since VScode does not have a double-click event for nodes, we need our own check) +export const DOUBLE_CLICK_SPEED_MS = 500; diff --git a/packages/zowe-explorer-api/src/globals/Gui.ts b/packages/zowe-explorer-api/src/globals/Gui.ts index 5318d4c0cf..77e00b7c7b 100644 --- a/packages/zowe-explorer-api/src/globals/Gui.ts +++ b/packages/zowe-explorer-api/src/globals/Gui.ts @@ -11,6 +11,8 @@ import * as vscode from "vscode"; import { IZoweLogger, MessageSeverity } from "../logger"; +import { IZoweTree, IZoweTreeNode } from "../tree"; +import { DOUBLE_CLICK_SPEED_MS } from "./Constants"; export interface GuiMessageOptions { severity?: MessageSeverity; @@ -145,6 +147,8 @@ export namespace Gui { return vscode.window.showOpenDialog(options); } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + export function setStatusBarMessage(text: string, hideAfterTimeout: Thenable): vscode.Disposable; export function setStatusBarMessage(text: string, hideAfterTimeout: number): vscode.Disposable; export function setStatusBarMessage(text: string): vscode.Disposable; /** @@ -275,4 +279,32 @@ export namespace Gui { ): Thenable { return vscode.window.withProgress(options, task); } + + export namespace utils { + /** + * Determines whether a node has been double-clicked within a tree view. + * + * @param node The node that was just clicked + * @param provider The tree provider that the node belongs to + * @returns Whether the node has been double-clicked. + */ + export function wasDoubleClicked(node: IZoweTreeNode, provider: IZoweTree): boolean { + const timeOfClick = new Date(); + if (provider.lastOpened?.node === node) { + const timeDelta = timeOfClick.getTime() - provider.lastOpened.date.getTime(); + provider.lastOpened.date = timeOfClick; + + // If the time (in ms) between clicks is less than the defined DOUBLE_CLICK_SPEED_MS, + // recognize the action as a double-click. + return timeDelta <= DOUBLE_CLICK_SPEED_MS; + } + + provider.lastOpened = { + node, + date: timeOfClick, + }; + + return false; + } + } } diff --git a/packages/zowe-explorer-api/src/tree/IZoweTree.ts b/packages/zowe-explorer-api/src/tree/IZoweTree.ts index 30d23d402d..3a79acf1e3 100644 --- a/packages/zowe-explorer-api/src/tree/IZoweTree.ts +++ b/packages/zowe-explorer-api/src/tree/IZoweTree.ts @@ -22,6 +22,16 @@ import { PersistenceSchemaEnum } from "../profiles/UserSettings"; * @extends {vscode.TreeDataProvider} * @template T provide a subtype of vscode.TreeItem */ + +/** + * Contains a node that was recently interacted with, + * as well as a timestamp for when that interaction occurred. + */ +export class NodeInteraction { + public node?: IZoweTreeNode; + public date?: Date; +} + export interface IZoweTree extends vscode.TreeDataProvider { /** * Root session nodes @@ -37,6 +47,11 @@ export interface IZoweTree extends vscode.TreeDataProvider { */ mFavorites: IZoweTreeNode[]; + /** + * Defines the last node that was opened in the editor + */ + lastOpened?: NodeInteraction; + /** * Adds a session to the container * @param sessionName diff --git a/packages/zowe-explorer-ftp-extension/package.json b/packages/zowe-explorer-ftp-extension/package.json index d65402a503..7f7c393b78 100644 --- a/packages/zowe-explorer-ftp-extension/package.json +++ b/packages/zowe-explorer-ftp-extension/package.json @@ -5,8 +5,8 @@ "author": "Zowe", "license": "EPL-2.0", "description": "Adds zFTP support to Zowe Explorer demonstrating how to extend the Zowe Explorer using its extensibility API.", - "version": "2.7.0-SNAPSHOT", - "icon": "resources/zowe_logo.png", + "version": "2.6.1-SNAPSHOT", + "icon": "resources/zowe-ftp-color.png", "repository": { "url": "https://github.com/zowe/vscode-extension-for-zowe" }, @@ -47,8 +47,8 @@ "vscode": "^1.53.2" }, "dependencies": { - "@zowe/zowe-explorer-api": "2.7.0-SNAPSHOT", "@zowe/zos-ftp-for-zowe-cli": "2.1.2", + "@zowe/zowe-explorer-api": "2.6.1-SNAPSHOT", "tmp": "0.2.1" }, "devDependencies": { diff --git a/packages/zowe-explorer-ftp-extension/resources/zowe-ftp-color.png b/packages/zowe-explorer-ftp-extension/resources/zowe-ftp-color.png new file mode 100644 index 0000000000..f47227af01 Binary files /dev/null and b/packages/zowe-explorer-ftp-extension/resources/zowe-ftp-color.png differ diff --git a/packages/zowe-explorer-ftp-extension/resources/zowe_ftp_logo.png b/packages/zowe-explorer-ftp-extension/resources/zowe_ftp_logo.png deleted file mode 100644 index 9433ff3a60..0000000000 Binary files a/packages/zowe-explorer-ftp-extension/resources/zowe_ftp_logo.png and /dev/null differ diff --git a/packages/zowe-explorer-ftp-extension/resources/zowe_logo.png b/packages/zowe-explorer-ftp-extension/resources/zowe_logo.png deleted file mode 100644 index ee98bf266d..0000000000 Binary files a/packages/zowe-explorer-ftp-extension/resources/zowe_logo.png and /dev/null differ diff --git a/packages/zowe-explorer/CHANGELOG.md b/packages/zowe-explorer/CHANGELOG.md index b9f533773a..8c0fca3aef 100644 --- a/packages/zowe-explorer/CHANGELOG.md +++ b/packages/zowe-explorer/CHANGELOG.md @@ -11,6 +11,17 @@ All notable changes to the "vscode-extension-for-zowe" extension will be documen ### Bug fixes +## `2.6.1` + +### Bug fixes + +- Removed excess pop-ups when listing/opening USS files, and replaced required pop-ups with status bar items to improve UX. [#2091](https://github.com/zowe/vscode-extension-for-zowe/issues/2091) +- Prevented creation of duplicate session after executing a favorited search query. [#1029](https://github.com/zowe/vscode-extension-for-zowe/issues/1029) +- Resolved an issue where VS Code did not provide all context menu options for a profile node after a multi-select operation. [#2108](https://github.com/zowe/vscode-extension-for-zowe/pull/2108) +- Fixed issue with standardization of old v1 settings in Zowe Explorer during activation. [#1520](https://github.com/zowe/vscode-extension-for-zowe/issues/1520) +- Fixed bug where a JSON error occurs for job nodes when collapsing or expanding with a single click. [#2121](https://github.com/zowe/vscode-extension-for-zowe/issues/2121) +- Fixed possible data loss when file is saved but fails to upload and VS Code does not detect unsaved changes. [#2099](https://github.com/zowe/vscode-extension-for-zowe/issues/2099) + ## `2.6.0` ### New features and enhancements diff --git a/packages/zowe-explorer/__mocks__/vscode.ts b/packages/zowe-explorer/__mocks__/vscode.ts index 7320ea14e9..33171285aa 100644 --- a/packages/zowe-explorer/__mocks__/vscode.ts +++ b/packages/zowe-explorer/__mocks__/vscode.ts @@ -111,8 +111,10 @@ export namespace window { return undefined; } - export function setStatusBarMessage(message: string, ...items: string[]): undefined { - return undefined; + export function setStatusBarMessage(message: string, ...items: string[]): object { + return { + dispose: () => {}, + }; } /** @@ -404,6 +406,10 @@ export namespace workspace { return Disposable; } + export function applyEdit() { + return true; + } + /** * ~~The folder that is open in the editor. `undefined` when no folder * has been opened.~~ @@ -468,6 +474,15 @@ export interface Clipboard { writeText(value: string): Thenable; } +export class Position {} + +export class Range {} + +export class WorkspaceEdit { + public delete(uri: Uri, range: Range) {} + public insert(uri: Uri, position: Position, newText: string) {} +} + /** * Namespace describing the environment the editor runs in. */ diff --git a/packages/zowe-explorer/__tests__/__unit__/dataset/DatasetTree.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/dataset/DatasetTree.unit.test.ts index cf4cbc29c0..fa32b66c93 100644 --- a/packages/zowe-explorer/__tests__/__unit__/dataset/DatasetTree.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/dataset/DatasetTree.unit.test.ts @@ -60,6 +60,7 @@ function createGlobalMocks() { Object.defineProperty(vscode.window, "createTreeView", { value: jest.fn(), configurable: true }); Object.defineProperty(Gui, "showMessage", { value: jest.fn(), configurable: true }); + Object.defineProperty(Gui, "setStatusBarMessage", { value: jest.fn().mockReturnValue({ dispose: jest.fn() }), configurable: true }); Object.defineProperty(vscode.window, "showTextDocument", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode.workspace, "getConfiguration", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode.workspace, "openTextDocument", { value: jest.fn(), configurable: true }); diff --git a/packages/zowe-explorer/__tests__/__unit__/dataset/actions.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/dataset/actions.unit.test.ts index c88f4e7524..3c1bbe65ab 100644 --- a/packages/zowe-explorer/__tests__/__unit__/dataset/actions.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/dataset/actions.unit.test.ts @@ -43,6 +43,7 @@ import { getNodeLabels } from "../../../src/dataset/utils"; // Missing the definition of path module, because I need the original logic for tests jest.mock("fs"); +jest.mock("vscode"); let mockClipboardData = null; let clipboard; @@ -63,6 +64,8 @@ function createGlobalMocks() { datasetSessionFavNode: null, testFavoritesNode: createDatasetFavoritesNode(), testDatasetTree: null, + getContentsSpy: null, + statusBarMsgSpy: null, mvsApi: null, mockShowWarningMessage: jest.fn(), }; @@ -73,6 +76,7 @@ function createGlobalMocks() { newMocks.testFavoritesNode.children.push(newMocks.datasetSessionFavNode); newMocks.testDatasetTree = createDatasetTree(newMocks.datasetSessionNode, newMocks.treeView, newMocks.testFavoritesNode); newMocks.mvsApi = createMvsApi(newMocks.imperativeProfile); + newMocks.getContentsSpy = jest.spyOn(newMocks.mvsApi, "getContents"); bindMvsApi(newMocks.mvsApi); Object.defineProperty(vscode.window, "withProgress", { value: jest.fn(), configurable: true }); @@ -81,7 +85,9 @@ function createGlobalMocks() { Object.defineProperty(zowe.Upload, "pathToDataSet", { value: jest.fn(), configurable: true }); Object.defineProperty(Gui, "errorMessage", { value: jest.fn(), configurable: true }); Object.defineProperty(Gui, "showMessage", { value: jest.fn(), configurable: true }); - Object.defineProperty(vscode.window, "setStatusBarMessage", { value: jest.fn(), configurable: true }); + Object.defineProperty(vscode.window, "setStatusBarMessage", { value: jest.fn().mockReturnValue({ dispose: jest.fn() }), configurable: true }); + newMocks.statusBarMsgSpy = jest.spyOn(Gui, "setStatusBarMessage"); + Object.defineProperty(Gui, "warningMessage", { value: newMocks.mockShowWarningMessage, configurable: true, @@ -93,6 +99,7 @@ function createGlobalMocks() { Object.defineProperty(vscode.window, "showQuickPick", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode.window, "createQuickPick", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode.commands, "executeCommand", { value: jest.fn(), configurable: true }); + Object.defineProperty(vscode.workspace, "applyEdit", { value: jest.fn(), configurable: true }); Object.defineProperty(globals, "LOG", { value: jest.fn(), configurable: true }); Object.defineProperty(globals.LOG, "debug", { value: jest.fn(), configurable: true }); Object.defineProperty(globals.LOG, "error", { value: jest.fn(), configurable: true }); @@ -143,9 +150,9 @@ const createBlockMocksShared = () => { describe("Dataset Actions Unit Tests - Function createMember", () => { afterAll(() => jest.restoreAllMocks()); + const globalMocks = createGlobalMocks(); it("Checking of common dataset member creation", async () => { - createGlobalMocks(); const blockMocks = createBlockMocksShared(); const parent = new ZoweDatasetNode("parent", vscode.TreeItemCollapsibleState.Collapsed, blockMocks.datasetSessionNode, blockMocks.session); @@ -157,7 +164,7 @@ describe("Dataset Actions Unit Tests - Function createMember", () => { mocked(vscode.window.withProgress).mockImplementation((progLocation, callback) => { return callback(); }); - jest.spyOn(blockMocks.mvsApi, "getContents").mockResolvedValueOnce({ + globalMocks.getContentsSpy.mockResolvedValueOnce({ success: true, commandResponse: null, apiResponse: { @@ -176,8 +183,8 @@ describe("Dataset Actions Unit Tests - Function createMember", () => { }); }); it("Checking failed attempt to create dataset member", async () => { - createGlobalMocks(); const blockMocks = createBlockMocksShared(); + createGlobalMocks(); const parent = new ZoweDatasetNode("parent", vscode.TreeItemCollapsibleState.Collapsed, blockMocks.datasetSessionNode, blockMocks.session); mocked(vscode.window.showInputBox).mockResolvedValue("testMember"); @@ -188,9 +195,9 @@ describe("Dataset Actions Unit Tests - Function createMember", () => { } catch (err) {} expect(mocked(Gui.errorMessage)).toBeCalledWith("Unable to create member: test Error: test"); + mocked(zowe.Upload.bufferToDataSet).mockReset(); }); it("Checking of attempt to create member without name", async () => { - createGlobalMocks(); const blockMocks = createBlockMocksShared(); const parent = new ZoweDatasetNode("parent", vscode.TreeItemCollapsibleState.Collapsed, blockMocks.datasetSessionNode, blockMocks.session); @@ -200,7 +207,6 @@ describe("Dataset Actions Unit Tests - Function createMember", () => { expect(mocked(zowe.Upload.bufferToDataSet)).not.toBeCalled(); }); it("Checking of member creation for favorite dataset", async () => { - createGlobalMocks(); const blockMocks = createBlockMocksShared(); const parent = new ZoweDatasetNode("parent", vscode.TreeItemCollapsibleState.Collapsed, blockMocks.datasetSessionNode, blockMocks.session); const nonFavoriteLabel = parent.label; @@ -211,7 +217,7 @@ describe("Dataset Actions Unit Tests - Function createMember", () => { mocked(vscode.window.withProgress).mockImplementation((progLocation, callback) => { return callback(); }); - jest.spyOn(blockMocks.mvsApi, "getContents").mockResolvedValueOnce({ + globalMocks.getContentsSpy.mockResolvedValueOnce({ success: true, commandResponse: null, apiResponse: { @@ -279,13 +285,15 @@ describe("Dataset Actions Unit Tests - Function refreshPS", () => { }); it("Checking failed attempt to refresh PS dataset (not found exception)", async () => { globals.defineGlobals(""); - createGlobalMocks(); + const globalMocks = createGlobalMocks(); const blockMocks = createBlockMocksShared(); const node = new ZoweDatasetNode("HLQ.TEST.AFILE7", vscode.TreeItemCollapsibleState.None, blockMocks.datasetSessionNode, null); mocked(vscode.workspace.openTextDocument).mockResolvedValueOnce({ isDirty: true } as any); mocked(zowe.Download.dataSet).mockRejectedValueOnce(Error("not found")); + globalMocks.getContentsSpy.mockRejectedValueOnce(new Error("not found")); + await dsActions.refreshPS(node); expect(mocked(Gui.showMessage)).toBeCalledWith("Unable to find file: " + node.label + " was probably deleted."); @@ -971,6 +979,7 @@ describe("Dataset Actions Unit Tests - Function saveFile", () => { await dsActions.saveFile(testDocument, blockMocks.testDatasetTree); expect(getSessionSpy).toReturnWith(blockMocks.sessionWithoutCredentials); + expect(mocked(vscode.workspace.applyEdit)).toHaveBeenCalledTimes(2); }); it("Checking common dataset saving failed attempt due to inability to locate session and profile", async () => { globals.defineGlobals(""); @@ -1030,7 +1039,7 @@ describe("Dataset Actions Unit Tests - Function saveFile", () => { }); it("Checking common dataset saving", async () => { globals.defineGlobals(""); - createGlobalMocks(); + const globalMocks = createGlobalMocks(); const blockMocks = createBlockMocks(); const node = new ZoweDatasetNode( "HLQ.TEST.AFILE", @@ -1074,7 +1083,7 @@ describe("Dataset Actions Unit Tests - Function saveFile", () => { expect(mocked(sharedUtils.concatChildNodes)).toBeCalled(); expect(mockSetEtag).toHaveBeenCalledWith("123"); - expect(mocked(vscode.window.setStatusBarMessage)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); + expect(mocked(globalMocks.statusBarMsgSpy)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); }); it("Checking common dataset failed saving attempt", async () => { globals.defineGlobals(""); @@ -1121,10 +1130,11 @@ describe("Dataset Actions Unit Tests - Function saveFile", () => { expect(mocked(sharedUtils.concatChildNodes)).toBeCalled(); expect(mocked(Gui.errorMessage)).toBeCalledWith("failed"); + expect(mocked(vscode.workspace.applyEdit)).toHaveBeenCalledTimes(2); }); it("Checking favorite dataset saving", async () => { globals.defineGlobals(""); - createGlobalMocks(); + const globalMocks = createGlobalMocks(); const blockMocks = createBlockMocks(); const favoriteNode = new ZoweDatasetNode( "[TestSessionName]: HLQ.TEST.AFILE", @@ -1179,11 +1189,11 @@ describe("Dataset Actions Unit Tests - Function saveFile", () => { await dsActions.saveFile(testDocument, blockMocks.testDatasetTree); expect(mocked(sharedUtils.concatChildNodes)).toBeCalled(); - expect(mocked(vscode.window.setStatusBarMessage)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); + expect(mocked(globalMocks.statusBarMsgSpy)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); }); it("Checking favorite PDS Member saving", async () => { globals.defineGlobals(""); - createGlobalMocks(); + const globalMocks = createGlobalMocks(); const blockMocks = createBlockMocks(); // Create nodes for Session section const node = new ZoweDatasetNode( @@ -1269,7 +1279,7 @@ describe("Dataset Actions Unit Tests - Function saveFile", () => { expect(mocked(sharedUtils.concatChildNodes)).toBeCalled(); expect(mockSetEtag).toHaveBeenCalledWith("123"); - expect(mocked(vscode.window.setStatusBarMessage)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); + expect(mocked(globalMocks.statusBarMsgSpy)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); expect(blockMocks.profileInstance.loadNamedProfile).toBeCalledWith(blockMocks.imperativeProfile.name); }); it("Checking common dataset failed saving attempt due to incorrect document path", async () => { @@ -1342,7 +1352,7 @@ describe("Dataset Actions Unit Tests - Function saveFile", () => { await dsActions.saveFile(testDocument, blockMocks.testDatasetTree); expect(mocked(sharedUtils.concatChildNodes)).toBeCalled(); - expect(mocked(vscode.window.setStatusBarMessage)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); + expect(mocked(Gui.setStatusBarMessage)).toBeCalledWith("success", globals.STATUS_BAR_TIMEOUT_MS); }); it("Checking common dataset saving failed due to conflict with server version", async () => { globals.defineGlobals(""); @@ -2279,7 +2289,7 @@ describe("Dataset Actions Unit Tests - Function pasteMember", () => { }); it("Should call zowe.Copy.dataSet when pasting to partitioned data set", async () => { globals.defineGlobals(""); - createGlobalMocks(); + const globalMocks = createGlobalMocks(); const blockMocks = createBlockMocks(); mocked(Profiles.getInstance).mockReturnValue(blockMocks.profileInstance); const node = new ZoweDatasetNode( @@ -2299,8 +2309,7 @@ describe("Dataset Actions Unit Tests - Function pasteMember", () => { commandResponse: "", apiResponse: {}, }); - const getContentsSpy = jest.spyOn(blockMocks.mvsApi, "getContents"); - getContentsSpy.mockRejectedValueOnce(Error("Member not found")); + globalMocks.getContentsSpy.mockRejectedValueOnce(Error("Member not found")); const listAllMembersSpy = jest.spyOn(blockMocks.mvsApi, "allMembers"); listAllMembersSpy.mockResolvedValueOnce({ success: true, @@ -2351,7 +2360,7 @@ describe("Dataset Actions Unit Tests - Function pasteMember", () => { }); it("Should call zowe.Copy.dataSet when pasting to a favorited partitioned data set", async () => { globals.defineGlobals(""); - createGlobalMocks(); + const globalMocks = createGlobalMocks(); const blockMocks = createBlockMocks(); mocked(Profiles.getInstance).mockReturnValue(blockMocks.profileInstance); const favoritedNode = new ZoweDatasetNode( @@ -2382,8 +2391,7 @@ describe("Dataset Actions Unit Tests - Function pasteMember", () => { commandResponse: "", apiResponse: {}, }); - const getContentsSpy = jest.spyOn(blockMocks.mvsApi, "getContents"); - getContentsSpy.mockRejectedValueOnce(Error("Member not found")); + globalMocks.getContentsSpy.mockRejectedValueOnce(Error("Member not found")); const listAllMembersSpy = jest.spyOn(blockMocks.mvsApi, "allMembers"); listAllMembersSpy.mockResolvedValueOnce({ success: true, @@ -3143,10 +3151,9 @@ describe("Dataset Actions Unit Tests - Function openPS", () => { it("Checking of failed attempt to open dataset", async () => { globals.defineGlobals(""); - createGlobalMocks(); + const globalMocks = createGlobalMocks(); const blockMocks = createBlockMocks(); - - mocked(vscode.window.withProgress).mockRejectedValueOnce(Error("testError")); + globalMocks.getContentsSpy.mockRejectedValueOnce(new Error("testError")); mocked(Profiles.getInstance).mockReturnValue(blockMocks.profileInstance); const node = new ZoweDatasetNode("node", vscode.TreeItemCollapsibleState.None, blockMocks.datasetSessionNode, null); diff --git a/packages/zowe-explorer/__tests__/__unit__/extension.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/extension.unit.test.ts index f3de659e5f..a337ba018d 100644 --- a/packages/zowe-explorer/__tests__/__unit__/extension.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/extension.unit.test.ts @@ -26,6 +26,8 @@ import { ZoweUSSNode } from "../../src/uss/ZoweUSSNode"; import { getSelectedNodeList } from "../../src/shared/utils"; import { SettingsConfig } from "../../src/utils/SettingsConfig"; import { ZoweExplorerExtender } from "../../src/ZoweExplorerExtender"; +import { DatasetTree } from "../../src/dataset/DatasetTree"; +import { USSTree } from "../../src/uss/USSTree"; jest.mock("vscode"); jest.mock("fs"); @@ -498,6 +500,27 @@ describe("Extension Unit Tests", () => { expect(spyCleanTempDir).toHaveBeenCalled(); expect(globals.ACTIVATED).toBe(false); }); + + async function removeSessionTest(command: string, contextValue: string, providerObject: any) { + const testNode: any = { + contextValue: contextValue, + getProfile: jest.fn(), + getParent: jest.fn().mockReturnValue({ getLabel: jest.fn() }), + label: "TestNode", + }; + const deleteSessionSpy = jest.spyOn(providerObject.prototype, "deleteSession"); + const commandFunction = allCommands.find((cmd) => command === cmd.cmd); + await (commandFunction as any).fun(testNode, [testNode]); + expect(deleteSessionSpy).toHaveBeenCalled(); + } + + it("zowe.ds.removeSession", async () => { + await removeSessionTest("zowe.ds.removeSession", globals.DS_SESSION_CONTEXT, DatasetTree); + }); + + it("zowe.uss.removeSession", async () => { + await removeSessionTest("zowe.uss.removeSession", globals.USS_SESSION_CONTEXT, USSTree); + }); }); describe("Extension Unit Tests - THEIA", () => { diff --git a/packages/zowe-explorer/__tests__/__unit__/job/ZosJobsProvider.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/job/ZosJobsProvider.unit.test.ts index 2ebeffa112..4c4b05ce70 100644 --- a/packages/zowe-explorer/__tests__/__unit__/job/ZosJobsProvider.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/job/ZosJobsProvider.unit.test.ts @@ -32,7 +32,7 @@ import { import { getIconByNode } from "../../../src/generators/icons"; import { createJesApi } from "../../../__mocks__/mockCreators/api"; import * as sessUtils from "../../../src/utils/SessionUtils"; -import { jobPrefixValidator } from "../../../src/shared/utils"; +import { jobStringValidator } from "../../../src/shared/utils"; async function createGlobalMocks() { const globalMocks = { @@ -773,7 +773,7 @@ describe("ZosJobsProvider unit tests - Function getUserSearchQueryInput", () => value: "job*", show: true, placeHolder: `Enter job prefix`, - validateInput: () => (text) => jobPrefixValidator(text), + validateInput: () => (text) => jobStringValidator(text, "prefix"), }, { key: `key`, @@ -808,6 +808,7 @@ describe("ZosJobsProvider unit tests - Function getPopulatedPickerArray", () => value: "kristina", show: true, placeHolder: `Enter job owner id`, + validateInput: (text) => jobStringValidator(text, "owner"), }, { key: `prefix`, @@ -815,7 +816,7 @@ describe("ZosJobsProvider unit tests - Function getPopulatedPickerArray", () => value: "job*", show: true, placeHolder: `Enter job prefix`, - validateInput: () => (text) => jobPrefixValidator(text), + validateInput: (text) => jobStringValidator(text, "prefix"), }, { key: `job-status`, @@ -829,11 +830,20 @@ describe("ZosJobsProvider unit tests - Function getPopulatedPickerArray", () => }); }); -describe("Jobs utils unit tests - Function jobPrefixValidator", () => { +describe("Jobs utils unit tests - Function jobStringValidator", () => { it("should return null with correct input", async () => { - expect(jobPrefixValidator("job*")).toBeNull(); + const validOpts: [string, "owner" | "prefix"][] = [ + ["job*", "prefix"], + ["owner*", "owner"], + ]; + + validOpts.forEach((validOpt) => expect(jobStringValidator(validOpt[0], validOpt[1])).toBeNull()); }); it("should return invalid string with invalid input", async () => { - expect(jobPrefixValidator("job1234567*")).toContain("Invalid"); + const invalidOpts: [string, "owner" | "prefix"][] = [ + ["invalidowner", "owner"], + ["job1234567*", "prefix"], + ]; + invalidOpts.forEach((invalidOpt) => expect(jobStringValidator(invalidOpt[0], invalidOpt[1])).toContain("Invalid")); }); }); diff --git a/packages/zowe-explorer/__tests__/__unit__/job/actions.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/job/actions.unit.test.ts index 38df414986..44e2f9dbbd 100644 --- a/packages/zowe-explorer/__tests__/__unit__/job/actions.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/job/actions.unit.test.ts @@ -742,6 +742,7 @@ describe("Jobs Actions Unit Tests - Function getSpoolContent", () => { expect(mocked(Gui.errorMessage)).toBeCalledWith("Test Error: Test"); }); it("should fetch the spool content successfully", async () => { + createGlobalMocks(); const blockMocks = createBlockMocks(); const testNode = new Job( "undefined:test - testJob", diff --git a/packages/zowe-explorer/__tests__/__unit__/shared/actions.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/shared/actions.unit.test.ts index 10e685fde9..b49e3e3922 100644 --- a/packages/zowe-explorer/__tests__/__unit__/shared/actions.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/shared/actions.unit.test.ts @@ -48,6 +48,12 @@ async function createGlobalMocks() { return globalMocks.mockCallback; }); + Object.defineProperty(Gui, "setStatusBarMessage", { + value: jest.fn().mockReturnValue({ + dispose: jest.fn(), + }), + configurable: true, + }); Object.defineProperty(vscode.window, "createTreeView", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode.workspace, "getConfiguration", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode.window, "showInformationMessage", { value: jest.fn(), configurable: true }); @@ -59,6 +65,16 @@ async function createGlobalMocks() { Object.defineProperty(vscode.commands, "executeCommand", { value: globalMocks.withProgress, configurable: true }); Object.defineProperty(vscode, "ProgressLocation", { value: globalMocks.ProgressLocation, configurable: true }); Object.defineProperty(Profiles, "getInstance", { value: jest.fn(), configurable: true }); + Object.defineProperty(zowe, "Download", { + value: { + ussFile: jest.fn().mockReturnValue({ + apiResponse: { + etag: "ABC123", + }, + }), + }, + configurable: true, + }); Object.defineProperty(zowe, "Utilities", { value: jest.fn(), configurable: true }); Object.defineProperty(zowe.Utilities, "isFileTagBinOrAscii", { value: jest.fn(), configurable: true }); Object.defineProperty(globals, "LOG", { value: jest.fn(), configurable: true }); diff --git a/packages/zowe-explorer/__tests__/__unit__/uss/USSTree.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/uss/USSTree.unit.test.ts index 23f0d5ad9e..cff0f96896 100644 --- a/packages/zowe-explorer/__tests__/__unit__/uss/USSTree.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/uss/USSTree.unit.test.ts @@ -87,6 +87,12 @@ async function createGlobalMocks() { globalMocks.mockProfilesInstance.getBaseProfile.mockResolvedValue(globalMocks.testBaseProfile); globalMocks.mockProfilesInstance.loadNamedProfile.mockReturnValue(globalMocks.testProfile); globalMocks.mockProfilesInstance.allProfiles = [globalMocks.testProfile, { name: "firstName" }, { name: "secondName" }]; + Object.defineProperty(Gui, "setStatusBarMessage", { + value: jest.fn().mockReturnValue({ + dispose: jest.fn(), + }), + configurable: true, + }); Object.defineProperty(vscode.window, "showWarningMessage", { value: globalMocks.mockShowWarningMessage, configurable: true, @@ -113,6 +119,16 @@ async function createGlobalMocks() { Object.defineProperty(zowe, "ZosmfSession", { value: globalMocks.ZosmfSession, configurable: true }); Object.defineProperty(globalMocks.filters, "getFilters", { value: globalMocks.getFilters, configurable: true }); Object.defineProperty(vscode.window, "createQuickPick", { value: globalMocks.createQuickPick, configurable: true }); + Object.defineProperty(zowe, "Download", { + value: { + ussFile: jest.fn().mockReturnValueOnce({ + apiResponse: { + etag: "ABC123", + }, + }), + }, + configurable: true, + }); Object.defineProperty(zowe, "Utilities", { value: globalMocks.Utilities, configurable: true }); Object.defineProperty(zowe.Utilities, "isFileTagBinOrAscii", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode.window, "showErrorMessage", { @@ -1302,14 +1318,14 @@ describe("USSTree Unit Tests - Function USSTree.getChildren()", () => { it("Testing that getChildren() returns correct ZoweUSSNodes when passed element of type ZoweUSSNode", async () => { const globalMocks = await createGlobalMocks(); - const testDir = new ZoweUSSNode("testDir", vscode.TreeItemCollapsibleState.Collapsed, globalMocks.testTree.mSessionNodes[1], null, "test"); + const testDir = new ZoweUSSNode("aDir", vscode.TreeItemCollapsibleState.Collapsed, globalMocks.testTree.mSessionNodes[1], null, "test"); globalMocks.testTree.mSessionNodes[1].children.push(testDir); const mockApiResponseItems = { items: [ { mode: "d", mSessionName: "sestest", - name: "testDir", + name: "aDir", }, ], }; @@ -1357,7 +1373,7 @@ describe("USSTree Unit Tests - Function USSTree.getChildren()", () => { globalMocks.withProgress.mockReturnValue(mockApiResponseWithItems); const dirChildren = await globalMocks.testTree.getChildren(directory); - expect(dirChildren[0].label).toEqual(sampleChildren[0].label); + expect(dirChildren[1].label).toEqual(sampleChildren[0].label); }); it("Testing that getChildren() gets profile-loaded favorites for profile node in Favorites section", async () => { const globalMocks = await createGlobalMocks(); diff --git a/packages/zowe-explorer/__tests__/__unit__/uss/ZoweUSSNode.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/uss/ZoweUSSNode.unit.test.ts index bca60f415a..81b68c9097 100644 --- a/packages/zowe-explorer/__tests__/__unit__/uss/ZoweUSSNode.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/uss/ZoweUSSNode.unit.test.ts @@ -48,6 +48,7 @@ async function createGlobalMocks() { showInformationMessage: jest.fn(), getConfiguration: jest.fn(), downloadUSSFile: jest.fn(), + setStatusBarMessage: jest.fn().mockReturnValue({ dispose: jest.fn() }), showInputBox: jest.fn(), mockExecuteCommand: jest.fn(), mockLoadNamedProfile: jest.fn(), @@ -88,6 +89,10 @@ async function createGlobalMocks() { globalMocks.getUssApiMock.mockReturnValue(globalMocks.ussApi); ZoweExplorerApiRegister.getUssApi = globalMocks.getUssApiMock.bind(ZoweExplorerApiRegister); + Object.defineProperty(Gui, "setStatusBarMessage", { + value: globalMocks.setStatusBarMessage, + configurable: true, + }); Object.defineProperty(vscode.workspace, "onDidSaveTextDocument", { value: globalMocks.onDidSaveTextDocument, configurable: true, @@ -1067,13 +1072,7 @@ describe("ZoweUSSNode Unit Tests - Function node.openUSS()", () => { await node.openUSS(false, true, blockMocks.testUSSTree); expect(globalMocks.existsSync.mock.calls.length).toBe(1); expect(globalMocks.existsSync.mock.calls[0][0]).toBe(path.join(globals.USS_DIR, "/" + node.mProfileName + "/", node.fullPath)); - expect(globalMocks.withProgress).toBeCalledWith( - { - location: vscode.ProgressLocation.Notification, - title: "Opening USS file...", - }, - expect.any(Function) - ); + expect(globalMocks.setStatusBarMessage).toBeCalledWith("$(sync~spin) Opening USS file..."); // Tests that correct file is opened in editor globalMocks.withProgress(globalMocks.downloadUSSFile); @@ -1118,14 +1117,7 @@ describe("ZoweUSSNode Unit Tests - Function node.openUSS()", () => { await node.openUSS(false, true, blockMocks.testUSSTree); expect(globalMocks.existsSync.mock.calls.length).toBe(1); expect(globalMocks.existsSync.mock.calls[0][0]).toBe(path.join(globals.USS_DIR, "/" + node.mProfileName + "/", node.fullPath)); - expect(globalMocks.withProgress).toBeCalledWith( - { - location: vscode.ProgressLocation.Notification, - title: "Opening USS file...", - }, - expect.any(Function) - ); - + expect(globalMocks.setStatusBarMessage).toBeCalledWith("$(sync~spin) Opening USS file..."); // Tests that correct file is opened in editor globalMocks.withProgress(globalMocks.downloadUSSFile); expect(globalMocks.withProgress).toBeCalledWith(globalMocks.downloadUSSFile); @@ -1275,14 +1267,7 @@ describe("ZoweUSSNode Unit Tests - Function node.openUSS()", () => { await node.openUSS(false, true, blockMocks.testUSSTree); expect(globalMocks.existsSync.mock.calls.length).toBe(1); expect(globalMocks.existsSync.mock.calls[0][0]).toBe(path.join(globals.USS_DIR, "/" + node.getProfileName() + "/", node.fullPath)); - expect(globalMocks.withProgress).toBeCalledWith( - { - location: vscode.ProgressLocation.Notification, - title: "Opening USS file...", - }, - expect.any(Function) - ); - + expect(globalMocks.setStatusBarMessage).toBeCalledWith("$(sync~spin) Opening USS file..."); // Make sure correct file is displayed in the editor globalMocks.withProgress(globalMocks.downloadUSSFile); expect(globalMocks.openTextDocument.mock.calls.length).toBe(1); diff --git a/packages/zowe-explorer/__tests__/__unit__/uss/actions.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/uss/actions.unit.test.ts index 16e8c1902b..9a13be1323 100644 --- a/packages/zowe-explorer/__tests__/__unit__/uss/actions.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/uss/actions.unit.test.ts @@ -12,7 +12,7 @@ jest.mock("fs"); import * as zowe from "@zowe/cli"; -import { ProfilesCache, ValidProfileEnum, Gui } from "@zowe/zowe-explorer-api"; +import { Gui, ProfilesCache, ValidProfileEnum } from "@zowe/zowe-explorer-api"; import * as ussNodeActions from "../../../src/uss/actions"; import { createUSSTree, createUSSNode, createFavoriteUSSNode } from "../../../__mocks__/mockCreators/uss"; import { @@ -53,6 +53,7 @@ function createGlobalMocks() { withProgress: jest.fn(), writeText: jest.fn(), fileList: jest.fn(), + setStatusBarMessage: jest.fn().mockReturnValue({ dispose: jest.fn() }), showWarningMessage: jest.fn(), showErrorMessage: jest.fn(), createTreeView: jest.fn(), @@ -90,6 +91,7 @@ function createGlobalMocks() { const profilesForValidation = { status: "active", name: "fake" }; globals.initLogger(mock); + Object.defineProperty(Gui, "setStatusBarMessage", { value: globalMocks.setStatusBarMessage, configurable: true }); Object.defineProperty(vscode.window, "showInputBox", { value: globalMocks.mockShowInputBox, configurable: true }); Object.defineProperty(vscode.window, "showQuickPick", { value: globalMocks.showQuickPick, configurable: true }); Object.defineProperty(zowe, "Create", { value: globalMocks.Create, configurable: true }); @@ -148,6 +150,7 @@ function createGlobalMocks() { Object.defineProperty(globals.LOG, "error", { value: jest.fn(), configurable: true }); Object.defineProperty(globals.LOG, "warn", { value: jest.fn(), configurable: true }); Object.defineProperty(vscode, "ProgressLocation", { value: globalMocks.ProgressLocation, configurable: true }); + Object.defineProperty(vscode.workspace, "applyEdit", { value: jest.fn(), configurable: true }); Object.defineProperty(Profiles, "getInstance", { value: jest.fn(() => { return { @@ -488,6 +491,7 @@ describe("USS Action Unit Tests - Function saveUSSFile", () => { await ussNodeActions.saveUSSFile(blockMocks.testDoc, blockMocks.testUSSTree); expect(globalMocks.showErrorMessage.mock.calls.length).toBe(1); expect(globalMocks.showErrorMessage.mock.calls[0][0]).toBe("Save failed"); + expect(mocked(vscode.workspace.applyEdit)).toHaveBeenCalledTimes(2); }); it("Tests that saveUSSFile fails when error occurs", async () => { @@ -502,6 +506,7 @@ describe("USS Action Unit Tests - Function saveUSSFile", () => { await ussNodeActions.saveUSSFile(blockMocks.testDoc, blockMocks.testUSSTree); expect(globalMocks.showErrorMessage.mock.calls.length).toBe(1); expect(globalMocks.showErrorMessage.mock.calls[0][0]).toBe("Test Error Error: Test Error"); + expect(mocked(vscode.workspace.applyEdit)).toHaveBeenCalledTimes(2); }); it("Tests that saveUSSFile fails when HTTP error occurs", async () => { diff --git a/packages/zowe-explorer/i18n/sample/src/dataset/ZoweDatasetNode.i18n.json b/packages/zowe-explorer/i18n/sample/src/dataset/ZoweDatasetNode.i18n.json index 395acde648..060b66998f 100644 --- a/packages/zowe-explorer/i18n/sample/src/dataset/ZoweDatasetNode.i18n.json +++ b/packages/zowe-explorer/i18n/sample/src/dataset/ZoweDatasetNode.i18n.json @@ -1,7 +1,6 @@ { "getChildren.search": "Use the search button to display datasets", "getChildren.error.invalidNode": "Invalid node", - "getChildren.getDatasets.progress": "Get Dataset list command submitted.", "getChildren.responses.error": "The response from Zowe CLI was not successful", "getChildren.noDataset": "No datasets found", "getChildren.error.response": "Retrieving response from " diff --git a/packages/zowe-explorer/i18n/sample/src/dataset/actions.i18n.json b/packages/zowe-explorer/i18n/sample/src/dataset/actions.i18n.json index 2460830cd7..0a4b3b770a 100644 --- a/packages/zowe-explorer/i18n/sample/src/dataset/actions.i18n.json +++ b/packages/zowe-explorer/i18n/sample/src/dataset/actions.i18n.json @@ -22,6 +22,7 @@ "openPS.invalidNode": "openPS() called from invalid node.", "openPS.error.invalidNode": "openPS() called from invalid node. ", "openPS.log.debug.openDataSet": "opening physical sequential data set from label ", + "dataSet.opening": "$(sync~spin) Opening data set...", "openPS.log.error.openDataSet": "Error encountered when opening data set! ", "createFile.dataSetBinary": "Data Set Binary", "createFile.dataSetC": "Data Set C", @@ -95,5 +96,6 @@ "copyDataSet.replace.ps.question": "The physical sequential (PS) dataset already exists.\nDo you want to replace it?", "copyDataSet.replace.po.question": "The partitioned (PO) dataset already exists.\nDo you want to merge them while replacing any existing members?", "copyDataSet.log.error": "Error encountered when copy data set! ", - "copyDataSet.error": "Unable to copy data set: " + "copyDataSet.error": "Unable to copy data set: ", + "saveFile.log.error.save": "Error encountered when saving data set: " } diff --git a/packages/zowe-explorer/i18n/sample/src/job/ZoweJobNode.i18n.json b/packages/zowe-explorer/i18n/sample/src/job/ZoweJobNode.i18n.json index 28adf24756..1c9d853632 100644 --- a/packages/zowe-explorer/i18n/sample/src/job/ZoweJobNode.i18n.json +++ b/packages/zowe-explorer/i18n/sample/src/job/ZoweJobNode.i18n.json @@ -1,8 +1,6 @@ { "getChildren.search": "Use the search button to display jobs", - "ZoweJobNode.getJobs.spoolfiles": "Get Job Spool files command submitted.", "getChildren.noSpoolFiles": "There are no JES spool messages to display", - "ZoweJobNode.getJobs.jobs": "Get Jobs command submitted.", "getJobs.status.not.supported": "Filtering by job status is not yet supported with this profile type. Will show jobs with all statuses.", "getChildren.error.response": "Retrieving response from " } diff --git a/packages/zowe-explorer/i18n/sample/src/job/actions.i18n.json b/packages/zowe-explorer/i18n/sample/src/job/actions.i18n.json index 8c5c865a96..f0f5e1fa63 100644 --- a/packages/zowe-explorer/i18n/sample/src/job/actions.i18n.json +++ b/packages/zowe-explorer/i18n/sample/src/job/actions.i18n.json @@ -1,5 +1,6 @@ { "downloadSpool.select": "Select", + "jobActions.openSpoolFile": "$(sync~spin) Opening spool file...", "modifyCommand.inputBox.prompt": "Modify Command", "jobActions.modifyCommand.response": "Command response: ", "jobActions.modifyCommand.apiNonExisting": "Not implemented yet for profile of type: ", diff --git a/packages/zowe-explorer/i18n/sample/src/shared/utils.i18n.json b/packages/zowe-explorer/i18n/sample/src/shared/utils.i18n.json index f0293bec5a..33228514f1 100644 --- a/packages/zowe-explorer/i18n/sample/src/shared/utils.i18n.json +++ b/packages/zowe-explorer/i18n/sample/src/shared/utils.i18n.json @@ -11,5 +11,6 @@ "saveFile.overwriteConfirmation.yes": "Yes", "saveFile.overwriteConfirmation.no": "No", "uploadContent.cancelled": "Upload cancelled.", + "searchJobs.owner.invalid": "Invalid job owner", "searchJobs.prefix.invalid": "Invalid job prefix" } diff --git a/packages/zowe-explorer/i18n/sample/src/uss/ZoweUSSNode.i18n.json b/packages/zowe-explorer/i18n/sample/src/uss/ZoweUSSNode.i18n.json index c85c93e13b..33d21d03b5 100644 --- a/packages/zowe-explorer/i18n/sample/src/uss/ZoweUSSNode.i18n.json +++ b/packages/zowe-explorer/i18n/sample/src/uss/ZoweUSSNode.i18n.json @@ -1,6 +1,5 @@ { "getChildren.error.invalidNode": "Invalid node", - "ZoweUssNode.getList.progress": "Get USS file list command submitted.", "getChildren.error.response": "Retrieving response from ", "getChildren.responses.error.response": "The response from Zowe CLI was not successful", "getChildren.responses.open": "Open", @@ -9,6 +8,7 @@ "deleteUssNode.itemDeleted": "The item {0} has been deleted.", "openUSS.error.invalidNode": "open() called from invalid node.", "openUSS.name.exists": "There is already a file with the same name. Please change your OS file system settings if you want to give case sensitive file names", + "ussFile.opening": "$(sync~spin) Opening USS file...", "refreshUSS.error.invalidNode": "refreshUSS() called from invalid node.", "refreshUSS.error.notFound": "not found", "refreshUSS.file1": "Unable to find file: ", diff --git a/packages/zowe-explorer/package.json b/packages/zowe-explorer/package.json index 45ef81a527..0c61f29fc4 100644 --- a/packages/zowe-explorer/package.json +++ b/packages/zowe-explorer/package.json @@ -2,14 +2,14 @@ "name": "vscode-extension-for-zowe", "displayName": "%displayName%", "description": "%description%", - "version": "2.7.0-SNAPSHOT", + "version": "2.6.1-SNAPSHOT", "publisher": "Zowe", "author": "Zowe", "license": "EPL-2.0", "repository": { "url": "https://github.com/zowe/vscode-extension-for-zowe" }, - "icon": "resources/zowe_logo.png", + "icon": "resources/zowe-icon-color.png", "keywords": [ "mainframe", "dataset", @@ -1818,7 +1818,6 @@ "@types/promise-queue": "^2.2.0", "@types/selenium-webdriver": "^3.0.4", "@types/yargs": "^11.0.0", - "eslint-plugin-zowe-explorer": "2.7.0-SNAPSHOT", "@typescript-eslint/eslint-plugin": "^2.31.0", "@typescript-eslint/parser": "^2.31.0", "chai": "^4.1.2", @@ -1827,6 +1826,7 @@ "cross-env": "^5.2.0", "del": "^4.1.1", "eslint": "^6.8.0", + "eslint-plugin-zowe-explorer": "2.6.1-SNAPSHOT", "event-stream": "^4.0.1", "expect": "^24.8.0", "geckodriver": "^1.19.1", @@ -1852,7 +1852,7 @@ "webpack-cli": "^3.3.11" }, "dependencies": { - "@zowe/zowe-explorer-api": "2.7.0-SNAPSHOT", + "@zowe/zowe-explorer-api": "2.6.1-SNAPSHOT", "fs-extra": "8.0.1", "isbinaryfile": "4.0.4", "js-yaml": "3.13.1", diff --git a/packages/zowe-explorer/resources/bright.png b/packages/zowe-explorer/resources/bright.png deleted file mode 100644 index 14307f903b..0000000000 Binary files a/packages/zowe-explorer/resources/bright.png and /dev/null differ diff --git a/packages/zowe-explorer/resources/zowe-icon-color.png b/packages/zowe-explorer/resources/zowe-icon-color.png new file mode 100644 index 0000000000..373507df33 Binary files /dev/null and b/packages/zowe-explorer/resources/zowe-icon-color.png differ diff --git a/packages/zowe-explorer/resources/zowe_logo.png b/packages/zowe-explorer/resources/zowe_logo.png deleted file mode 100644 index ee98bf266d..0000000000 Binary files a/packages/zowe-explorer/resources/zowe_logo.png and /dev/null differ diff --git a/packages/zowe-explorer/src/abstract/ZoweTreeProvider.ts b/packages/zowe-explorer/src/abstract/ZoweTreeProvider.ts index f91c435bc1..0441382b50 100644 --- a/packages/zowe-explorer/src/abstract/ZoweTreeProvider.ts +++ b/packages/zowe-explorer/src/abstract/ZoweTreeProvider.ts @@ -260,4 +260,16 @@ export class ZoweTreeProvider { this.mHistory.removeSession(revisedLabel); this.refresh(); } + + /** + * Expand a node + * @param element the node being flipped + * @param provider the tree view provider + */ + public async expandSession(element: IZoweTreeNode, provider: IZoweTree) { + await provider.getTreeView().reveal(element, { expand: false }); + await provider.getTreeView().reveal(element, { expand: true }); + element.collapsibleState = vscode.TreeItemCollapsibleState.Expanded; + element.dirty = true; + } } diff --git a/packages/zowe-explorer/src/dataset/DatasetTree.ts b/packages/zowe-explorer/src/dataset/DatasetTree.ts index 673f14252a..bcd9e473a0 100644 --- a/packages/zowe-explorer/src/dataset/DatasetTree.ts +++ b/packages/zowe-explorer/src/dataset/DatasetTree.ts @@ -14,7 +14,7 @@ import * as nls from "vscode-nls"; import * as globals from "../globals"; import * as dsActions from "./actions"; -import { Gui, ValidProfileEnum, IZoweTree, IZoweDatasetTreeNode, PersistenceSchemaEnum } from "@zowe/zowe-explorer-api"; +import { Gui, ValidProfileEnum, IZoweTree, IZoweDatasetTreeNode, PersistenceSchemaEnum, NodeInteraction } from "@zowe/zowe-explorer-api"; import { Profiles } from "../Profiles"; import { ZoweExplorerApiRegister } from "../ZoweExplorerApiRegister"; import { FilterDescriptor, FilterItem, errorHandling, syncSessionNode } from "../utils/ProfilesUtils"; @@ -64,6 +64,7 @@ export class DatasetTree extends ZoweTreeProvider implements IZoweTree; @@ -873,6 +874,7 @@ export class DatasetTree extends ZoweTreeProvider implements IZoweTree ZoweExplorerApiRegister.getMvsApi(profileValue).getSession())(node); + await syncSessionNode(Profiles.getInstance())((profileValue) => ZoweExplorerApiRegister.getMvsApi(profileValue).getSession())( + nonFaveNode + ); let dataSet: IDataSet; const dsSets = []; const dsNames = pattern.split(","); @@ -1004,7 +1008,6 @@ export class DatasetTree extends ZoweTreeProvider implements IZoweTree { - return this.getDatasets(); - } - ); - + const responses = await this.getDatasets(); if (responses.length === 0) { return undefined; } diff --git a/packages/zowe-explorer/src/dataset/actions.ts b/packages/zowe-explorer/src/dataset/actions.ts index 3bea83d8b9..602045dbc3 100644 --- a/packages/zowe-explorer/src/dataset/actions.ts +++ b/packages/zowe-explorer/src/dataset/actions.ts @@ -32,7 +32,7 @@ import { getIconByNode } from "../generators/icons"; import { ZoweDatasetNode } from "./ZoweDatasetNode"; import { DatasetTree } from "./DatasetTree"; import * as contextually from "../shared/context"; -import { setFileSaved } from "../utils/workspace"; +import { markDocumentUnsaved, setFileSaved } from "../utils/workspace"; import { IUploadOptions } from "@zowe/zos-files-for-zowe-sdk"; // Set up localization @@ -398,6 +398,9 @@ export async function openPS(node: api.IZoweDatasetTreeNode, previewMember: bool if (datasetProvider) { await datasetProvider.checkCurrentProfile(node); } + + const doubleClicked = api.Gui.utils.wasDoubleClicked(node, datasetProvider); + const shouldPreview = doubleClicked ? false : previewMember; if (Profiles.getInstance().validProfile !== api.ValidProfileEnum.INVALID) { try { let label: string; @@ -420,29 +423,19 @@ export async function openPS(node: api.IZoweDatasetTreeNode, previewMember: bool // if local copy exists, open that instead of pulling from mainframe const documentFilePath = getDocumentFilePath(label, node); if (!fs.existsSync(documentFilePath)) { - const response = await api.Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: "Opening data set...", - }, - function downloadDataset() { - const prof = node.getProfile(); - return ZoweExplorerApiRegister.getMvsApi(prof).getContents(label, { - file: documentFilePath, - returnEtag: true, - encoding: prof.profile?.encoding, - responseTimeout: prof.profile?.responseTimeout, - }); - } - ); - node.setEtag(response.apiResponse.etag); + const prof = node.getProfile(); + const statusMsg = api.Gui.setStatusBarMessage(localize("dataSet.opening", "$(sync~spin) Opening data set...")); + const response = await ZoweExplorerApiRegister.getMvsApi(prof).getContents(label, { + file: documentFilePath, + returnEtag: true, + encoding: prof.profile.encoding, + responseTimeout: prof.profile?.responseTimeout, + }); + node.setEtag(response?.apiResponse?.etag); + statusMsg.dispose(); } const document = await vscode.workspace.openTextDocument(getDocumentFilePath(label, node)); - if (previewMember === true) { - await api.Gui.showTextDocument(document); - } else { - await api.Gui.showTextDocument(document, { preview: false }); - } + await api.Gui.showTextDocument(document, { preview: shouldPreview }); if (datasetProvider) { datasetProvider.addFileHistory(`[${node.getProfileName()}]: ${label}`); } @@ -1479,11 +1472,13 @@ export async function saveFile(doc: vscode.TextDocument, datasetProvider: api.IZ } } } else { + await markDocumentUnsaved(doc); api.Gui.errorMessage(uploadResponse.commandResponse); } } catch (err) { - globals.LOG.error(err); - api.Gui.errorMessage(err.message); + globals.LOG.error(localize("saveFile.log.error.save", "Error encountered when saving data set: ") + JSON.stringify(err)); + await markDocumentUnsaved(doc); + await errorHandling(err, sesName, err.message); } } diff --git a/packages/zowe-explorer/src/globals.ts b/packages/zowe-explorer/src/globals.ts index 38c1e49560..e6d44ae518 100644 --- a/packages/zowe-explorer/src/globals.ts +++ b/packages/zowe-explorer/src/globals.ts @@ -16,7 +16,7 @@ import * as loggerConfig from "../log4jsconfig.json"; // Set up localization import * as nls from "vscode-nls"; -import { getZoweDir, ProfilesCache } from "@zowe/zowe-explorer-api"; +import { getZoweDir } from "@zowe/zowe-explorer-api"; import { SettingsConfig } from "./utils/SettingsConfig"; nls.config({ @@ -100,6 +100,22 @@ export let PROFILE_SECURITY: string | boolean = ZOWE_CLI_SCM; export let SAVED_PROFILE_CONTENTS = new Uint8Array(); export const JOBS_MAX_PREFIX = 8; +// Dictionary describing translation from old configuration names to new standardized names +export const configurationDictionary = { + "Zowe-Default-Datasets-Binary": SETTINGS_DS_DEFAULT_BINARY, + "Zowe-Default-Datasets-C": SETTINGS_DS_DEFAULT_C, + "Zowe-Default-Datasets-Classic": SETTINGS_DS_DEFAULT_CLASSIC, + "Zowe-Default-Datasets-PDS": SETTINGS_DS_DEFAULT_PDS, + "Zowe-Default-Datasets-PS": SETTINGS_DS_DEFAULT_PS, + "Zowe-Temp-Folder-Location": SETTINGS_TEMP_FOLDER_PATH, + "Zowe Commands: History": SETTINGS_COMMANDS_HISTORY, + "Zowe Commands: Always edit": SETTINGS_COMMANDS_ALWAYS_EDIT, + "Zowe-Automatic-Validation": SETTINGS_AUTOMATIC_PROFILE_VALIDATION, + "Zowe-DS-Persistent": SETTINGS_DS_HISTORY, + "Zowe-USS-Persistent": SETTINGS_USS_HISTORY, + "Zowe-Jobs-Persistent": SETTINGS_JOBS_HISTORY, +}; + export enum CreateDataSetTypeWithKeysEnum { DATA_SET_BINARY, DATA_SET_C, diff --git a/packages/zowe-explorer/src/job/ZosJobsProvider.ts b/packages/zowe-explorer/src/job/ZosJobsProvider.ts index 79a4fcb541..c9c1fbd888 100644 --- a/packages/zowe-explorer/src/job/ZosJobsProvider.ts +++ b/packages/zowe-explorer/src/job/ZosJobsProvider.ts @@ -13,12 +13,12 @@ import * as vscode from "vscode"; import * as jobUtils from "../job/utils"; import * as globals from "../globals"; import { IJob, imperative } from "@zowe/cli"; -import { Gui, ValidProfileEnum, IZoweTree, IZoweJobTreeNode, PersistenceSchemaEnum } from "@zowe/zowe-explorer-api"; +import { Gui, ValidProfileEnum, IZoweTree, IZoweJobTreeNode, PersistenceSchemaEnum, NodeInteraction } from "@zowe/zowe-explorer-api"; import { FilterItem, errorHandling } from "../utils/ProfilesUtils"; import { Profiles } from "../Profiles"; import { ZoweExplorerApiRegister } from "../ZoweExplorerApiRegister"; import { Job } from "./ZoweJobNode"; -import { getAppName, sortTreeItems, labelRefresh, jobPrefixValidator } from "../shared/utils"; +import { getAppName, sortTreeItems, labelRefresh, jobStringValidator } from "../shared/utils"; import { ZoweTreeProvider } from "../abstract/ZoweTreeProvider"; import { getIconByNode } from "../generators/icons"; import * as contextually from "../shared/context"; @@ -84,9 +84,10 @@ export class ZosJobsProvider extends ZoweTreeProvider implements IZoweTree jobStringValidator(text, "owner"), }, { key: `prefix`, @@ -94,7 +95,7 @@ export class ZosJobsProvider extends ZoweTreeProvider implements IZoweTree jobPrefixValidator(text), + validateInput: (text) => jobStringValidator(text, "prefix"), }, { key: `job-status`, @@ -107,6 +108,7 @@ export class ZosJobsProvider extends ZoweTreeProvider implements IZoweTree prop.label === pattern).value, - placeHolder: jobProperties.find((prop) => prop.label === pattern).placeHolder, - validateInput: (text) => { - return jobProperties.find((prop) => prop.label === pattern)?.validateInput(text); - }, - }; - jobProperties.find((prop) => prop.label === pattern).value = await Gui.showInputBox(options); + let property = jobProperties.find((prop) => prop.label === pattern); + if (property != null) { + const options: vscode.InputBoxOptions = { + value: property.value, + placeHolder: property.placeHolder, + validateInput: (text) => { + return property.validateInput(text); + }, + }; + property.value = await Gui.showInputBox(options); + } } return Promise.resolve(this.handleEditingMultiJobParameters(jobProperties, node)); } private resetJobProperties(jobProperties: IJobPickerOption[]) { jobProperties.forEach((prop) => { if (prop.key === "owner") { - prop.value = undefined; + prop.value = ""; } if (prop.key === "prefix") { prop.value = "*"; diff --git a/packages/zowe-explorer/src/job/ZoweJobNode.ts b/packages/zowe-explorer/src/job/ZoweJobNode.ts index fd1c139722..9f3d306eea 100644 --- a/packages/zowe-explorer/src/job/ZoweJobNode.ts +++ b/packages/zowe-explorer/src/job/ZoweJobNode.ts @@ -87,20 +87,12 @@ export class Job extends ZoweTreeNode implements IZoweJobTreeNode { ]; } if (this.dirty) { - let spools: zowe.IJobFile[] = []; const elementChildren = []; if (contextually.isJob(this)) { - spools = await Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: localize("ZoweJobNode.getJobs.spoolfiles", "Get Job Spool files command submitted."), - }, - () => { - const cachedProfile = Profiles.getInstance().loadNamedProfile(this.getProfileName()); - return ZoweExplorerApiRegister.getJesApi(cachedProfile).getSpoolFiles(this.job.jobname, this.job.jobid); - } - ); - spools = spools + const cachedProfile = Profiles.getInstance().loadNamedProfile(this.getProfileName()); + const spools: zowe.IJobFile[] = ( + (await ZoweExplorerApiRegister.getJesApi(cachedProfile).getSpoolFiles(this.job.jobname, this.job.jobid)) ?? [] + ) // filter out all the objects which do not seem to be correct Job File Document types // see an issue #845 for the details .filter((item) => !(item.id === undefined && item.ddname === undefined && item.stepname === undefined)); @@ -155,15 +147,7 @@ export class Job extends ZoweTreeNode implements IZoweJobTreeNode { elementChildren.push(spoolNode); }); } else { - const jobs = await Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: localize("ZoweJobNode.getJobs.jobs", "Get Jobs command submitted."), - }, - () => { - return this.getJobs(this._owner, this._prefix, this._searchId, this._jobStatus); // change here - } - ); + const jobs = await this.getJobs(this._owner, this._prefix, this._searchId, this._jobStatus); jobs.forEach((job) => { let nodeTitle: string; if (job.retcode) { @@ -176,7 +160,6 @@ export class Job extends ZoweTreeNode implements IZoweJobTreeNode { elementChildren.push(existing); } else { const jobNode = new Job(nodeTitle, vscode.TreeItemCollapsibleState.Collapsed, this, this.session, job, this.getProfile()); - jobNode.command = { command: "zowe.zosJobsSelectjob", title: "", arguments: [jobNode] }; jobNode.contextValue = globals.JOBS_JOB_CONTEXT; if (job.retcode) { jobNode.contextValue += globals.RC_SUFFIX + job.retcode; diff --git a/packages/zowe-explorer/src/job/actions.ts b/packages/zowe-explorer/src/job/actions.ts index 33c7e92557..43f8d71254 100644 --- a/packages/zowe-explorer/src/job/actions.ts +++ b/packages/zowe-explorer/src/job/actions.ts @@ -70,6 +70,8 @@ export async function getSpoolContent(session: string, spool: zowe.IJobFile, ref await errorHandling(error, session, error.message); return; } + + const statusMsg = Gui.setStatusBarMessage(localize("jobActions.openSpoolFile", "$(sync~spin) Opening spool file...", this.label as string)); await profiles.checkCurrentProfile(zosmfProfile); if (profiles.validProfile !== ValidProfileEnum.INVALID) { const uri = toUniqueJobFileUri(session, spool)(refreshTimestamp.toString()); @@ -80,6 +82,7 @@ export async function getSpoolContent(session: string, spool: zowe.IJobFile, ref vscode.window.activeTextEditor && vscode.window.activeTextEditor.document.uri?.path === `${spool.jobname}.${spool.jobid}.${spool.ddname}`; + statusMsg.dispose(); if (isTextDocActive && String(error.message).includes("Failed to show text document")) { return; } @@ -87,6 +90,7 @@ export async function getSpoolContent(session: string, spool: zowe.IJobFile, ref return; } } + statusMsg.dispose(); } export async function getSpoolContentFromMainframe(node: IZoweJobTreeNode) { diff --git a/packages/zowe-explorer/src/shared/utils.ts b/packages/zowe-explorer/src/shared/utils.ts index 625b87b401..897c015c7c 100644 --- a/packages/zowe-explorer/src/shared/utils.ts +++ b/packages/zowe-explorer/src/shared/utils.ts @@ -335,6 +335,12 @@ export function getSelectedNodeList(node: IZoweTreeNode, nodeList: IZoweTreeNode * @param {string} text - prefix text * @returns undefined | string */ -export function jobPrefixValidator(text: string): any { - return text.length > globals.JOBS_MAX_PREFIX ? localize("searchJobs.prefix.invalid", "Invalid job prefix") : null; +export function jobStringValidator(text: string, localizedParam: "owner" | "prefix"): any { + switch (localizedParam) { + case "owner": + return text.length > globals.JOBS_MAX_PREFIX ? localize("searchJobs.owner.invalid", "Invalid job owner") : null; + case "prefix": + default: + return text.length > globals.JOBS_MAX_PREFIX ? localize("searchJobs.prefix.invalid", "Invalid job prefix") : null; + } } diff --git a/packages/zowe-explorer/src/uss/USSTree.ts b/packages/zowe-explorer/src/uss/USSTree.ts index 59d96a1d82..3568ed9991 100644 --- a/packages/zowe-explorer/src/uss/USSTree.ts +++ b/packages/zowe-explorer/src/uss/USSTree.ts @@ -15,7 +15,7 @@ import * as path from "path"; import { imperative } from "@zowe/cli"; import { FilterItem, FilterDescriptor, errorHandling, syncSessionNode } from "../utils/ProfilesUtils"; import { sortTreeItems, getAppName, checkIfChildPath } from "../shared/utils"; -import { Gui, IZoweTree, IZoweUSSTreeNode, ValidProfileEnum, PersistenceSchemaEnum } from "@zowe/zowe-explorer-api"; +import { Gui, IZoweTree, IZoweUSSTreeNode, NodeInteraction, ValidProfileEnum, PersistenceSchemaEnum } from "@zowe/zowe-explorer-api"; import { Profiles } from "../Profiles"; import { ZoweExplorerApiRegister } from "../ZoweExplorerApiRegister"; import { ZoweUSSNode } from "./ZoweUSSNode"; @@ -59,6 +59,7 @@ export class USSTree extends ZoweTreeProvider implements IZoweTree; constructor() { @@ -606,13 +607,13 @@ export class USSTree extends ZoweTreeProvider implements IZoweTree { - return ZoweExplorerApiRegister.getUssApi(cachedProfile).fileList(this.fullPath); - } - ) - ); + responses.push(await ZoweExplorerApiRegister.getUssApi(cachedProfile).fileList(this.fullPath)); } catch (err) { await errorHandling(err, this.label.toString(), localize("getChildren.error.response", "Retrieving response from ") + `uss-file-list`); await syncSessionNode(Profiles.getInstance())((profileValue) => ZoweExplorerApiRegister.getUssApi(profileValue).getSession())(sessNode); @@ -429,6 +419,9 @@ export class ZoweUSSNode extends ZoweTreeNode implements IZoweUSSTreeNode { */ public async openUSS(download = false, previewFile: boolean, ussFileProvider?: IZoweTree) { await ussFileProvider.checkCurrentProfile(this); + + const doubleClicked = Gui.utils.wasDoubleClicked(this, ussFileProvider); + const shouldPreview = doubleClicked ? false : previewFile; if (Profiles.getInstance().validProfile === ValidProfileEnum.VALID || Profiles.getInstance().validProfile === ValidProfileEnum.UNVERIFIED) { try { let label: string; @@ -465,22 +458,16 @@ export class ZoweUSSNode extends ZoweTreeNode implements IZoweUSSTreeNode { const fullPath = this.fullPath; const chooseBinary = this.binary || (await ZoweExplorerApiRegister.getUssApi(cachedProfile).isFileTagBinOrAscii(this.fullPath)); - const response = await Gui.withProgress( - { - location: vscode.ProgressLocation.Notification, - title: "Opening USS file...", - }, - function downloadUSSFile() { - return ZoweExplorerApiRegister.getUssApi(cachedProfile).getContents(fullPath, { - file: documentFilePath, - binary: chooseBinary, - returnEtag: true, - encoding: cachedProfile.profile?.encoding, - responseTimeout: cachedProfile.profile?.responseTimeout, - }); - } - ); + const statusMsg = Gui.setStatusBarMessage(localize("ussFile.opening", "$(sync~spin) Opening USS file...")); + const response = await ZoweExplorerApiRegister.getUssApi(cachedProfile).getContents(fullPath, { + file: documentFilePath, + binary: chooseBinary, + returnEtag: true, + encoding: cachedProfile.profile.encoding, + responseTimeout: cachedProfile.profile?.responseTimeout, + }); + statusMsg.dispose(); this.downloaded = true; this.setEtag(response.apiResponse.etag); } @@ -489,7 +476,7 @@ export class ZoweUSSNode extends ZoweTreeNode implements IZoweUSSTreeNode { ussFileProvider.addFileHistory(`[${this.getProfile().name}]: ${this.fullPath}`); ussFileProvider.getTreeView().reveal(this, { select: true, focus: true, expand: false }); - await this.initializeFileOpening(documentFilePath, previewFile); + await this.initializeFileOpening(documentFilePath, shouldPreview); } } catch (err) { await errorHandling(err, this.mProfileName, err.message); diff --git a/packages/zowe-explorer/src/uss/actions.ts b/packages/zowe-explorer/src/uss/actions.ts index 21a2db3a34..cb83363793 100644 --- a/packages/zowe-explorer/src/uss/actions.ts +++ b/packages/zowe-explorer/src/uss/actions.ts @@ -21,7 +21,7 @@ import { Profiles } from "../Profiles"; import { ZoweExplorerApiRegister } from "../ZoweExplorerApiRegister"; import { isBinaryFileSync } from "isbinaryfile"; import * as contextually from "../shared/context"; -import { setFileSaved } from "../utils/workspace"; +import { markDocumentUnsaved, setFileSaved } from "../utils/workspace"; import * as nls from "vscode-nls"; import { refreshAll } from "../shared/refresh"; import { IUploadOptions } from "@zowe/zos-files-for-zowe-sdk"; @@ -297,6 +297,7 @@ export async function saveUSSFile(doc: vscode.TextDocument, ussFileProvider: IZo setFileSaved(true); // this part never runs! zowe.Upload.fileToUSSFile doesn't return success: false, it just throws the error which is caught below!!!!! } else { + await markDocumentUnsaved(doc); Gui.errorMessage(uploadResponse.commandResponse); } } catch (err) { @@ -321,7 +322,6 @@ export async function saveUSSFile(doc: vscode.TextDocument, ussFileProvider: IZo if (downloadEtag !== etagToUpload) { node.setEtag(downloadEtag); } - this.downloaded = true; globals.LOG.warn(err); Gui.warningMessage( @@ -344,6 +344,7 @@ export async function saveUSSFile(doc: vscode.TextDocument, ussFileProvider: IZo } } else { globals.LOG.error(localize("saveUSSFile.log.error.save", "Error encountered when saving USS file: ") + JSON.stringify(err)); + await markDocumentUnsaved(doc); await errorHandling(err, sesName, err.message); } } diff --git a/packages/zowe-explorer/src/utils/SettingsConfig.ts b/packages/zowe-explorer/src/utils/SettingsConfig.ts index 5811e12616..5ca417002c 100644 --- a/packages/zowe-explorer/src/utils/SettingsConfig.ts +++ b/packages/zowe-explorer/src/utils/SettingsConfig.ts @@ -9,8 +9,8 @@ * * */ -import * as vscode from "vscode"; import * as globals from "../globals"; +import * as vscode from "vscode"; import * as nls from "vscode-nls"; import { Gui } from "@zowe/zowe-explorer-api"; @@ -67,21 +67,6 @@ export class SettingsConfig { await SettingsConfig.standardizeGlobalSettings(); } } - // Dictionary describing translation from old configuration names to new standardized names - private static configurationDictionary = { - "Zowe-Default-Datasets-Binary": globals.SETTINGS_DS_DEFAULT_BINARY, - "Zowe-Default-Datasets-C": globals.SETTINGS_DS_DEFAULT_C, - "Zowe-Default-Datasets-Classic": globals.SETTINGS_DS_DEFAULT_CLASSIC, - "Zowe-Default-Datasets-PDS": globals.SETTINGS_DS_DEFAULT_PDS, - "Zowe-Default-Datasets-PS": globals.SETTINGS_DS_DEFAULT_PS, - "Zowe-Temp-Folder-Location": globals.SETTINGS_TEMP_FOLDER_PATH, - "Zowe Commands: History": globals.SETTINGS_COMMANDS_HISTORY, - "Zowe Commands: Always edit": globals.SETTINGS_COMMANDS_ALWAYS_EDIT, - "Zowe-Automatic-Validation": globals.SETTINGS_AUTOMATIC_PROFILE_VALIDATION, - "Zowe-DS-Persistent": globals.SETTINGS_DS_HISTORY, - "Zowe-USS-Persistent": globals.SETTINGS_USS_HISTORY, - "Zowe-Jobs-Persistent": globals.SETTINGS_JOBS_HISTORY, - }; private static get configurations() { return vscode.workspace.getConfiguration(); @@ -123,9 +108,9 @@ export class SettingsConfig { globalValue = globalValue ? globalValue.folderPath : globalValue; } - const newSetting = SettingsConfig.configurationDictionary[configuration]; + const newSetting = globals.configurationDictionary[configuration]; - if (globalValue !== undefined) { + if (globalValue !== undefined && newSetting !== undefined) { await SettingsConfig.setDirectValue(newSetting, globalValue); globalIsMigrated = true; } @@ -154,9 +139,9 @@ export class SettingsConfig { workspaceValue = workspaceValue ? workspaceValue.folderPath : workspaceValue; } - const newSetting = SettingsConfig.configurationDictionary[configuration]; + const newSetting = globals.configurationDictionary[configuration]; - if (workspaceValue !== undefined) { + if (workspaceValue !== undefined && newSetting !== undefined) { await SettingsConfig.setDirectValue(newSetting, workspaceValue, vscode.ConfigurationTarget.Workspace); workspaceIsMigrated = true; } diff --git a/packages/zowe-explorer/src/utils/TreeViewUtils.ts b/packages/zowe-explorer/src/utils/TreeViewUtils.ts new file mode 100644 index 0000000000..99ef42a90f --- /dev/null +++ b/packages/zowe-explorer/src/utils/TreeViewUtils.ts @@ -0,0 +1,25 @@ +/* + * This program and the accompanying materials are made available under the terms of the * + * Eclipse Public License v2.0 which accompanies this distribution, and is available at * + * https://www.eclipse.org/legal/epl-v20.html * + * * + * SPDX-License-Identifier: EPL-2.0 * + * * + * Copyright Contributors to the Zowe Project. * + * * + */ + +import { IZoweTree } from "@zowe/zowe-explorer-api"; + +export class TreeViewUtils { + /** + * Temporary solution to fixing issue with VSCode multi-select bug + * (where multi-select is still active after deleting the nodes in previous multi-selection) + * @param treeProvider The tree provider to reset multi-selection for + */ + public static async fixVsCodeMultiSelect(treeProvider: IZoweTree): Promise { + const treeView = treeProvider.getTreeView(); + await treeView.reveal(treeProvider.mFavoriteSession, { select: true }); + await treeView.reveal(treeProvider.mFavoriteSession, { select: false }); + } +} diff --git a/packages/zowe-explorer/src/utils/workspace.ts b/packages/zowe-explorer/src/utils/workspace.ts index 5842559129..1485981ae7 100644 --- a/packages/zowe-explorer/src/utils/workspace.ts +++ b/packages/zowe-explorer/src/utils/workspace.ts @@ -156,3 +156,17 @@ export async function handleSaving( } ongoingSave = false; } + +/** + * Mark a text document as dirty (unsaved) if contents failed to upload. + * Based on https://stackoverflow.com/questions/74224108 + */ +export async function markDocumentUnsaved(document: vscode.TextDocument) { + const edits = new vscode.WorkspaceEdit(); + edits.insert(document.uri, new vscode.Position(0, 0), " "); + await vscode.workspace.applyEdit(edits); + + const edits2 = new vscode.WorkspaceEdit(); + edits2.delete(document.uri, new vscode.Range(new vscode.Position(0, 0), new vscode.Position(0, 1))); + await vscode.workspace.applyEdit(edits2); +} diff --git a/yarn.lock b/yarn.lock index c0df713267..6a8cb7873c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,7 +34,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.5", "@babel/core@^7.9.0": +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.9.0": version "7.17.10" resolved "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz#74ef0fbf56b7dfc3f198fc2d927f4f03e12f4b05" integrity sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA== @@ -1076,7 +1076,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.10", "@babel/traverse@^7.17.3", "@babel/traverse@^7.17.9": version "7.17.10" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz#1ee1a5ac39f4eac844e6cf855b35520e5eb6f8b5" integrity sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw== @@ -1130,14 +1130,6 @@ resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -1221,18 +1213,6 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - "@jest/console@^27.5.1": version "27.5.1" resolved "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" @@ -1257,40 +1237,6 @@ jest-util "^29.3.1" slash "^3.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - "@jest/core@^29.3.1": version "29.3.1" resolved "https://registry.npmjs.org/@jest/core/-/core-29.3.1.tgz#bff00f413ff0128f4debec1099ba7dcd649774a1" @@ -1325,16 +1271,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - "@jest/environment@^29.3.1": version "29.3.1" resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.3.1.tgz#eb039f726d5fcd14698acd072ac6576d41cfcaa6" @@ -1360,18 +1296,6 @@ expect "^29.3.1" jest-snapshot "^29.3.1" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - "@jest/fake-timers@^29.3.1": version "29.3.1" resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.3.1.tgz#b140625095b60a44de820876d4c14da1aa963f67" @@ -1384,15 +1308,6 @@ jest-mock "^29.3.1" jest-util "^29.3.1" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - "@jest/globals@^29.3.1": version "29.3.1" resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.3.1.tgz#92be078228e82d629df40c3656d45328f134a0c6" @@ -1403,38 +1318,6 @@ "@jest/types" "^29.3.1" jest-mock "^29.3.1" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - "@jest/reporters@^27.0.0": version "27.5.1" resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" @@ -1512,15 +1395,6 @@ graceful-fs "^4.1.15" source-map "^0.6.0" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - "@jest/source-map@^29.2.0": version "29.2.0" resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz#ab3420c46d42508dcc3dc1c6deee0b613c235744" @@ -1539,16 +1413,6 @@ "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - "@jest/test-result@^27.0.0", "@jest/test-result@^27.5.1": version "27.5.1" resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" @@ -1569,17 +1433,6 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - "@jest/test-sequencer@^29.3.1": version "29.3.1" resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.3.1.tgz#fa24b3b050f7a59d48f7ef9e0b782ab65123090d" @@ -1590,27 +1443,6 @@ jest-haste-map "^29.3.1" slash "^3.0.0" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/transform@^27.5.1": version "27.5.1" resolved "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" @@ -1662,17 +1494,6 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - "@jest/types@^27.0.0", "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -1897,17 +1718,6 @@ resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.19" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - "@types/babel__core@^7.1.14": version "7.1.20" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz#e168cdd612c92a2d335029ed62ac94c95b362359" @@ -1934,7 +1744,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.17.1" resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz#1a0e73e8c28c7e832656db372b779bfd2ef37314" integrity sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA== @@ -2071,16 +1881,6 @@ resolved "https://registry.npmjs.org/@types/node/-/node-14.18.16.tgz#878f670ba3f00482bf859b6550b6010610fc54b5" integrity sha512-X3bUMdK/VmvrWdoTkz+VCn6nwKwrKCFTHtqwBIaQJNx4RUIBBUFXM00bqPz/DsDd+Icjmzm6/tyYZzeGVqb6/Q== -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/prettier@^2.0.0": - version "2.6.0" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" - integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== - "@types/prettier@^2.1.5": version "2.7.1" resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" @@ -2145,13 +1945,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^16.0.0": version "16.0.4" resolved "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" @@ -2610,13 +2403,6 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - dependencies: - acorn "^3.0.4" - acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -2627,16 +2413,11 @@ acorn-walk@^7.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@5.X, acorn@^5.0.3, acorn@^5.5.0: +acorn@5.X, acorn@^5.0.3: version "5.7.4" resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - acorn@^6.4.1: version "6.4.2" resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" @@ -2686,26 +2467,11 @@ ajv-errors@^1.0.0: resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -2745,11 +2511,6 @@ ansi-cyan@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2776,7 +2537,7 @@ ansi-red@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-regex@^2.0.0, ansi-regex@^3.0.0, ansi-regex@^4.0.0, ansi-regex@^4.1.0, ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^2.0.0, ansi-regex@^3.0.0, ansi-regex@^4.0.0, ansi-regex@^4.1.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== @@ -3082,29 +2843,6 @@ azure-devops-node-api@^11.0.1: tunnel "0.0.6" typed-rest-client "^1.8.4" -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - babel-jest@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.3.1.tgz#05c83e0d128cd48c453eea851482a38782249f44" @@ -3125,7 +2863,7 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -3136,16 +2874,6 @@ babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^29.2.0: version "29.2.0" resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz#23ee99c37390a98cfddf3ef4a78674180d823094" @@ -3198,14 +2926,6 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - babel-preset-jest@^29.2.0: version "29.2.0" resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz#3048bea3a1af222e3505e4a767a974c95a7620dc" @@ -3612,18 +3332,6 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -3639,7 +3347,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@^6.2.0: version "6.3.0" resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== @@ -3654,13 +3362,6 @@ caniuse-lite@^1.0.30001400: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" @@ -3733,11 +3434,6 @@ char-regex@^1.0.2: resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3831,11 +3527,6 @@ chrome-trace-event@^1.0.2: resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - ci-info@^3.2.0: version "3.3.0" resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" @@ -3849,16 +3540,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - cjs-module-lexer@^1.0.0: version "1.2.2" resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" @@ -3879,13 +3560,6 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -3902,11 +3576,6 @@ cli-table3@0.6.2: optionalDependencies: "@colors/colors" "1.5.0" -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - cli-width@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -4243,16 +3912,7 @@ cross-env@^5.2.0: dependencies: cross-spawn "^6.0.5" -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -4263,7 +3923,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4402,7 +4062,7 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@3.X, debug@^3.1.0: +debug@3.X: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -4575,11 +4235,6 @@ diff-sequences@^24.9.0: resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - diff-sequences@^27.0.6, diff-sequences@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" @@ -4646,13 +4301,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - doctrine@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -4760,11 +4408,6 @@ emittery@^0.13.1: resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -4960,14 +4603,6 @@ eslint-plugin-prettier@^4.0.0: dependencies: prettier-linter-helpers "^1.0.0" -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -5013,7 +4648,7 @@ eslint-utils@^3.0.0: dependencies: eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: +eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -5028,50 +4663,6 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^4.18.2: - version "4.19.1" - resolved "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - eslint@^6.8.0: version "6.8.0" resolved "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" @@ -5156,14 +4747,6 @@ eslint@^8.11.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^3.5.4: - version "3.5.4" - resolved "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - espree@^6.1.2: version "6.2.1" resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" @@ -5187,7 +4770,7 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.0, esquery@^1.0.1, esquery@^1.4.0: +esquery@^1.0.1, esquery@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== @@ -5263,39 +4846,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -5353,18 +4903,6 @@ expect@^24.8.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - expect@^29.0.0, expect@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz#92877aad3f7deefc2e3f6430dd195b92295554a6" @@ -5410,15 +4948,6 @@ extend@^3.0.0: resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - external-editor@^3.0.3: version "3.1.0" resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" @@ -5452,11 +4981,6 @@ fancy-log@^1.3.2, fancy-log@^1.3.3: parse-node-version "^1.0.0" time-stamp "^1.0.0" -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5535,13 +5059,6 @@ figgy-pudding@^3.5.1: resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - figures@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5549,14 +5066,6 @@ figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -5677,16 +5186,6 @@ flagged-respawn@^1.0.0: resolved "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -5840,7 +5339,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -5957,20 +5456,6 @@ get-stream@6.0.1, get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -6097,7 +5582,7 @@ global-prefix@^3.0.0: kind-of "^6.0.2" which "^1.3.1" -globals@^11.0.1, globals@^11.1.0: +globals@^11.1.0: version "11.12.0" resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -6168,7 +5653,7 @@ got@5.6.0: unzip-response "^1.0.0" url-parse-lax "^1.0.0" -graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -6178,11 +5663,6 @@ growl@1.10.5: resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - gulp-cli@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz#ec0d380e29e52aa45e47977f0d32e18fd161122f" @@ -6493,11 +5973,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -6515,7 +5990,7 @@ husky@^6.0.0: resolved "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6546,11 +6021,6 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore@^3.3.3: - version "3.3.10" - resolved "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - ignore@^4.0.6: version "4.0.6" resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -6638,26 +6108,6 @@ ini@~2.0.0: resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - inquirer@^7.0.0: version "7.3.3" resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" @@ -6772,13 +6222,6 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - is-core-module@^2.8.1: version "2.9.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -6825,11 +6268,6 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -6988,11 +6426,6 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" @@ -7005,7 +6438,7 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -7068,13 +6501,6 @@ is-wsl@^1.1.0: resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - is@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/is/-/is-3.3.0.tgz#61cff6dd3c4193db94a3d62582072b44e5645d79" @@ -7117,16 +6543,6 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - 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" - istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz#31d18bdd127f825dd02ea7bfdfd906f8ab840e9f" @@ -7156,7 +6572,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: +istanbul-reports@^3.1.3: version "3.1.4" resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== @@ -7164,15 +6580,6 @@ istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - jest-changed-files@^29.2.0: version "29.2.0" resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz#b6598daa9803ea6a4dce7968e20ab380ddbee289" @@ -7206,25 +6613,6 @@ jest-circus@^29.3.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - jest-cli@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.3.1.tgz#e89dff427db3b1df50cea9a393ebd8640790416d" @@ -7243,30 +6631,6 @@ jest-cli@^29.3.1: prompts "^2.0.1" yargs "^17.3.1" -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - jest-config@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.3.1.tgz#0bc3dcb0959ff8662957f1259947aedaefb7f3c6" @@ -7315,16 +6679,6 @@ jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - jest-diff@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" @@ -7345,13 +6699,6 @@ jest-diff@^29.3.1: jest-get-type "^29.2.0" pretty-format "^29.3.1" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - jest-docblock@^29.2.0: version "29.2.0" resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz#307203e20b637d97cee04809efc1d43afc641e82" @@ -7359,17 +6706,6 @@ jest-docblock@^29.2.0: dependencies: detect-newline "^3.0.0" -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - jest-each@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.3.1.tgz#bc375c8734f1bb96625d83d1ca03ef508379e132" @@ -7381,31 +6717,6 @@ jest-each@^29.3.1: jest-util "^29.3.1" pretty-format "^29.3.1" -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jest-environment-node@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.3.1.tgz#5023b32472b3fba91db5c799a0d5624ad4803e74" @@ -7423,11 +6734,6 @@ jest-get-type@^24.9.0: resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - jest-get-type@^27.0.6, jest-get-type@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" @@ -7438,27 +6744,6 @@ jest-get-type@^29.2.0: resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz#726646f927ef61d583a3b3adb1ab13f3a5036408" integrity sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA== -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - jest-haste-map@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" @@ -7515,30 +6800,6 @@ jest-html-reporter@^3.7.0: strip-ansi "6.0.1" xmlbuilder "15.0.0" -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - jest-junit@^15.0.0: version "15.0.0" resolved "https://registry.npmjs.org/jest-junit/-/jest-junit-15.0.0.tgz#a47544ab42e9f8fe7ada56306c218e09e52bd690" @@ -7549,14 +6810,6 @@ jest-junit@^15.0.0: uuid "^8.3.2" xml "^1.0.1" -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - jest-leak-detector@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.3.1.tgz#95336d020170671db0ee166b75cd8ef647265518" @@ -7575,16 +6828,6 @@ jest-matcher-utils@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - jest-matcher-utils@^27.0.0: version "27.5.1" resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" @@ -7619,21 +6862,6 @@ jest-message-util@^24.9.0: slash "^2.0.0" stack-utils "^1.0.1" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - jest-message-util@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" @@ -7664,14 +6892,6 @@ jest-message-util@^29.3.1: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.3.1.tgz#60287d92e5010979d01f218c6b215b688e0f313e" @@ -7691,11 +6911,6 @@ jest-regex-util@^24.9.0: resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - jest-regex-util@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" @@ -7706,15 +6921,6 @@ jest-regex-util@^29.2.0: resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz#82ef3b587e8c303357728d0322d48bbfd2971f7b" integrity sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA== -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - jest-resolve-dependencies@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.3.1.tgz#a6a329708a128e68d67c49f38678a4a4a914c3bf" @@ -7723,20 +6929,6 @@ jest-resolve-dependencies@^29.3.1: jest-regex-util "^29.2.0" jest-snapshot "^29.3.1" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - jest-resolve@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" @@ -7768,32 +6960,6 @@ jest-resolve@^29.3.1: resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - jest-runner@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.3.1.tgz#a92a879a47dd096fea46bb1517b0a99418ee9e2d" @@ -7821,39 +6987,6 @@ jest-runner@^29.3.1: p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - jest-runtime@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.3.1.tgz#21efccb1a66911d6d8591276a6182f520b86737a" @@ -7882,14 +7015,6 @@ jest-runtime@^29.3.1: slash "^3.0.0" strip-bom "^4.0.0" -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - jest-serializer@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" @@ -7898,28 +7023,6 @@ jest-serializer@^27.5.1: "@types/node" "*" graceful-fs "^4.2.9" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - jest-snapshot@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.3.1.tgz#17bcef71a453adc059a18a32ccbd594b8cc4e45e" @@ -7972,18 +7075,6 @@ jest-stare@^2.4.1: popper.js "^1.16.1" yargs "^17.0.0" -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - jest-util@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" @@ -8008,18 +7099,6 @@ jest-util@^29.0.0, jest-util@^29.3.1: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== - dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" - jest-validate@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" @@ -8044,19 +7123,6 @@ jest-validate@^29.3.1: leven "^3.1.0" pretty-format "^29.3.1" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== - dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" - jest-watcher@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.3.1.tgz#3341547e14fe3c0f79f9c3a4c62dbc3fc977fd4a" @@ -8071,15 +7137,6 @@ jest-watcher@^29.3.1: jest-util "^29.3.1" string-length "^4.0.1" -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -8099,15 +7156,6 @@ jest-worker@^29.3.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^26.0.1: - version "26.6.3" - resolved "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== - dependencies: - "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" - jest@^29.3.1: version "29.3.1" resolved "https://registry.npmjs.org/jest/-/jest-29.3.1.tgz#c130c0d551ae6b5459b8963747fed392ddbde122" @@ -8123,11 +7171,6 @@ jquery@^3.5.1: resolved "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8148,7 +7191,7 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -js-yaml@^3.13.1, js-yaml@^3.9.1: +js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -8184,7 +7227,7 @@ jsdoc@^3.6.3: taffydb "2.6.2" underscore "~1.13.2" -jsdom@^16.0.0, jsdom@^16.4.0: +jsdom@^16.0.0: version "16.7.0" resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== @@ -8237,11 +7280,6 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -8525,7 +7563,7 @@ lodash.merge@^4.6.2: resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@4.17.21, lodash@>=3.7.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.7.0: +lodash@4.17.21, lodash@>=3.7.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.7.0: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -8572,14 +7610,6 @@ lowercase-keys@^1.0.0: resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -8834,7 +7864,7 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.4: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -8867,11 +7897,6 @@ mime@^1.3.4: resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -8897,14 +7922,14 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@5.0.1, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@~3.0.5: +minimatch@3.0.4, minimatch@5.0.1, minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@~3.0.5: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.7" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== @@ -9134,11 +8159,6 @@ mute-stdout@^1.0.0: resolved "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331" integrity sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg== -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -9272,18 +8292,6 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-releases@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" @@ -9306,7 +8314,7 @@ nopt@1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -9407,14 +8415,7 @@ npm-registry-fetch@^8.0.0: minizlib "^2.0.0" npm-package-arg "^8.0.0" -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -9554,13 +8555,6 @@ once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -9573,7 +8567,7 @@ opener@1.5.2: resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optionator@^0.8.1, optionator@^0.8.2, optionator@^0.8.3: +optionator@^0.8.1, optionator@^0.8.3: version "0.8.3" resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -9626,16 +8620,6 @@ p-defer@^1.0.0: resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -9785,7 +8769,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0, parse-json@^5.2.0: +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -9861,7 +8845,7 @@ path-is-inside@^1.0.2: resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0, path-key@^2.0.1: +path-key@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= @@ -9974,7 +8958,7 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pirates@^4.0.1, pirates@^4.0.4: +pirates@^4.0.4: version "4.0.5" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== @@ -10028,11 +9012,6 @@ plugin-error@^1.0.1: arr-union "^3.1.0" extend-shallow "^3.0.2" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - popper.js@^1.16.1: version "1.16.1" resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" @@ -10099,16 +9078,6 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - pretty-format@^27.0.0, pretty-format@^27.0.6, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -10199,11 +9168,6 @@ prr@~1.0.1: resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - psl@^1.1.33: version "1.8.0" resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -10352,15 +9316,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -10379,16 +9334,6 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - read@1.0.7, read@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" @@ -10497,11 +9442,6 @@ regexp.prototype.flags@^1.4.3: define-properties "^1.1.3" functions-have-names "^1.2.2" -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -10597,14 +9537,6 @@ require-main-filename@^2.0.0: resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - requireindex@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" @@ -10639,11 +9571,6 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -10676,7 +9603,7 @@ resolve.exports@^1.1.0: resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.4.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.4.0: version "1.22.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -10685,14 +9612,6 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -10733,7 +9652,7 @@ rimraf@2, rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: dependencies: glob "^7.1.3" -rimraf@2.6.3, rimraf@~2.6.2: +rimraf@2.6.3: version "2.6.3" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -10755,12 +9674,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.4.0: version "2.4.1" resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== @@ -10798,18 +9712,6 @@ run-sequence@^2.2.1: fancy-log "^1.3.2" plugin-error "^0.1.2" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - rxjs@^6.5.2, rxjs@^6.6.0: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" @@ -10839,21 +9741,6 @@ safe-regex@^1.1.0: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - sax@>=0.6.0: version "1.2.4" resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -10892,7 +9779,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -10990,11 +9877,6 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - side-channel@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -11065,13 +9947,6 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - dependencies: - is-fullwidth-code-point "^2.0.0" - slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -11157,7 +10032,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.17, source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.17, source-map-support@~0.5.12: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -11277,7 +10152,7 @@ stack-utils@^1.0.1: dependencies: escape-string-regexp "^2.0.0" -stack-utils@^2.0.2, stack-utils@^2.0.3: +stack-utils@^2.0.3: version "2.0.5" resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== @@ -11379,7 +10254,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2": version "2.1.1" resolved "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -11478,11 +10353,6 @@ strip-bom@^4.0.0: resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" @@ -11564,18 +10434,6 @@ symbol-tree@^3.2.4: resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - table@^5.2.3: version "5.4.6" resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" @@ -11670,16 +10528,11 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - through2-filter@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" @@ -11947,11 +10800,6 @@ type-fest@^0.21.3: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - type-fest@^0.8.1: version "0.8.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" @@ -12207,7 +11055,7 @@ util@^0.11.0: dependencies: inherits "2.0.3" -uuid@^8.3.0, uuid@^8.3.2: +uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -12217,15 +11065,6 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" @@ -12404,7 +11243,7 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: +walker@^1.0.7, walker@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== @@ -12654,13 +11493,6 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - ws@^7.4.6: version "7.5.7" resolved "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" @@ -12729,11 +11561,6 @@ y18n@^5.0.5: resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - yallist@^3.0.2: version "3.1.1" resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -12760,7 +11587,7 @@ yargs-parser@13.1.2, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^18.1.1, yargs-parser@^18.1.2: +yargs-parser@^18.1.1: version "18.1.3" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== @@ -12828,23 +11655,6 @@ yargs@15.3.1: y18n "^4.0.0" yargs-parser "^18.1.1" -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - 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, yargs@^17.3.0: version "17.4.1" resolved "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz#ebe23284207bb75cee7c408c33e722bfb27b5284"