diff --git a/.devcontainer/cache/before-cache.sh b/.devcontainer/cache/before-cache.sh new file mode 100644 index 0000000..78511d2 --- /dev/null +++ b/.devcontainer/cache/before-cache.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# This file establishes a basline for the repository before any steps in the "prepare.sh" +# are run. Its just a find command that filters out a few things we don't need to watch. + +set -e +SOURCE_FOLDER="${1:-"."}" +CACHE_FOLDER="${2:-"$HOME/.devcontainer-cache"}" + +cd "${SOURCE_FOLDER}" +echo "[$(date)] Generating ""before"" manifest..." +mkdir -p "${CACHE_FOLDER}" +find -L . -not -path "*/.git/*" -and -not -path "${CACHE_FOLDER}/*.manifest" -type f > "${CACHE_FOLDER}/before.manifest" +echo "[$(date)] Done!" + diff --git a/.devcontainer/cache/build-cache-image.sh b/.devcontainer/cache/build-cache-image.sh new file mode 100644 index 0000000..451d1ab --- /dev/null +++ b/.devcontainer/cache/build-cache-image.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# This file simply wraps the docker build command to build an image that includes +# a cache.tar file with the result of "prepare.sh" inside of it. See cache.Dockerfile +# for the steps that are actually taken to do this. + +set -e + +SCRIPT_PATH="$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)" +CONTAINER_IMAGE_REPOSITORY="$1" +BRANCH="${2:-"main"}" + +if [ "${CONTAINER_IMAGE_REPOSITORY}" = "" ]; then + echo "Container repository not specified!" + exit 1 +fi + +TAG="branch-${BRANCH//\//-}" +echo "[$(date)] ${BRANCH} => ${TAG}" +cd "${SCRIPT_PATH}/../.." + +echo "[$(date)] Starting image build and push..." +export DOCKER_BUILDKIT=1 +docker buildx create --use --name vscode-dev-containers +docker run --privileged --rm tonistiigi/binfmt --install all +docker buildx build --push --platform linux/amd64,linux/arm64 -t ${CONTAINER_IMAGE_REPOSITORY}:"${TAG}" -f "${SCRIPT_PATH}/cache.Dockerfile" . + +echo "[$(date)] Done!" diff --git a/.devcontainer/cache/cache-diff.sh b/.devcontainer/cache/cache-diff.sh new file mode 100644 index 0000000..c2444b8 --- /dev/null +++ b/.devcontainer/cache/cache-diff.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# This file is used to archive off a copy of any differences in the source tree into another location +# in the image. Once the codespace / container is up, this will be restored into its proper location. + +set -e + +SOURCE_FOLDER="${1:-"."}" +CACHE_FOLDER="${2:-"$HOME/.devcontainer-cache"}" + +if [ ! -d "${CACHE_FOLDER}" ]; then + echo "No cache folder found. Be sure to run before-cache.sh to set one up." + exit 1 +fi + +echo "[$(date)] Starting cache operation..." +cd "${SOURCE_FOLDER}" +echo "[$(date)] Determining diffs..." +find -L . -not -path "*/.git/*" -and -not -path "${CACHE_FOLDER}/*.manifest" -type f > "${CACHE_FOLDER}/after.manifest" +grep -Fxvf "${CACHE_FOLDER}/before.manifest" "${CACHE_FOLDER}/after.manifest" > "${CACHE_FOLDER}/cache.manifest" +echo "[$(date)] Archiving diffs..." +tar -cf "${CACHE_FOLDER}/cache.tar" --totals --files-from "${CACHE_FOLDER}/cache.manifest" +echo "[$(date)] Done! $(du -h "${CACHE_FOLDER}/cache.tar")" diff --git a/.devcontainer/cache/cache.Dockerfile b/.devcontainer/cache/cache.Dockerfile new file mode 100644 index 0000000..217122a --- /dev/null +++ b/.devcontainer/cache/cache.Dockerfile @@ -0,0 +1,24 @@ +# This dockerfile is used to build up from a base image to create an image a cache.tar file containing the results of running "prepare.sh". +# Other image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile + +# This first stage generates cache.tar +FROM mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:dev as cache +ARG USERNAME=node +ARG CACHE_FOLDER="/home/${USERNAME}/.devcontainer-cache" +COPY --chown=${USERNAME}:${USERNAME} . /repo-source-tmp/ +RUN mkdir -p ${CACHE_FOLDER} && chown ${USERNAME} ${CACHE_FOLDER} /repo-source-tmp \ + && su ${USERNAME} -c "\ + cd /repo-source-tmp \ + && .devcontainer/cache/before-cache.sh . ${CACHE_FOLDER} \ + && .devcontainer/prepare.sh . ${CACHE_FOLDER} \ + && .devcontainer/cache/cache-diff.sh . ${CACHE_FOLDER}" + +# This second stage starts fresh and just copies in cache.tar from the previous stage. The related +# devcontainer.json file is then setup to have postCreateCommand fire restore-diff.sh to expand it. +FROM mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:dev as dev-container +ARG USERNAME=node +ARG CACHE_FOLDER="/home/${USERNAME}/.devcontainer-cache" +RUN mkdir -p "${CACHE_FOLDER}" \ + && chown "${USERNAME}:${USERNAME}" "${CACHE_FOLDER}" \ + && su ${USERNAME} -c "git config --global codespaces-theme.hide-status 1" +COPY --from=cache ${CACHE_FOLDER}/cache.tar ${CACHE_FOLDER}/ diff --git a/.devcontainer/cache/restore-diff.sh b/.devcontainer/cache/restore-diff.sh new file mode 100644 index 0000000..e8ea93f --- /dev/null +++ b/.devcontainer/cache/restore-diff.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# This file expands the cache.tar file in the image that contains the results of "prepare.sh" +# on top of the source tree. It runs as a postCreateCommand which runs after the container/codespace +# is already up where you would typically run a command like "yarn install". + +set -e +SOURCE_FOLDER="$(cd "${1:-"."}" && pwd)" +CACHE_FOLDER="${2:-"$HOME/.devcontainer-cache"}" + +if [ ! -d "${CACHE_FOLDER}" ]; then + echo "No cache folder found." + exit 0 +fi + +echo "[$(date)] Expanding $(du -h "${CACHE_FOLDER}/cache.tar") file to ${SOURCE_FOLDER}..." +cd "${SOURCE_FOLDER}" +# Ensure user/group is correct if the UID/GID was changed for some reason +echo "+1000 +$(id -u)" > "${CACHE_FOLDER}/cache-owner-map" +echo "+1000 +$(id -g)" > "${CACHE_FOLDER}/cache-group-map" +# Untar to workspace folder, preserving permissions and order, but mapping GID/UID if required +tar --owner-map="${CACHE_FOLDER}/cache-owner-map" --group-map="${CACHE_FOLDER}/cache-group-map" -xpsf "${CACHE_FOLDER}/cache.tar" +rm -rf "${CACHE_FOLDER}" +echo "[$(date)] Done!" + +# Change ownership of chrome-sandbox +sudo chown root .build/electron/chrome-sandbox +sudo chmod 4755 .build/electron/chrome-sandbox + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..3e40ce6 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,40 @@ +{ + "name": "Code - OSS", + + // Image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile + "image": "mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:branch-main", + "overrideCommand": false, + "runArgs": [ "--init", "--security-opt", "seccomp=unconfined", "--shm-size=1g"], + + "settings": { + "resmon.show.battery": false, + "resmon.show.cpufreq": false + }, + + // noVNC, VNC + "forwardPorts": [6080, 5901], + "portsAttributes": { + "6080": { + "label": "VNC web client (noVNC)", + "onAutoForward": "silent" + }, + "5901": { + "label": "VNC TCP port", + "onAutoForward": "silent" + } + }, + + "extensions": [ + "dbaeumer.vscode-eslint", + "mutantdino.resourcemonitor" + ], + + // Optionally loads a cached yarn install for the repo + "postCreateCommand": ".devcontainer/cache/restore-diff.sh", + + "remoteUser": "node", + + "hostRequirements": { + "memory": "8gb" + } +} diff --git a/.devcontainer/prepare.sh b/.devcontainer/prepare.sh new file mode 100644 index 0000000..9b5c81f --- /dev/null +++ b/.devcontainer/prepare.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +# This file contains the steps that should be run when building a "cache" image with contents that should be +# layered directly **on top of the source tree** once a dev container is created. This avoids having to run long +# running commands like "yarn install" from the ground up. Developers (and should) still run these commands +# after the actual dev container is created, but only differences will be processed. + +yarn install +yarn electron diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 7b6c16f..81c639f 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -5,6 +5,6 @@ RUN sudo apt-get update \ g++ gcc make python2.7 pkg-config libx11-dev libxkbfile-dev libsecret-1-dev python-is-python3 rsync \ && sudo rm -rf /var/lib/apt/lists/* -RUN bash -c 'VERSION="16.9.1" && source $HOME/.nvm/nvm.sh && nvm install $VERSION && nvm use $VERSION && nvm alias default $VERSION' +RUN bash -c 'VERSION="16.17.0" && source $HOME/.nvm/nvm.sh && nvm install $VERSION && nvm use $VERSION && nvm alias default $VERSION' RUN echo "nvm use default &>/dev/null" >> ~/.bashrc.d/51-nvm-fix diff --git a/.gitpod.yml b/.gitpod.yml index cb58aca..c8c7bbe 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -32,4 +32,7 @@ github: # add a "Review in Gitpod" button to the pull request's description (defaults to false) addBadge: false # add a label once the prebuild is ready to pull requests (defaults to false) - addLabel: false \ No newline at end of file + addLabel: false +vscode: + extensions: + - mutantdino.resourcemonitor \ No newline at end of file diff --git a/1.sh b/1.sh deleted file mode 100644 index 186f73b..0000000 --- a/1.sh +++ /dev/null @@ -1,19 +0,0 @@ -cd D:/liuyuqi/github/git/gogs1s/ - -cp --path vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/browser/workbench.contribution.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/services/themes/common/themeConfiguration.ts bak -cp --path vscode-web-gogs1s/src/vs/code/browser/workbench/workbench.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.css bak -cp --path vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts bak -cp --path vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/media/activitybarpart.css bak -cp --path vscode-web-gogs1s/src/vs/platform/product/common/product.ts bak -cp --path vscode-web-gogs1s/src/vs/gogs1s/notification.ts bak -cp --path vscode-web-gogs1s/src/vs/gogs1s/notification.css bak -cp --path vscode-web-gogs1s/src/vs/gogs1s/util.ts bak diff --git a/extensions/jupyter-web/LICENSE b/extensions/jupyter-web/LICENSE deleted file mode 100644 index a7d89b6..0000000 --- a/extensions/jupyter-web/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Jithu R Jacob - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/extensions/jupyter-web/README.md b/extensions/jupyter-web/README.md deleted file mode 100644 index 895507f..0000000 --- a/extensions/jupyter-web/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# This extension is a fork from [vscode-nbpreviewer](https://github.com/jithurjacob/vscode-nbpreviewer) for github1s - -# I have deleted some files and only reserved the necessary code - -# vscode-nbpreviewer - -An extension for supercharging your Data Science workflow by previewing Jupyter Notebook within VS Code. View graphs and interact with Plotly visualizations from within VS Code. - -

-

- logo -

- -## Preview - -> ![nbpreviewer demo](https://thumbs.gfycat.com/FarawayTerrificChameleon-max-14mb.gif) - -## Quick Start - -- Install the extension -- Open a Jupyter Notebook -- Click Show Preview menu button from Editor/Title Menu - -> ![nbpreviewer quick start](https://thumbs.gfycat.com/ImaginativeCooperativeDogwoodtwigborer-max-14mb.gif) diff --git a/extensions/jupyter-web/extension.webpack.config.js b/extensions/jupyter-web/extension.webpack.config.js deleted file mode 100644 index c96c3e9..0000000 --- a/extensions/jupyter-web/extension.webpack.config.js +++ /dev/null @@ -1,41 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -//@ts-check -"use strict"; - -//@ts-check -/** @typedef {import('webpack').Configuration} WebpackConfig **/ - -const path = require("path"); - -module.exports = /** @type WebpackConfig */ { - context: __dirname, - mode: "none", // this leaves the source code as close as possible to the original (when packaging we set this to 'production') - target: "webworker", // extensions run in a webworker context - entry: { - extension: "./src/extension.js", - }, - resolve: { - mainFields: ["module", "main"], - extensions: [".ts", ".js"], // support ts-files and js-files - alias: { - https: "https-browserify", - http: "http-browserify", - }, - }, - externals: { - vscode: "commonjs vscode", // ignored because it doesn't exist - }, - performance: { - hints: false, - }, - output: { - filename: "extension.js", - path: path.join(__dirname, "dist"), - libraryTarget: "commonjs", - }, - devtool: "source-map", -}; diff --git a/extensions/jupyter-web/images/jupyter.png b/extensions/jupyter-web/images/jupyter.png deleted file mode 100644 index 169a637..0000000 Binary files a/extensions/jupyter-web/images/jupyter.png and /dev/null differ diff --git a/extensions/jupyter-web/images/sample.PNG b/extensions/jupyter-web/images/sample.PNG deleted file mode 100644 index b6b9d8c..0000000 Binary files a/extensions/jupyter-web/images/sample.PNG and /dev/null differ diff --git a/extensions/jupyter-web/jsconfig.json b/extensions/jupyter-web/jsconfig.json deleted file mode 100644 index af85b6f..0000000 --- a/extensions/jupyter-web/jsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "lib": [ - "es6" - ] - }, - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/extensions/jupyter-web/language-configuration.json b/extensions/jupyter-web/language-configuration.json deleted file mode 100644 index 1a520dd..0000000 --- a/extensions/jupyter-web/language-configuration.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": ["/*", "*/"] - }, - "brackets": [ - ["{", "}"], - ["[", "]"] - ], - "autoClosingPairs": [{ - "open": "{", - "close": "}", - "notIn": ["string"] - }, - { - "open": "[", - "close": "]", - "notIn": ["string"] - }, - { - "open": "(", - "close": ")", - "notIn": ["string"] - }, - { - "open": "'", - "close": "'", - "notIn": ["string"] - }, - { - "open": "\"", - "close": "\"", - "notIn": ["string", "comment"] - }, - { - "open": "`", - "close": "`", - "notIn": ["string", "comment"] - } - ] -} \ No newline at end of file diff --git a/extensions/jupyter-web/package.json b/extensions/jupyter-web/package.json deleted file mode 100644 index de283a6..0000000 --- a/extensions/jupyter-web/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name": "nbpreviewer", - "displayName": "VS Code Jupyter Notebook Previewer", - "description": "An easy to use extension for previewing Jupyter Notebooks within VS Code", - "version": "1.2.2", - "publisher": "jithurjacob", - "author": { - "name": "jithurjacob" - }, - "keywords": [ - "python", - "jupyter", - "ipython", - "data science", - "kaggle", - "notebook", - "markdown" - ], - "icon": "images/jupyter.png", - "recommendations": [ - "donjayamanne.python" - ], - "galleryBanner": { - "color": "#e46d2e", - "theme": "dark" - }, - "qna": false, - "license": "MIT", - "bugs": { - "url": "https://github.com/jithurjacob/vscode-nbpreviewer/issues", - "email": "jithurjacob@gmail.com" - }, - "repository": { - "type": "git", - "url": "https://github.com/jithurjacob/vscode-nbpreviewer.git" - }, - "homepage": "https://github.com/jithurjacob/vscode-nbpreviewer/blob/master/README.md", - "engines": { - "vscode": "^1.52.0" - }, - "browser": "./dist/extension", - "categories": [ - "Programming Languages", - "Other" - ], - "main": "./src/extension", - "contributes": { - "languages": [ - { - "id": "jupyter", - "aliases": [ - "Jupyter", - "jupyter" - ], - "extensions": [ - ".ipynb" - ], - "configuration": "./language-configuration.json" - } - ], - "commands": [ - { - "command": "jupyter.showPreview", - "title": "Show preview", - "category": "Jupyter" - } - ], - "menus": { - "editor/title": [ - { - "command": "jupyter.showPreview", - "when": "editorLangId == jupyter", - "group": "navigation" - } - ] - } - }, - "activationEvents": [ - "onLanguage:jupyter", - "onCommand:jupyter.showPreview" - ], - "languages": [ - { - "id": "jupyter", - "extensions": [ - ".ipynb" - ], - "aliases": [ - "ipynb", - "Ipynb" - ] - } - ], - "scripts": { - "clean": "rm -rf dist out", - "build": "webpack --config extension.webpack.config.js --mode production", - "compile": "webpack --config extension.webpack.config.js --mode production", - "watch": "echo done", - "dev": "webpack --config extension.webpack.config.js --watch" - }, - "devDependencies": { - "@types/vscode": "^1.52.0", - "eslint": "^4.6.1", - "webpack": "^5.21.2", - "webpack-cli": "^4.5.0" - } -} diff --git a/extensions/jupyter-web/src/extension.js b/extensions/jupyter-web/src/extension.js deleted file mode 100644 index 7a26c83..0000000 --- a/extensions/jupyter-web/src/extension.js +++ /dev/null @@ -1,53 +0,0 @@ -import vscode from "vscode"; - -vscode.commands.registerCommand("jupyter.showPreview", async function (uri) { - try { - const authority = await vscode.commands.executeCommand('gogs1s.get-current-authority'); - // TODO: It may not work fine when there are special characters in `ref` or `path` - const [owner, repo, ref] = (authority || "").split('+').filter(Boolean); - const path = uri.path; - - // const success = await vscode.commands.executeCommand('vscode.previewHtml', previewUri, vscode.ViewColumn.Two, 'IPython Notebook Preview'); - // Create and show panel - const panel = vscode.window.createWebviewPanel( - "nbpreviewer", - "Jupyter Notebook Previewer", - vscode.ViewColumn.Two, - { enableScripts: true, retainContextWhenHidden: true } - ); - panel.webview.html = ` - - - `; - console.log("successfully showed notebook"); - } catch (reason) { - console.error(reason); - vscode.window.showErrorMessage( - "An error occured while rendering the Notebook" - ); - } -}); - -vscode.workspace.onDidOpenTextDocument((e) => { - const currnetFileExtension = e.fileName; - if (currnetFileExtension.substr(-6) === ".ipynb") { - vscode.commands.executeCommand("jupyter.showPreview", e.uri); - } -}); diff --git a/package.json b/package.json index 97923d0..e61b958 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "dependencies": {}, "devDependencies": { - "@jianboy/vscode-web": "1.5.10", + "@jianboy/vscode-web": "1.70.2", "npm-run-all": "^4.1.5", "@typescript-eslint/eslint-plugin": "^4.15.0", "@typescript-eslint/parser": "^4.15.0", diff --git a/resources/index.html b/resources/index.html index 67561ff..87e24d9 100644 --- a/resources/index.html +++ b/resources/index.html @@ -139,12 +139,12 @@

You need to enable JavaScript to run this app.

'xterm-addon-webgl': `${window.location.origin}/static/node_modules/xterm-addon-webgl/lib/xterm-addon-webgl.js`, 'tas-client-umd': `${window.location.origin}/static/node_modules/tas-client-umd/lib/tas-client-umd.js`, 'iconv-lite-umd': `${window.location.origin}/static/node_modules/iconv-lite-umd/lib/iconv-lite-umd.js`, - 'jschardet': `https://cdn.yoqi.me/code.git/static/node_modules/jschardet/dist/jschardet.min.js`, + 'jschardet': `https://cdn.yoqi.me/code.git/1.70.2/static/node_modules/jschardet/dist/jschardet.min.js`, } }; - + diff --git a/scripts/build/build-gogs1s-extensions.sh b/scripts/build/build-gogs1s-extensions.sh index ca022a7..db96b15 100755 --- a/scripts/build/build-gogs1s-extensions.sh +++ b/scripts/build/build-gogs1s-extensions.sh @@ -9,6 +9,7 @@ function main() { do if [ -d "$entry" ] then + echo ----------------$entry cd $entry yarn compile fi diff --git a/vscode-web-gogs1s/package-lock.json b/vscode-web-gogs1s/package-lock.json new file mode 100644 index 0000000..267a17e --- /dev/null +++ b/vscode-web-gogs1s/package-lock.json @@ -0,0 +1,3472 @@ +{ + "name": "@jianboy/vscode-web", + "version": "1.5.10", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@jianboy/vscode-web", + "version": "1.5.10", + "license": "MIT", + "dependencies": { + "iconv-lite-umd": "0.6.8", + "jschardet": "2.2.1", + "tas-client-umd": "0.1.2", + "vscode-oniguruma": "1.3.1", + "vscode-textmate": "5.2.0", + "xterm": "4.10.0-beta.4", + "xterm-addon-search": "0.8.0-beta.3", + "xterm-addon-unicode11": "0.3.0-beta.3", + "xterm-addon-webgl": "0.10.0-beta.1" + }, + "devDependencies": { + "@types/trusted-types": "^2.0.0", + "fs-extra": "^10.0.0", + "node-gyp": "^9.1.0", + "npm-run-all": "^4.1.5" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.0.tgz", + "integrity": "sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "license": "MIT" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true, + "license": "ISC" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/iconv-lite-umd": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/iconv-lite-umd/-/iconv-lite-umd-0.6.8.tgz", + "integrity": "sha512-zvXJ5gSwMC9JD3wDzH8CoZGc1pbiJn12Tqjk8BXYCnYz3hYL5GRjHW8LEykjXhV9WgNGI4rgpgHcbIiBfrRq6A==", + "license": "MIT" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true, + "license": "ISC" + }, + "node_modules/jschardet": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-2.2.1.tgz", + "integrity": "sha512-Ks2JNuUJoc7PGaZ7bVFtSEvOcr0rBq6Q1J5/7+zKWLT+g+4zziL63O0jg7y2jxhzIa1LVsHUbPXrbaWmz9iwDw==", + "license": "LGPL-2.1+", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lru-cache": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-gyp": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", + "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tas-client-umd": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tas-client-umd/-/tas-client-umd-0.1.2.tgz", + "integrity": "sha512-rT9BdDCejckqOTQL2ShX67QtTiAUGbmPm5ZTC8giXobBvZC6JuvBVy5G32hoGZ3Q0dpTvMfgpf3iVFNN2F7wzg==", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.3.1.tgz", + "integrity": "sha512-gz6ZBofA7UXafVA+m2Yt2zHKgXC2qedArprIsHAPKByTkwq9l5y/izAGckqxYml7mSbYxTRTfdRwsFq3cwF4LQ==", + "license": "MIT" + }, + "node_modules/vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "license": "MIT" + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xterm": { + "version": "4.10.0-beta.4", + "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.10.0-beta.4.tgz", + "integrity": "sha512-q/yRy2nn4mp1jWZe218TJwlKjXCIr6h28Kw0JMB+lcTeU+MebZ3TrHqlrNVnB+UJfFDOpkw0qfKYfRoV8G/hXA==", + "license": "MIT" + }, + "node_modules/xterm-addon-search": { + "version": "0.8.0-beta.3", + "resolved": "https://registry.npmjs.org/xterm-addon-search/-/xterm-addon-search-0.8.0-beta.3.tgz", + "integrity": "sha512-EZP97KJIJ4KGQaOPYiiOaRRJst6LOgeEFoQL46WcBl5EWH9pH8qfrv0BHAJ8+6nBV2B9u5M6rzxO1GvLLec19w==", + "license": "MIT", + "peerDependencies": { + "xterm": "^4.0.0" + } + }, + "node_modules/xterm-addon-unicode11": { + "version": "0.3.0-beta.3", + "resolved": "https://registry.npmjs.org/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0-beta.3.tgz", + "integrity": "sha512-vaYopnOjn19wCLDCyIWPWLwKR7CvLPxB5YZ3CAxt9qL05o3symxIJJJC0DuCa4GaGKVjNc7EmjRCs5bsJ2O1tw==", + "license": "MIT", + "peerDependencies": { + "xterm": "^4.0.0" + } + }, + "node_modules/xterm-addon-webgl": { + "version": "0.10.0-beta.1", + "resolved": "https://registry.npmjs.org/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.1.tgz", + "integrity": "sha512-XNZMrmiyFaz3XiPq+LqF0qn2QHpUEwuk+cG53JwpJHnWo3dd2jxoIgHFQUcrnvHIVPZMbTKySIwLCCC9uQVl7Q==", + "license": "MIT", + "peerDependencies": { + "xterm": "^4.0.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + }, + "dependencies": { + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@types/trusted-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.0.tgz", + "integrity": "sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "iconv-lite-umd": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/iconv-lite-umd/-/iconv-lite-umd-0.6.8.tgz", + "integrity": "sha512-zvXJ5gSwMC9JD3wDzH8CoZGc1pbiJn12Tqjk8BXYCnYz3hYL5GRjHW8LEykjXhV9WgNGI4rgpgHcbIiBfrRq6A==" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jschardet": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-2.2.1.tgz", + "integrity": "sha512-Ks2JNuUJoc7PGaZ7bVFtSEvOcr0rBq6Q1J5/7+zKWLT+g+4zziL63O0jg7y2jxhzIa1LVsHUbPXrbaWmz9iwDw==" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + } + } + }, + "lru-cache": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz", + "integrity": "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-gyp": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", + "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", + "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.padend": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "tas-client-umd": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tas-client-umd/-/tas-client-umd-0.1.2.tgz", + "integrity": "sha512-rT9BdDCejckqOTQL2ShX67QtTiAUGbmPm5ZTC8giXobBvZC6JuvBVy5G32hoGZ3Q0dpTvMfgpf3iVFNN2F7wzg==" + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vscode-oniguruma": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.3.1.tgz", + "integrity": "sha512-gz6ZBofA7UXafVA+m2Yt2zHKgXC2qedArprIsHAPKByTkwq9l5y/izAGckqxYml7mSbYxTRTfdRwsFq3cwF4LQ==" + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xterm": { + "version": "4.10.0-beta.4", + "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.10.0-beta.4.tgz", + "integrity": "sha512-q/yRy2nn4mp1jWZe218TJwlKjXCIr6h28Kw0JMB+lcTeU+MebZ3TrHqlrNVnB+UJfFDOpkw0qfKYfRoV8G/hXA==" + }, + "xterm-addon-search": { + "version": "0.8.0-beta.3", + "resolved": "https://registry.npmjs.org/xterm-addon-search/-/xterm-addon-search-0.8.0-beta.3.tgz", + "integrity": "sha512-EZP97KJIJ4KGQaOPYiiOaRRJst6LOgeEFoQL46WcBl5EWH9pH8qfrv0BHAJ8+6nBV2B9u5M6rzxO1GvLLec19w==", + "requires": {} + }, + "xterm-addon-unicode11": { + "version": "0.3.0-beta.3", + "resolved": "https://registry.npmjs.org/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0-beta.3.tgz", + "integrity": "sha512-vaYopnOjn19wCLDCyIWPWLwKR7CvLPxB5YZ3CAxt9qL05o3symxIJJJC0DuCa4GaGKVjNc7EmjRCs5bsJ2O1tw==", + "requires": {} + }, + "xterm-addon-webgl": { + "version": "0.10.0-beta.1", + "resolved": "https://registry.npmjs.org/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.1.tgz", + "integrity": "sha512-XNZMrmiyFaz3XiPq+LqF0qn2QHpUEwuk+cG53JwpJHnWo3dd2jxoIgHFQUcrnvHIVPZMbTKySIwLCCC9uQVl7Q==", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/vscode-web-gogs1s/package.json b/vscode-web-gogs1s/package.json index fb54a0a..2421d5b 100644 --- a/vscode-web-gogs1s/package.json +++ b/vscode-web-gogs1s/package.json @@ -1,6 +1,6 @@ { "name": "@jianboy/vscode-web", - "version": "1.5.10", + "version": "1.70.2", "description": "VS Code web for Gogs", "author": "jianboy", "license": "MIT", @@ -40,6 +40,7 @@ "devDependencies": { "@types/trusted-types": "^2.0.0", "fs-extra": "^10.0.0", + "node-gyp": "^9.1.0", "npm-run-all": "^4.1.5" } } diff --git a/vscode-web-gogs1s/scripts/build-vscode.sh b/vscode-web-gogs1s/scripts/build-vscode.sh index bc85fc6..78a4bec 100755 --- a/vscode-web-gogs1s/scripts/build-vscode.sh +++ b/vscode-web-gogs1s/scripts/build-vscode.sh @@ -8,12 +8,12 @@ echo $APP_ROOT # build vscode source and vscode builtin extensions function main() { cd ${APP_ROOT} - rsync -a resources/gulp-gogs1s.js lib/vscode + # rsync -a resources/gulp-gogs1s.js lib/vscode cd lib/vscode - - yarn gulp compile-build - yarn gulp optimize --gulpfile ./gulp-gogs1s.js - yarn gulp minify --gulpfile ./gulp-gogs1s.js + yarn gulp vscode-web-min + # yarn gulp compile-build + # yarn gulp optimize --gulpfile ./gulp-gogs1s.js + # yarn gulp minify --gulpfile ./gulp-gogs1s.js echo "build vscode done!" } diff --git a/vscode-web-gogs1s/scripts/clone.sh b/vscode-web-gogs1s/scripts/clone.sh index 72ef4bb..e83f164 100755 --- a/vscode-web-gogs1s/scripts/clone.sh +++ b/vscode-web-gogs1s/scripts/clone.sh @@ -13,7 +13,7 @@ function main() { fi mkdir -p lib cd lib - git clone --depth 1 -b 1.52.1 https://github.com/microsoft/vscode.git vscode + git clone --depth 1 -b 1.70.2 https://github.com/microsoft/vscode.git vscode cd vscode yarn --frozen-lockfile } diff --git a/vscode-web-gogs1s/scripts/copy-vscode.sh b/vscode-web-gogs1s/scripts/copy-vscode.sh index 2d3b1c6..61f34a9 100755 --- a/vscode-web-gogs1s/scripts/copy-vscode.sh +++ b/vscode-web-gogs1s/scripts/copy-vscode.sh @@ -8,7 +8,7 @@ function main() { cd ${APP_ROOT} TARGET="dist/vscode" mkdir -p ${TARGET} - rsync -a --del lib/vscode/out-vscode-min/ "${TARGET}" + rsync -a --del lib/vscode/out-vscode-web-min/ "${TARGET}" echo "copy vscode done!" } diff --git a/vscode-web-gogs1s/src/vs/code/browser/workbench/workbench.ts b/vscode-web-gogs1s/src/vs/code/browser/workbench/workbench.ts index f7a105a..56a29d1 100644 --- a/vscode-web-gogs1s/src/vs/code/browser/workbench/workbench.ts +++ b/vscode-web-gogs1s/src/vs/code/browser/workbench/workbench.ts @@ -3,48 +3,29 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IWorkbenchConstructionOptions, create, ICredentialsProvider, IURLCallbackProvider, IWorkspaceProvider, IWorkspace, IWindowIndicator, IHomeIndicator, IProductQualityChangeHandler, ISettingsSyncOptions } from 'vs/workbench/workbench.web.api'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { Event, Emitter } from 'vs/base/common/event'; -import { generateUuid } from 'vs/base/common/uuid'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { streamToBuffer } from 'vs/base/common/buffer'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { request } from 'vs/base/parts/request/browser/request'; -import { isFolderToOpen, isWorkspaceToOpen } from 'vs/platform/windows/common/windows'; -import { isEqual } from 'vs/base/common/resources'; import { isStandalone } from 'vs/base/browser/browser'; -import { localize } from 'vs/nls'; +import { CancellationToken } from 'vs/base/common/cancellation'; +import { parse } from 'vs/base/common/marshalling'; +import { Emitter } from 'vs/base/common/event'; +import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; +import { isEqual } from 'vs/base/common/resources'; +import { URI, UriComponents } from 'vs/base/common/uri'; +import { request } from 'vs/base/parts/request/browser/request'; import product from 'vs/platform/product/common/product'; -import { parseLogLevel } from 'vs/platform/log/common/log'; +import { isFolderToOpen, isWorkspaceToOpen } from 'vs/platform/window/common/window'; +import { create, ICredentialsProvider, IURLCallbackProvider, IWorkbenchConstructionOptions, IWorkspace, IWorkspaceProvider } from 'vs/workbench/workbench.web.main'; +import { posix } from 'vs/base/common/path'; +import { ltrim } from 'vs/base/common/strings'; import { getBrowserUrl, replaceBrowserUrl } from 'vs/gogs1s/util'; import { renderNotification } from 'vs/gogs1s/notification'; // custom vs code commands defined by gogs1s -const getGogs1sCustomCommands: () => ({id: string, handler: (...args: any[]) => unknown }[]) = () => [ +const getGogs1sCustomCommands: () => ({ id: string, handler: (...args: any[]) => unknown }[]) = () => [ { id: 'gogs1s.vscode.get-browser-url', handler: getBrowserUrl }, { id: 'gogs1s.vscode.replace-browser-url', handler: replaceBrowserUrl }, ]; -function doCreateUri(path: string, queryValues: Map): URI { - let query: string | undefined = undefined; - - if (queryValues) { - let index = 0; - queryValues.forEach((value, key) => { - if (!query) { - query = ''; - } - - const prefix = (index++ === 0) ? '' : '&'; - query += `${prefix}${key}=${encodeURIComponent(value)}`; - }); - } - - return URI.parse(window.location.href).with({ path, query }); -} - interface ICredential { service: string; account: string; @@ -53,12 +34,12 @@ interface ICredential { class LocalStorageCredentialsProvider implements ICredentialsProvider { - static readonly CREDENTIALS_OPENED_KEY = 'credentials.provider'; + private static readonly CREDENTIALS_STORAGE_KEY = 'credentials.provider'; private readonly authService: string | undefined; constructor() { - let authSessionInfo: { readonly id: string, readonly accessToken: string, readonly providerId: string, readonly canSignOut?: boolean, readonly scopes: string[][] } | undefined; + let authSessionInfo: { readonly id: string; readonly accessToken: string; readonly providerId: string; readonly canSignOut?: boolean; readonly scopes: string[][] } | undefined; const authSessionElement = document.getElementById('vscode-workbench-auth-session'); const authSessionElementAttribute = authSessionElement ? authSessionElement.getAttribute('data-settings') : undefined; if (authSessionElementAttribute) { @@ -85,7 +66,7 @@ class LocalStorageCredentialsProvider implements ICredentialsProvider { private get credentials(): ICredential[] { if (!this._credentials) { try { - const serializedCredentials = window.localStorage.getItem(LocalStorageCredentialsProvider.CREDENTIALS_OPENED_KEY); + const serializedCredentials = window.localStorage.getItem(LocalStorageCredentialsProvider.CREDENTIALS_STORAGE_KEY); if (serializedCredentials) { this._credentials = JSON.parse(serializedCredentials); } @@ -102,7 +83,7 @@ class LocalStorageCredentialsProvider implements ICredentialsProvider { } private save(): void { - window.localStorage.setItem(LocalStorageCredentialsProvider.CREDENTIALS_OPENED_KEY, JSON.stringify(this.credentials)); + window.localStorage.setItem(LocalStorageCredentialsProvider.CREDENTIALS_STORAGE_KEY, JSON.stringify(this.credentials)); } async getPassword(service: string, account: string): Promise { @@ -178,7 +159,7 @@ class LocalStorageCredentialsProvider implements ICredentialsProvider { return this.doGetPassword(service); } - async findCredentials(service: string): Promise> { + async findCredentials(service: string): Promise> { return this.credentials .filter(credential => credential.service === service) .map(({ account, password }) => ({ account, password })); @@ -193,122 +174,231 @@ class LocalStorageCredentialsProvider implements ICredentialsProvider { url: doCreateUri('/auth/logout', queryValues).toString(true) }, CancellationToken.None); } + + async clear(): Promise { + window.localStorage.removeItem(LocalStorageCredentialsProvider.CREDENTIALS_STORAGE_KEY); + } } -class PollingURLCallbackProvider extends Disposable implements IURLCallbackProvider { +class LocalStorageURLCallbackProvider extends Disposable implements IURLCallbackProvider { - static readonly FETCH_INTERVAL = 500; // fetch every 500ms - static readonly FETCH_TIMEOUT = 5 * 60 * 1000; // ...but stop after 5min + private static REQUEST_ID = 0; - static readonly QUERY_KEYS = { - REQUEST_ID: 'vscode-requestId', - SCHEME: 'vscode-scheme', - AUTHORITY: 'vscode-authority', - PATH: 'vscode-path', - QUERY: 'vscode-query', - FRAGMENT: 'vscode-fragment' - }; + private static QUERY_KEYS: ('scheme' | 'authority' | 'path' | 'query' | 'fragment')[] = [ + 'scheme', + 'authority', + 'path', + 'query', + 'fragment' + ]; private readonly _onCallback = this._register(new Emitter()); readonly onCallback = this._onCallback.event; - create(options?: Partial): URI { - const queryValues: Map = new Map(); + private pendingCallbacks = new Set(); + private lastTimeChecked = Date.now(); + private checkCallbacksTimeout: unknown | undefined = undefined; + private onDidChangeLocalStorageDisposable: IDisposable | undefined; - const requestId = generateUuid(); - queryValues.set(PollingURLCallbackProvider.QUERY_KEYS.REQUEST_ID, requestId); + constructor(private readonly _callbackRoute: string) { + super(); + } - const { scheme, authority, path, query, fragment } = options ? options : { scheme: undefined, authority: undefined, path: undefined, query: undefined, fragment: undefined }; + create(options: Partial = {}): URI { + const id = ++LocalStorageURLCallbackProvider.REQUEST_ID; + const queryParams: string[] = [`vscode-reqid=${id}`]; - if (scheme) { - queryValues.set(PollingURLCallbackProvider.QUERY_KEYS.SCHEME, scheme); - } + for (const key of LocalStorageURLCallbackProvider.QUERY_KEYS) { + const value = options[key]; - if (authority) { - queryValues.set(PollingURLCallbackProvider.QUERY_KEYS.AUTHORITY, authority); + if (value) { + queryParams.push(`vscode-${key}=${encodeURIComponent(value)}`); + } } - if (path) { - queryValues.set(PollingURLCallbackProvider.QUERY_KEYS.PATH, path); - } + // TODO@joao remove eventually + // https://github.com/microsoft/vscode-dev/issues/62 + // https://github.com/microsoft/vscode/blob/159479eb5ae451a66b5dac3c12d564f32f454796/extensions/github-authentication/src/githubServer.ts#L50-L50 + if (!(options.authority === 'vscode.github-authentication' && options.path === '/dummy')) { + const key = `vscode-web.url-callbacks[${id}]`; + window.localStorage.removeItem(key); - if (query) { - queryValues.set(PollingURLCallbackProvider.QUERY_KEYS.QUERY, query); + this.pendingCallbacks.add(id); + this.startListening(); } - if (fragment) { - queryValues.set(PollingURLCallbackProvider.QUERY_KEYS.FRAGMENT, fragment); + return URI.parse(window.location.href).with({ path: this._callbackRoute, query: queryParams.join('&') }); + } + + private startListening(): void { + if (this.onDidChangeLocalStorageDisposable) { + return; } - // Start to poll on the callback being fired - this.periodicFetchCallback(requestId, Date.now()); + const fn = () => this.onDidChangeLocalStorage(); + window.addEventListener('storage', fn); + this.onDidChangeLocalStorageDisposable = { dispose: () => window.removeEventListener('storage', fn) }; + } - return doCreateUri('/callback', queryValues); + private stopListening(): void { + this.onDidChangeLocalStorageDisposable?.dispose(); + this.onDidChangeLocalStorageDisposable = undefined; } - private async periodicFetchCallback(requestId: string, startTime: number): Promise { + // this fires every time local storage changes, but we + // don't want to check more often than once a second + private async onDidChangeLocalStorage(): Promise { + const ellapsed = Date.now() - this.lastTimeChecked; + + if (ellapsed > 1000) { + this.checkCallbacks(); + } else if (this.checkCallbacksTimeout === undefined) { + this.checkCallbacksTimeout = setTimeout(() => { + this.checkCallbacksTimeout = undefined; + this.checkCallbacks(); + }, 1000 - ellapsed); + } + } - // Ask server for callback results - const queryValues: Map = new Map(); - queryValues.set(PollingURLCallbackProvider.QUERY_KEYS.REQUEST_ID, requestId); + private checkCallbacks(): void { + let pendingCallbacks: Set | undefined; - const result = await request({ - url: doCreateUri('/fetch-callback', queryValues).toString(true) - }, CancellationToken.None); + for (const id of this.pendingCallbacks) { + const key = `vscode-web.url-callbacks[${id}]`; + const result = window.localStorage.getItem(key); - // Check for callback results - const content = await streamToBuffer(result.stream); - if (content.byteLength > 0) { - try { - this._onCallback.fire(URI.revive(JSON.parse(content.toString()))); - } catch (error) { - console.error(error); - } + if (result !== null) { + try { + this._onCallback.fire(URI.revive(JSON.parse(result))); + } catch (error) { + console.error(error); + } - return; // done + pendingCallbacks = pendingCallbacks ?? new Set(this.pendingCallbacks); + pendingCallbacks.delete(id); + window.localStorage.removeItem(key); + } } - // Continue fetching unless we hit the timeout - if (Date.now() - startTime < PollingURLCallbackProvider.FETCH_TIMEOUT) { - setTimeout(() => this.periodicFetchCallback(requestId, startTime), PollingURLCallbackProvider.FETCH_INTERVAL); + if (pendingCallbacks) { + this.pendingCallbacks = pendingCallbacks; + + if (this.pendingCallbacks.size === 0) { + this.stopListening(); + } } - } + this.lastTimeChecked = Date.now(); + } } class WorkspaceProvider implements IWorkspaceProvider { - static QUERY_PARAM_EMPTY_WINDOW = 'ew'; - static QUERY_PARAM_FOLDER = 'folder'; - static QUERY_PARAM_WORKSPACE = 'workspace'; + private static QUERY_PARAM_EMPTY_WINDOW = 'ew'; + private static QUERY_PARAM_FOLDER = 'folder'; + private static QUERY_PARAM_WORKSPACE = 'workspace'; + + private static QUERY_PARAM_PAYLOAD = 'payload'; + + static create(config: IWorkbenchConstructionOptions & { folderUri?: UriComponents; workspaceUri?: UriComponents }) { + let foundWorkspace = false; + let workspace: IWorkspace; + let payload = Object.create(null); + + const query = new URL(document.location.href).searchParams; + query.forEach((value, key) => { + switch (key) { + + // Folder + case WorkspaceProvider.QUERY_PARAM_FOLDER: + if (config.remoteAuthority && value.startsWith(posix.sep)) { + // when connected to a remote and having a value + // that is a path (begins with a `/`), assume this + // is a vscode-remote resource as simplified URL. + workspace = { folderUri: URI.from({ scheme: Schemas.vscodeRemote, path: value, authority: config.remoteAuthority }) }; + } else { + workspace = { folderUri: URI.parse(value) }; + } + foundWorkspace = true; + break; + + // Workspace + case WorkspaceProvider.QUERY_PARAM_WORKSPACE: + if (config.remoteAuthority && value.startsWith(posix.sep)) { + // when connected to a remote and having a value + // that is a path (begins with a `/`), assume this + // is a vscode-remote resource as simplified URL. + workspace = { workspaceUri: URI.from({ scheme: Schemas.vscodeRemote, path: value, authority: config.remoteAuthority }) }; + } else { + workspace = { workspaceUri: URI.parse(value) }; + } + foundWorkspace = true; + break; + + // Empty + case WorkspaceProvider.QUERY_PARAM_EMPTY_WINDOW: + workspace = undefined; + foundWorkspace = true; + break; + + // Payload + case WorkspaceProvider.QUERY_PARAM_PAYLOAD: + try { + payload = parse(value); // use marshalling#parse() to revive potential URIs + } catch (error) { + console.error(error); // possible invalid JSON + } + break; + } + }); + + // If no workspace is provided through the URL, check for config + // attribute from server + if (!foundWorkspace) { + if (config.folderUri) { + workspace = { folderUri: URI.revive(config.folderUri) }; + } else if (config.workspaceUri) { + workspace = { workspaceUri: URI.revive(config.workspaceUri) }; + } + } + + return new WorkspaceProvider(workspace, payload, config); + } - static QUERY_PARAM_PAYLOAD = 'payload'; + readonly trusted = true; - constructor( - public readonly workspace: IWorkspace, - public readonly payload: object - ) { } + private constructor( + readonly workspace: IWorkspace, + readonly payload: object, + private readonly config: IWorkbenchConstructionOptions + ) { + } - async open(workspace: IWorkspace, options?: { reuse?: boolean, payload?: object }): Promise { + async open(workspace: IWorkspace, options?: { reuse?: boolean; payload?: object }): Promise { if (options?.reuse && !options.payload && this.isSame(this.workspace, workspace)) { - return; // return early if workspace and environment is not changing and we are reusing window + return true; // return early if workspace and environment is not changing and we are reusing window } const targetHref = this.createTargetUrl(workspace, options); if (targetHref) { if (options?.reuse) { window.location.href = targetHref; + return true; } else { - if (isStandalone) { - window.open(targetHref, '_blank', 'toolbar=no'); // ensures to open another 'standalone' window! + let result; + if (isStandalone()) { + result = window.open(targetHref, '_blank', 'toolbar=no'); // ensures to open another 'standalone' window! } else { - window.open(targetHref); + result = window.open(targetHref); } + + return !!result; } } + return false; } - private createTargetUrl(workspace: IWorkspace, options?: { reuse?: boolean, payload?: object }): string | undefined { + private createTargetUrl(workspace: IWorkspace, options?: { reuse?: boolean; payload?: object }): string | undefined { // Empty let targetHref: string | undefined = undefined; @@ -318,12 +408,35 @@ class WorkspaceProvider implements IWorkspaceProvider { // Folder else if (isFolderToOpen(workspace)) { - targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_FOLDER}=${encodeURIComponent(workspace.folderUri.toString())}`; + let queryParamFolder: string; + if (this.config.remoteAuthority && workspace.folderUri.scheme === Schemas.vscodeRemote) { + // when connected to a remote and having a folder + // for that remote, only use the path as query + // value to form shorter, nicer URLs. + // ensure paths are absolute (begin with `/`) + // clipboard: ltrim(workspace.folderUri.path, posix.sep) + queryParamFolder = `${posix.sep}${ltrim(workspace.folderUri.path, posix.sep)}`; + } else { + queryParamFolder = encodeURIComponent(workspace.folderUri.toString(true)); + } + + targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_FOLDER}=${queryParamFolder}`; } // Workspace else if (isWorkspaceToOpen(workspace)) { - targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_WORKSPACE}=${encodeURIComponent(workspace.workspaceUri.toString())}`; + let queryParamWorkspace: string; + if (this.config.remoteAuthority && workspace.workspaceUri.scheme === Schemas.vscodeRemote) { + // when connected to a remote and having a workspace + // for that remote, only use the path as query + // value to form shorter, nicer URLs. + // ensure paths are absolute (begin with `/`) + queryParamWorkspace = `${posix.sep}${ltrim(workspace.workspaceUri.path, posix.sep)}`; + } else { + queryParamWorkspace = encodeURIComponent(workspace.workspaceUri.toString(true)); + } + + targetHref = `${document.location.origin}${document.location.pathname}?${WorkspaceProvider.QUERY_PARAM_WORKSPACE}=${queryParamWorkspace}`; } // Append payload if any @@ -365,43 +478,22 @@ class WorkspaceProvider implements IWorkspaceProvider { } } -class WindowIndicator implements IWindowIndicator { - - readonly onDidChange = Event.None; - - readonly label: string; - readonly tooltip: string; - readonly command: string | undefined; - - constructor(workspace: IWorkspace) { - let repositoryOwner: string | undefined = undefined; - let repositoryName: string | undefined = undefined; - - if (workspace) { - let uri: URI | undefined = undefined; - if (isFolderToOpen(workspace)) { - uri = workspace.folderUri; - } else if (isWorkspaceToOpen(workspace)) { - uri = workspace.workspaceUri; - } +function doCreateUri(path: string, queryValues: Map): URI { + let query: string | undefined = undefined; - if (uri?.scheme === 'gogs1s') { - [repositoryOwner = 'lyq', repositoryName = 'github-host'] = URI.parse(getBrowserUrl()).path.split('/').filter(Boolean); + if (queryValues) { + let index = 0; + queryValues.forEach((value, key) => { + if (!query) { + query = ''; } - } - // Repo - if (repositoryName && repositoryOwner) { - this.label = localize('playgroundLabelRepository', "$(remote) Gogs1s: {0}/{1}", repositoryOwner, repositoryName); - this.tooltip = localize('playgroundRepositoryTooltip', "Gogs1s: {0}/{1}", repositoryOwner, repositoryName); - } - - // No Repo - else { - this.label = localize('playgroundLabel', "$(remote) Gogs1s"); - this.tooltip = localize('playgroundTooltip', "Gogs1s"); - } + const prefix = (index++ === 0) ? '' : '&'; + query += `${prefix}${key}=${encodeURIComponent(value)}`; + }); } + + return URI.parse(window.location.href).with({ path, query }); } (function () { @@ -412,137 +504,22 @@ class WindowIndicator implements IWindowIndicator { if (!configElement || !configElementAttribute) { throw new Error('Missing web configuration element'); } - - const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents, workspaceUri?: UriComponents } = JSON.parse(configElementAttribute); - - // Revive static extension locations - if (Array.isArray(config.staticExtensions)) { - config.staticExtensions.forEach(extension => { - extension.extensionLocation = URI.revive(extension.extensionLocation); - }); - } - - // Find workspace to open and payload - let foundWorkspace = false; - let workspace: IWorkspace; - let payload = Object.create(null); - let logLevel: string | undefined = undefined; - - const query = new URL(document.location.href).searchParams; - query.forEach((value, key) => { - switch (key) { - - // Folder - case WorkspaceProvider.QUERY_PARAM_FOLDER: - workspace = { folderUri: URI.parse(value) }; - foundWorkspace = true; - break; - - // Workspace - case WorkspaceProvider.QUERY_PARAM_WORKSPACE: - workspace = { workspaceUri: URI.parse(value) }; - foundWorkspace = true; - break; - - // Empty - case WorkspaceProvider.QUERY_PARAM_EMPTY_WINDOW: - workspace = undefined; - foundWorkspace = true; - break; - - // Payload - case WorkspaceProvider.QUERY_PARAM_PAYLOAD: - try { - payload = JSON.parse(value); - } catch (error) { - console.error(error); // possible invalid JSON - } - break; - - // Log level - case 'logLevel': - logLevel = value; - break; - } - }); - - // If no workspace is provided through the URL, check for config attribute from server - if (!foundWorkspace) { - if (config.folderUri) { - workspace = { folderUri: URI.revive(config.folderUri) }; - } else if (config.workspaceUri) { - workspace = { workspaceUri: URI.revive(config.workspaceUri) }; - } else { - workspace = undefined; - } - } - - // Workspace Provider - const workspaceProvider = new WorkspaceProvider(workspace, payload); - - // Home Indicator - const [repoOwner = 'lyq', repoName = 'github-host'] = (URI.parse(window.location.href).path || '').split('/').filter(Boolean); - const homeIndicator: IHomeIndicator = { - href: `https://git.yoqi.me/${repoOwner}/${repoName}`, - icon: 'github', - title: localize('home', "Home") - }; - - // Window indicator (unless connected to a remote) - let windowIndicator: WindowIndicator | undefined = undefined; - if (!workspaceProvider.hasRemote()) { - windowIndicator = new WindowIndicator(workspace); - } - - // Product Quality Change Handler - const productQualityChangeHandler: IProductQualityChangeHandler = (quality) => { - let queryString = `quality=${quality}`; - - // Save all other query params we might have - const query = new URL(document.location.href).searchParams; - query.forEach((value, key) => { - if (key !== 'quality') { - queryString += `&${key}=${value}`; - } - }); - - window.location.href = `${window.location.origin}?${queryString}`; - }; - - // settings sync options - const settingsSyncOptions: ISettingsSyncOptions | undefined = config.settingsSyncOptions ? { - enabled: config.settingsSyncOptions.enabled, - enablementHandler: (enablement) => { - let queryString = `settingsSync=${enablement ? 'true' : 'false'}`; - - // Save all other query params we might have - const query = new URL(document.location.href).searchParams; - query.forEach((value, key) => { - if (key !== 'settingsSync') { - queryString += `&${key}=${value}`; - } - }); - - window.location.href = `${window.location.origin}?${queryString}`; - } - } : undefined; + const config: IWorkbenchConstructionOptions & { folderUri?: UriComponents; workspaceUri?: UriComponents; callbackRoute: string } = JSON.parse(configElementAttribute); // Remove the html load spinner document.querySelector('#load-spinner')?.remove(); - // Finally create workbench + // Create workbench create(document.body, { ...config, commands: getGogs1sCustomCommands(), - logLevel: logLevel ? parseLogLevel(logLevel) : undefined, - settingsSyncOptions, - homeIndicator, - windowIndicator, - productQualityChangeHandler, - workspaceProvider, - urlCallbackProvider: new PollingURLCallbackProvider(), - credentialsProvider: new LocalStorageCredentialsProvider() + settingsSyncOptions: config.settingsSyncOptions ? { + enabled: config.settingsSyncOptions.enabled, + } : undefined, + workspaceProvider: WorkspaceProvider.create(config), + urlCallbackProvider: new LocalStorageURLCallbackProvider(config.callbackRoute), + credentialsProvider: config.remoteAuthority ? undefined : new LocalStorageCredentialsProvider() // with a remote, we don't use a local credentials provider }); - + setTimeout(() => renderNotification(), 1000); })(); diff --git a/vscode-web-gogs1s/src/vs/platform/product/common/product.ts b/vscode-web-gogs1s/src/vs/platform/product/common/product.ts index dd9c95e..02ad10f 100644 --- a/vscode-web-gogs1s/src/vs/platform/product/common/product.ts +++ b/vscode-web-gogs1s/src/vs/platform/product/common/product.ts @@ -3,66 +3,44 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IProductConfiguration } from 'vs/platform/product/common/productService'; -import { isWeb } from 'vs/base/common/platform'; -import { env } from 'vs/base/common/process'; import { FileAccess } from 'vs/base/common/network'; +import { globals } from 'vs/base/common/platform'; +import { env } from 'vs/base/common/process'; +import { IProductConfiguration } from 'vs/base/common/product'; import { dirname, joinPath } from 'vs/base/common/resources'; +import { ISandboxConfiguration } from 'vs/base/parts/sandbox/common/sandboxTypes'; +/** + * @deprecated You MUST use `IProductService` if possible. + */ let product: IProductConfiguration; -// Web or Native (sandbox TODO@sandbox need to add all properties of product.json) -if (isWeb || typeof require === 'undefined' || typeof require.__$__nodeRequire !== 'function') { - - // Built time configuration (do NOT modify) - product = { /*BUILD->INSERT_PRODUCT_CONFIGURATION*/ } as IProductConfiguration; - - // Running out of sources - if (Object.keys(product).length === 0) { - Object.assign(product, { - version: '1.52.0-dev', - // modify-by-github1s, change window title - // nameShort: isWeb ? 'Code Web - OSS Dev' : 'Code - OSS Dev', - // nameLong: isWeb ? 'Code Web - OSS Dev' : 'Code - OSS Dev', - nameShort: 'Gogs1s',// web版本时候,显示 Gogs1s 名称 - nameLong: 'Gogs1s', - applicationName: 'code-oss', - dataFolderName: '.vscode-oss', - urlProtocol: 'code-oss', - reportIssueUrl: 'https://github.com/microsoft/vscode/issues/new', - licenseName: 'MIT', - licenseUrl: 'https://github.com/microsoft/vscode/blob/master/LICENSE.txt', - extensionAllowedProposedApi: [ - 'ms-vscode.vscode-js-profile-flame', - 'ms-vscode.vscode-js-profile-table', - 'ms-vscode.github-browser' - ], - extensionsGallery: { - serviceUrl: 'https://marketplace.visualstudio.com/_apis/public/gallery', - cacheUrl: 'https://vscode.blob.core.windows.net/gallery/index', - itemUrl: 'https://marketplace.visualstudio.com/items', - controlUrl: 'https://az764295.vo.msecnd.net/extensions/marketplace.json', - recommendationsUrl: 'https://az764295.vo.msecnd.net/extensions/workspaceRecommendations.json.gz', - } - }); +// Native sandbox environment +if (typeof globals.vscode !== 'undefined' && typeof globals.vscode.context !== 'undefined') { + const configuration: ISandboxConfiguration | undefined = globals.vscode.context.configuration(); + if (configuration) { + product = configuration.product; + } else { + throw new Error('Sandbox: unable to resolve product configuration from preload script.'); } } -// Native (non-sandboxed) -else { +// Native node.js environment +else if (typeof require?.__$__nodeRequire === 'function') { // Obtain values from product.json and package.json const rootPath = dirname(FileAccess.asFileUri('', require)); product = require.__$__nodeRequire(joinPath(rootPath, 'product.json').fsPath); - const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string; }; + const pkg = require.__$__nodeRequire(joinPath(rootPath, 'package.json').fsPath) as { version: string }; // Running out of sources if (env['VSCODE_DEV']) { Object.assign(product, { nameShort: `${product.nameShort} Dev`, nameLong: `${product.nameLong} Dev`, - dataFolderName: `${product.dataFolderName}-dev` + dataFolderName: `${product.dataFolderName}-dev`, + serverDataFolderName: product.serverDataFolderName ? `${product.serverDataFolderName}-dev` : undefined }); } @@ -71,4 +49,29 @@ else { }); } +// Web environment or unknown +else { + + // Built time configuration (do NOT modify) + product = { /*BUILD->INSERT_PRODUCT_CONFIGURATION*/ } as IProductConfiguration; + + // Running out of sources + if (Object.keys(product).length === 0) { + Object.assign(product, { + version: '1.67.0-dev', + nameShort: 'Gogs1s', + nameLong: 'Gogs1s', + applicationName: 'code-oss', + dataFolderName: '.vscode-oss', + urlProtocol: 'code-oss', + reportIssueUrl: 'https://github.com/microsoft/vscode/issues/new', + licenseName: 'MIT', + licenseUrl: 'https://github.com/microsoft/vscode/blob/main/LICENSE.txt' + }); + } +} + +/** + * @deprecated You MUST use `IProductService` if possible. + */ export default product; diff --git a/vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts b/vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts deleted file mode 100644 index b07208a..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarActions.ts +++ /dev/null @@ -1,518 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./media/activityaction'; -import * as nls from 'vs/nls'; -import * as DOM from 'vs/base/browser/dom'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { EventType as TouchEventType, GestureEvent } from 'vs/base/browser/touch'; -import { Action, IAction, Separator, SubmenuAction } from 'vs/base/common/actions'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { DisposableStore } from 'vs/base/common/lifecycle'; -import { IMenuService, MenuId, IMenu, registerAction2, Action2, IAction2Options } from 'vs/platform/actions/common/actions'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { activeContrastBorder, focusBorder } from 'vs/platform/theme/common/colorRegistry'; -import { ICssStyleCollector, IColorTheme, IThemeService, registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { ActivityAction, ActivityActionViewItem, ICompositeBar, ICompositeBarColors, ToggleCompositePinnedAction } from 'vs/workbench/browser/parts/compositeBarActions'; -import { CATEGORIES } from 'vs/workbench/common/actions'; -import { IActivity } from 'vs/workbench/common/activity'; -import { ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_ACTIVE_FOCUS_BORDER, ACTIVITY_BAR_ACTIVE_BACKGROUND, ACTIVITY_BAR_BACKGROUND } from 'vs/workbench/common/theme'; -import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { createAndFillInActionBarActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { isMacintosh, isWeb } from 'vs/base/common/platform'; -import { getCurrentAuthenticationSessionInfo, IAuthenticationService } from 'vs/workbench/services/authentication/browser/authenticationService'; -import { AuthenticationSession } from 'vs/editor/common/modes'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { AnchorAlignment, AnchorAxisAlignment } from 'vs/base/browser/ui/contextview/contextview'; -import { getTitleBarStyle } from 'vs/platform/windows/common/windows'; -import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; - -export class ViewContainerActivityAction extends ActivityAction { - - private static readonly preventDoubleClickDelay = 300; - - private lastRun = 0; - - constructor( - activity: IActivity, - @IViewletService private readonly viewletService: IViewletService, - @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, - @ITelemetryService private readonly telemetryService: ITelemetryService, - @IConfigurationService private readonly configurationService: IConfigurationService - ) { - super(activity); - } - - updateActivity(activity: IActivity): void { - this.activity = activity; - } - - async run(event: unknown): Promise { - if (event instanceof MouseEvent && event.button === 2) { - return; // do not run on right click - } - - // prevent accident trigger on a doubleclick (to help nervous people) - const now = Date.now(); - if (now > this.lastRun /* https://github.com/microsoft/vscode/issues/25830 */ && now - this.lastRun < ViewContainerActivityAction.preventDoubleClickDelay) { - return; - } - this.lastRun = now; - - const sideBarVisible = this.layoutService.isVisible(Parts.SIDEBAR_PART); - const activeViewlet = this.viewletService.getActiveViewlet(); - const focusBehavior = this.configurationService.getValue('workbench.activityBar.iconClickBehavior'); - - if (sideBarVisible && activeViewlet?.getId() === this.activity.id) { - switch (focusBehavior) { - case 'focus': - this.logAction('refocus'); - this.viewletService.openViewlet(this.activity.id, true); - break; - case 'toggle': - default: - // Hide sidebar if selected viewlet already visible - this.logAction('hide'); - this.layoutService.setSideBarHidden(true); - break; - } - - return; - } - - this.logAction('show'); - await this.viewletService.openViewlet(this.activity.id, true); - - return this.activate(); - } - - private logAction(action: string) { - type ActivityBarActionClassification = { - viewletId: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; - action: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; - }; - this.telemetryService.publicLog2<{ viewletId: String, action: String }, ActivityBarActionClassification>('activityBarAction', { viewletId: this.activity.id, action }); - } -} - -class MenuActivityActionViewItem extends ActivityActionViewItem { - - constructor( - private readonly menuId: MenuId, - action: ActivityAction, - colors: (theme: IColorTheme) => ICompositeBarColors, - @IThemeService themeService: IThemeService, - @IMenuService protected readonly menuService: IMenuService, - @IContextMenuService protected readonly contextMenuService: IContextMenuService, - @IContextKeyService protected readonly contextKeyService: IContextKeyService, - @IConfigurationService protected readonly configurationService: IConfigurationService, - @IWorkbenchEnvironmentService protected readonly environmentService: IWorkbenchEnvironmentService - ) { - super(action, { draggable: false, colors, icon: true }, themeService); - } - - render(container: HTMLElement): void { - super.render(container); - - // Context menus are triggered on mouse down so that an item can be picked - // and executed with releasing the mouse over it - - this._register(DOM.addDisposableListener(this.container, DOM.EventType.MOUSE_DOWN, (e: MouseEvent) => { - DOM.EventHelper.stop(e, true); - this.showContextMenu(e); - })); - - this._register(DOM.addDisposableListener(this.container, DOM.EventType.KEY_UP, (e: KeyboardEvent) => { - let event = new StandardKeyboardEvent(e); - if (event.equals(KeyCode.Enter) || event.equals(KeyCode.Space)) { - DOM.EventHelper.stop(e, true); - this.showContextMenu(); - } - })); - - this._register(DOM.addDisposableListener(this.container, TouchEventType.Tap, (e: GestureEvent) => { - DOM.EventHelper.stop(e, true); - this.showContextMenu(); - })); - } - - protected async showContextMenu(e?: MouseEvent): Promise { - const disposables = new DisposableStore(); - - const menu = disposables.add(this.menuService.createMenu(this.menuId, this.contextKeyService)); - const actions = await this.resolveActions(menu, disposables); - - const isUsingCustomMenu = isWeb || (getTitleBarStyle(this.configurationService) !== 'native' && !isMacintosh); // see #40262 - const position = this.configurationService.getValue('workbench.sideBar.location'); - - this.contextMenuService.showContextMenu({ - getAnchor: () => isUsingCustomMenu ? this.container : e || this.container, - anchorAlignment: isUsingCustomMenu ? (position === 'left' ? AnchorAlignment.RIGHT : AnchorAlignment.LEFT) : undefined, - anchorAxisAlignment: isUsingCustomMenu ? AnchorAxisAlignment.HORIZONTAL : AnchorAxisAlignment.VERTICAL, - getActions: () => actions, - onHide: () => disposables.dispose() - }); - } - - protected async resolveActions(menu: IMenu, disposables: DisposableStore): Promise { - const actions: IAction[] = []; - - disposables.add(createAndFillInActionBarActions(menu, undefined, { primary: [], secondary: actions })); - - return actions; - } -} - -export class HomeActivityActionViewItem extends MenuActivityActionViewItem { - - static readonly HOME_BAR_VISIBILITY_PREFERENCE = 'workbench.activity.showHomeIndicator'; - - constructor( - private readonly goHomeHref: string, - action: ActivityAction, - colors: (theme: IColorTheme) => ICompositeBarColors, - @IThemeService themeService: IThemeService, - @IMenuService menuService: IMenuService, - @IContextMenuService contextMenuService: IContextMenuService, - @IContextKeyService contextKeyService: IContextKeyService, - @IConfigurationService configurationService: IConfigurationService, - @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, - // @IStorageService private readonly storageService: IStorageService - ) { - super(MenuId.MenubarHomeMenu, action, colors, themeService, menuService, contextMenuService, contextKeyService, configurationService, environmentService); - } - - // modify-by-github1s, open current github repository in an new Tab directly - render(container: HTMLElement): void { - super.render(container); - - this._register(DOM.addDisposableListener(this.container, DOM.EventType.CLICK, (e: MouseEvent) => { - DOM.EventHelper.stop(e, true); - this.openGitHubRepository(); - })); - - this._register(DOM.addDisposableListener(this.container, DOM.EventType.KEY_UP, (e: KeyboardEvent) => { - let event = new StandardKeyboardEvent(e); - if (event.equals(KeyCode.Enter) || event.equals(KeyCode.Space)) { - DOM.EventHelper.stop(e, true); - this.openGitHubRepository(); - } - })); - - this._register(DOM.addDisposableListener(this.container, TouchEventType.Tap, (e: GestureEvent) => { - DOM.EventHelper.stop(e, true); - this.openGitHubRepository(); - })); - } - - protected openGitHubRepository() { - return this.goHomeHref ? window.open(this.goHomeHref) : undefined; - } -} - -export class AccountsActivityActionViewItem extends MenuActivityActionViewItem { - - static readonly ACCOUNTS_VISIBILITY_PREFERENCE_KEY = 'workbench.activity.showAccounts'; - - constructor( - action: ActivityAction, - colors: (theme: IColorTheme) => ICompositeBarColors, - @IThemeService themeService: IThemeService, - @IContextMenuService contextMenuService: IContextMenuService, - @IMenuService menuService: IMenuService, - @IContextKeyService contextKeyService: IContextKeyService, - @IAuthenticationService private readonly authenticationService: IAuthenticationService, - @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService, - @IStorageService private readonly storageService: IStorageService, - @IProductService private readonly productService: IProductService, - @IConfigurationService configurationService: IConfigurationService, - ) { - super(MenuId.AccountsContext, action, colors, themeService, menuService, contextMenuService, contextKeyService, configurationService, environmentService); - } - - protected async resolveActions(accountsMenu: IMenu, disposables: DisposableStore): Promise { - await super.resolveActions(accountsMenu, disposables); - - const otherCommands = accountsMenu.getActions(); - const providers = this.authenticationService.getProviderIds(); - const allSessions = providers.map(async providerId => { - try { - const sessions = await this.authenticationService.getSessions(providerId); - - const groupedSessions: { [label: string]: AuthenticationSession[] } = {}; - sessions.forEach(session => { - if (groupedSessions[session.account.label]) { - groupedSessions[session.account.label].push(session); - } else { - groupedSessions[session.account.label] = [session]; - } - }); - - return { providerId, sessions: groupedSessions }; - } catch { - return { providerId }; - } - }); - - const result = await Promise.all(allSessions); - let menus: IAction[] = []; - const authenticationSession = this.environmentService.options?.credentialsProvider ? await getCurrentAuthenticationSessionInfo(this.environmentService, this.productService) : undefined; - result.forEach(sessionInfo => { - const providerDisplayName = this.authenticationService.getLabel(sessionInfo.providerId); - - if (sessionInfo.sessions) { - Object.keys(sessionInfo.sessions).forEach(accountName => { - const manageExtensionsAction = disposables.add(new Action(`configureSessions${accountName}`, nls.localize('manageTrustedExtensions', "Manage Trusted Extensions"), '', true, () => { - return this.authenticationService.manageTrustedExtensionsForAccount(sessionInfo.providerId, accountName); - })); - - const signOutAction = disposables.add(new Action('signOut', nls.localize('signOut', "Sign Out"), '', true, () => { - return this.authenticationService.signOutOfAccount(sessionInfo.providerId, accountName); - })); - - const providerSubMenuActions = [manageExtensionsAction]; - - const hasEmbedderAccountSession = sessionInfo.sessions[accountName].some(session => session.id === (authenticationSession?.id)); - if (!hasEmbedderAccountSession || authenticationSession?.canSignOut) { - providerSubMenuActions.push(signOutAction); - } - - const providerSubMenu = disposables.add(new SubmenuAction('activitybar.submenu', `${accountName} (${providerDisplayName})`, providerSubMenuActions)); - menus.push(providerSubMenu); - }); - } else { - const providerUnavailableAction = disposables.add(new Action('providerUnavailable', nls.localize('authProviderUnavailable', '{0} is currently unavailable', providerDisplayName))); - menus.push(providerUnavailableAction); - } - }); - - if (menus.length && otherCommands.length) { - menus.push(disposables.add(new Separator())); - } - - otherCommands.forEach((group, i) => { - const actions = group[1]; - menus = menus.concat(actions); - if (i !== otherCommands.length - 1) { - menus.push(disposables.add(new Separator())); - } - }); - - if (menus.length) { - menus.push(disposables.add(new Separator())); - } - - menus.push(disposables.add(new Action('hide', nls.localize('hide', "Hide"), undefined, true, async () => { - this.storageService.store(AccountsActivityActionViewItem.ACCOUNTS_VISIBILITY_PREFERENCE_KEY, false, StorageScope.GLOBAL, StorageTarget.USER); - }))); - - return menus; - } -} - -export class GlobalActivityActionViewItem extends MenuActivityActionViewItem { - - constructor( - action: ActivityAction, - colors: (theme: IColorTheme) => ICompositeBarColors, - @IThemeService themeService: IThemeService, - @IMenuService menuService: IMenuService, - @IContextMenuService contextMenuService: IContextMenuService, - @IContextKeyService contextKeyService: IContextKeyService, - @IConfigurationService configurationService: IConfigurationService, - @IWorkbenchEnvironmentService environmentService: IWorkbenchEnvironmentService - ) { - super(MenuId.GlobalActivity, action, colors, themeService, menuService, contextMenuService, contextKeyService, configurationService, environmentService); - } -} - -export class PlaceHolderViewContainerActivityAction extends ViewContainerActivityAction { } - -export class PlaceHolderToggleCompositePinnedAction extends ToggleCompositePinnedAction { - - constructor(id: string, compositeBar: ICompositeBar) { - super({ id, name: id, cssClass: undefined }, compositeBar); - } - - setActivity(activity: IActivity): void { - this.label = activity.name; - } -} - -class SwitchSideBarViewAction extends Action2 { - - constructor( - desc: Readonly, - private readonly offset: number - ) { - super(desc); - } - - async run(accessor: ServicesAccessor): Promise { - const activityBarService = accessor.get(IActivityBarService); - const viewletService = accessor.get(IViewletService); - - const visibleViewletIds = activityBarService.getVisibleViewContainerIds(); - - const activeViewlet = viewletService.getActiveViewlet(); - if (!activeViewlet) { - return; - } - let targetViewletId: string | undefined; - for (let i = 0; i < visibleViewletIds.length; i++) { - if (visibleViewletIds[i] === activeViewlet.getId()) { - targetViewletId = visibleViewletIds[(i + visibleViewletIds.length + this.offset) % visibleViewletIds.length]; - break; - } - } - - await viewletService.openViewlet(targetViewletId, true); - } -} - -registerAction2( - class PreviousSideBarViewAction extends SwitchSideBarViewAction { - constructor() { - super({ - id: 'workbench.action.previousSideBarView', - title: { value: nls.localize('previousSideBarView', "Previous Side Bar View"), original: 'Previous Side Bar View' }, - category: CATEGORIES.View, - f1: true - }, -1); - } - } -); - -registerAction2( - class NextSideBarViewAction extends SwitchSideBarViewAction { - constructor() { - super({ - id: 'workbench.action.nextSideBarView', - title: { value: nls.localize('nextSideBarView', "Next Side Bar View"), original: 'Next Side Bar View' }, - category: CATEGORIES.View, - f1: true - }, 1); - } - } -); - -registerThemingParticipant((theme: IColorTheme, collector: ICssStyleCollector) => { - const activityBarBackgroundColor = theme.getColor(ACTIVITY_BAR_BACKGROUND); - if (activityBarBackgroundColor) { - collector.addRule(` - .monaco-workbench .activitybar > .content > .home-bar > .home-bar-icon-badge { - background-color: ${activityBarBackgroundColor}; - } - `); - } - - const activityBarForegroundColor = theme.getColor(ACTIVITY_BAR_FOREGROUND); - if (activityBarForegroundColor) { - collector.addRule(` - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active .action-label:not(.codicon), - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus .action-label:not(.codicon), - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover .action-label:not(.codicon) { - background-color: ${activityBarForegroundColor} !important; - } - .monaco-workbench .activitybar > .content .home-bar > .monaco-action-bar .action-item .action-label.codicon, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active .action-label.codicon, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus .action-label.codicon, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover .action-label.codicon { - color: ${activityBarForegroundColor} !important; - } - `); - } - - const activityBarActiveBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BORDER); - if (activityBarActiveBorderColor) { - collector.addRule(` - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator:before { - border-left-color: ${activityBarActiveBorderColor}; - } - `); - } - - const activityBarActiveFocusBorderColor = theme.getColor(ACTIVITY_BAR_ACTIVE_FOCUS_BORDER); - if (activityBarActiveFocusBorderColor) { - collector.addRule(` - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:focus::before { - visibility: hidden; - } - - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:focus .active-item-indicator:before { - visibility: visible; - border-left-color: ${activityBarActiveFocusBorderColor}; - } - `); - } - - const activityBarActiveBackgroundColor = theme.getColor(ACTIVITY_BAR_ACTIVE_BACKGROUND); - if (activityBarActiveBackgroundColor) { - collector.addRule(` - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked .active-item-indicator { - z-index: 0; - background-color: ${activityBarActiveBackgroundColor}; - } - `); - } - - // Styling with Outline color (e.g. high contrast theme) - const outline = theme.getColor(activeContrastBorder); - if (outline) { - collector.addRule(` - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:before { - content: ""; - position: absolute; - top: 9px; - left: 9px; - height: 32px; - width: 32px; - z-index: 1; - } - - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active:before, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active:hover:before, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:before, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:hover:before { - outline: 1px solid; - } - - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover:before { - outline: 1px dashed; - } - - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus:before { - border-left-color: ${outline}; - } - - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active:before, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.active:hover:before, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:before, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item.checked:hover:before, - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:hover:before { - outline-color: ${outline}; - } - `); - } - - // Styling without outline color - else { - const focusBorderColor = theme.getColor(focusBorder); - if (focusBorderColor) { - collector.addRule(` - .monaco-workbench .activitybar > .content :not(.monaco-menu) > .monaco-action-bar .action-item:focus:before { - border-left-color: ${focusBorderColor}; - } - `); - } - } -}); diff --git a/vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts b/vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts deleted file mode 100644 index d34c06d..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/browser/parts/activitybar/activitybarPart.ts +++ /dev/null @@ -1,1088 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./media/activitybarpart'; -import * as nls from 'vs/nls'; -import { ActionsOrientation, ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; -import { GLOBAL_ACTIVITY_ID, IActivity, ACCOUNTS_ACTIVITY_ID } from 'vs/workbench/common/activity'; -import { Part } from 'vs/workbench/browser/part'; -import { GlobalActivityActionViewItem, ViewContainerActivityAction, PlaceHolderToggleCompositePinnedAction, PlaceHolderViewContainerActivityAction, AccountsActivityActionViewItem, HomeActivityActionViewItem } from 'vs/workbench/browser/parts/activitybar/activitybarActions'; -import { IBadge, NumberBadge } from 'vs/workbench/services/activity/common/activity'; -import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; -import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; -import { IDisposable, toDisposable, DisposableStore, Disposable } from 'vs/base/common/lifecycle'; -import { ToggleActivityBarVisibilityAction, ToggleMenuBarAction, ToggleSidebarPositionAction } from 'vs/workbench/browser/actions/layoutActions'; -import { IThemeService, IColorTheme, ThemeIcon } from 'vs/platform/theme/common/themeService'; -import { ACTIVITY_BAR_BACKGROUND, ACTIVITY_BAR_BORDER, ACTIVITY_BAR_FOREGROUND, ACTIVITY_BAR_ACTIVE_BORDER, ACTIVITY_BAR_BADGE_BACKGROUND, ACTIVITY_BAR_BADGE_FOREGROUND, ACTIVITY_BAR_INACTIVE_FOREGROUND, ACTIVITY_BAR_ACTIVE_BACKGROUND, ACTIVITY_BAR_DRAG_AND_DROP_BORDER } from 'vs/workbench/common/theme'; -import { contrastBorder } from 'vs/platform/theme/common/colorRegistry'; -import { CompositeBar, ICompositeBarItem, CompositeDragAndDrop } from 'vs/workbench/browser/parts/compositeBar'; -import { Dimension, createCSSRule, asCSSUrl, addDisposableListener, EventType } from 'vs/base/browser/dom'; -import { IStorageService, StorageScope, IStorageValueChangeEvent, StorageTarget } from 'vs/platform/storage/common/storage'; -import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; -import { URI, UriComponents } from 'vs/base/common/uri'; -import { ToggleCompositePinnedAction, ICompositeBarColors, ActivityAction, ICompositeActivity } from 'vs/workbench/browser/parts/compositeBarActions'; -import { IViewDescriptorService, ViewContainer, TEST_VIEW_CONTAINER_ID, IViewContainerModel, ViewContainerLocation, IViewsService } from 'vs/workbench/common/views'; -import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { assertIsDefined } from 'vs/base/common/types'; -import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService'; -import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; -import { Schemas } from 'vs/base/common/network'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { CustomMenubarControl } from 'vs/workbench/browser/parts/titlebar/menubarControl'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { getMenuBarVisibility } from 'vs/platform/windows/common/windows'; -import { isWeb } from 'vs/base/common/platform'; -import { Before2D } from 'vs/workbench/browser/dnd'; -import { Codicon, iconRegistry } from 'vs/base/common/codicons'; -import { Action, Separator } from 'vs/base/common/actions'; -import { Event } from 'vs/base/common/event'; -import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import { Action2, registerAction2 } from 'vs/platform/actions/common/actions'; -import { CATEGORIES } from 'vs/workbench/common/actions'; -import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; - -interface IPlaceholderViewContainer { - readonly id: string; - readonly name?: string; - readonly iconUrl?: UriComponents; - readonly themeIcon?: ThemeIcon; - readonly views?: { when?: string }[]; -} - -interface IPinnedViewContainer { - readonly id: string; - readonly pinned: boolean; - readonly order?: number; - readonly visible: boolean; -} - -interface ICachedViewContainer { - readonly id: string; - name?: string; - icon?: URI | ThemeIcon; - readonly pinned: boolean; - readonly order?: number; - visible: boolean; - views?: { when?: string }[]; -} - -const settingsViewBarIcon = registerIcon('settings-view-bar-icon', Codicon.settingsGear, nls.localize('settingsViewBarIcon', 'Settings icon in the view bar.')); -const accountsViewBarIcon = registerIcon('accounts-view-bar-icon', Codicon.account, nls.localize('accountsViewBarIcon', 'Accounts icon in the view bar.')); - -export class ActivitybarPart extends Part implements IActivityBarService { - - declare readonly _serviceBrand: undefined; - - private static readonly PINNED_VIEW_CONTAINERS = 'workbench.activity.pinnedViewlets2'; - private static readonly PLACEHOLDER_VIEW_CONTAINERS = 'workbench.activity.placeholderViewlets'; - private static readonly ACTION_HEIGHT = 48; - private static readonly ACCOUNTS_ACTION_INDEX = 0; - - //#region IView - - readonly minimumWidth: number = 48; - readonly maximumWidth: number = 48; - readonly minimumHeight: number = 0; - readonly maximumHeight: number = Number.POSITIVE_INFINITY; - - //#endregion - - private content: HTMLElement | undefined; - - private homeBar: ActionBar | undefined; - private homeBarContainer: HTMLElement | undefined; - - private menuBar: CustomMenubarControl | undefined; - private menuBarContainer: HTMLElement | undefined; - - private compositeBar: CompositeBar; - private compositeBarContainer: HTMLElement | undefined; - - private globalActivityAction: ActivityAction | undefined; - private globalActivityActionBar: ActionBar | undefined; - private globalActivitiesContainer: HTMLElement | undefined; - private readonly globalActivity: ICompositeActivity[] = []; - - private accountsActivityAction: ActivityAction | undefined; - - private readonly accountsActivity: ICompositeActivity[] = []; - - private readonly compositeActions = new Map(); - private readonly viewContainerDisposables = new Map(); - - private readonly keyboardNavigationDisposables = this._register(new DisposableStore()); - - private readonly location = ViewContainerLocation.Sidebar; - - constructor( - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, - @IThemeService themeService: IThemeService, - @IStorageService private readonly storageService: IStorageService, - @IExtensionService private readonly extensionService: IExtensionService, - @IViewDescriptorService private readonly viewDescriptorService: IViewDescriptorService, - @IViewsService private readonly viewsService: IViewsService, - @IContextKeyService private readonly contextKeyService: IContextKeyService, - @IConfigurationService private readonly configurationService: IConfigurationService, - @IWorkbenchEnvironmentService private readonly environmentService: IWorkbenchEnvironmentService, - ) { - super(Parts.ACTIVITYBAR_PART, { hasTitle: false }, themeService, storageService, layoutService); - - for (const cachedViewContainer of this.cachedViewContainers) { - if ( - environmentService.remoteAuthority || // In remote window, hide activity bar entries until registered - this.shouldBeHidden(cachedViewContainer.id, cachedViewContainer) - ) { - cachedViewContainer.visible = false; - } - } - - this.compositeBar = this.createCompositeBar(); - - this.onDidRegisterViewContainers(this.getViewContainers()); - - this.registerListeners(); - } - - private createCompositeBar() { - const cachedItems = this.cachedViewContainers - .map(container => ({ - id: container.id, - name: container.name, - visible: container.visible, - order: container.order, - pinned: container.pinned - })); - - return this._register(this.instantiationService.createInstance(CompositeBar, cachedItems, { - icon: true, - orientation: ActionsOrientation.VERTICAL, - preventLoopNavigation: true, - openComposite: (compositeId: string) => this.viewsService.openViewContainer(compositeId, true), - getActivityAction: (compositeId: string) => this.getCompositeActions(compositeId).activityAction, - getCompositePinnedAction: (compositeId: string) => this.getCompositeActions(compositeId).pinnedAction, - getOnCompositeClickAction: (compositeId: string) => new Action(compositeId, '', '', true, () => this.viewsService.isViewContainerVisible(compositeId) ? Promise.resolve(this.viewsService.closeViewContainer(compositeId)) : this.viewsService.openViewContainer(compositeId)), - getContextMenuActions: () => { - const actions = []; - - // Home - if (this.homeBarContainer) { - actions.push(new Action( - 'toggleHomeBarAction', - this.homeBarVisibilityPreference ? nls.localize('hideHomeBar', "Hide Home Button") : nls.localize('showHomeBar', "Show Home Button"), - undefined, - true, - async () => { this.homeBarVisibilityPreference = !this.homeBarVisibilityPreference; } - )); - } - - // Menu - const menuBarVisibility = getMenuBarVisibility(this.configurationService); - if (menuBarVisibility === 'compact' || (menuBarVisibility === 'hidden' && isWeb)) { - actions.push(this.instantiationService.createInstance(ToggleMenuBarAction, ToggleMenuBarAction.ID, menuBarVisibility === 'compact' ? nls.localize('hideMenu', "Hide Menu") : nls.localize('showMenu', "Show Menu"))); - } - - // Accounts - actions.push(new Action( - 'toggleAccountsVisibility', - this.accountsVisibilityPreference ? nls.localize('hideAccounts', "Hide Accounts") : nls.localize('showAccounts', "Show Accounts"), - undefined, - true, - async () => { this.accountsVisibilityPreference = !this.accountsVisibilityPreference; } - )); - actions.push(new Separator()); - - // Toggle Sidebar - actions.push(this.instantiationService.createInstance(ToggleSidebarPositionAction, ToggleSidebarPositionAction.ID, ToggleSidebarPositionAction.getLabel(this.layoutService))); - - // Toggle Activity Bar - actions.push(new Action( - ToggleActivityBarVisibilityAction.ID, - nls.localize('hideActivitBar', "Hide Activity Bar"), - undefined, - true, - async () => { this.instantiationService.invokeFunction(accessor => new ToggleActivityBarVisibilityAction().run(accessor)); } - )); - - return actions; - }, - getContextMenuActionsForComposite: compositeId => this.getContextMenuActionsForComposite(compositeId), - getDefaultCompositeId: () => this.viewDescriptorService.getDefaultViewContainer(this.location)!.id, - hidePart: () => this.layoutService.setSideBarHidden(true), - dndHandler: new CompositeDragAndDrop(this.viewDescriptorService, ViewContainerLocation.Sidebar, - (id: string, focus?: boolean) => this.viewsService.openViewContainer(id, focus), - (from: string, to: string, before?: Before2D) => this.compositeBar.move(from, to, before?.verticallyBefore), - () => this.compositeBar.getCompositeBarItems(), - ), - compositeSize: 52, - colors: (theme: IColorTheme) => this.getActivitybarItemColors(theme), - overflowActionSize: ActivitybarPart.ACTION_HEIGHT - })); - } - - private getContextMenuActionsForComposite(compositeId: string): Action[] { - const actions = []; - - const viewContainer = this.viewDescriptorService.getViewContainerById(compositeId)!; - const defaultLocation = this.viewDescriptorService.getDefaultViewContainerLocation(viewContainer)!; - if (defaultLocation !== this.viewDescriptorService.getViewContainerLocation(viewContainer)) { - actions.push(new Action('resetLocationAction', nls.localize('resetLocation', "Reset Location"), undefined, true, async () => { - this.viewDescriptorService.moveViewContainerToLocation(viewContainer, defaultLocation); - })); - } else { - const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer); - if (viewContainerModel.allViewDescriptors.length === 1) { - const viewToReset = viewContainerModel.allViewDescriptors[0]; - const defaultContainer = this.viewDescriptorService.getDefaultContainerById(viewToReset.id)!; - if (defaultContainer !== viewContainer) { - actions.push(new Action('resetLocationAction', nls.localize('resetLocation', "Reset Location"), undefined, true, async () => { - this.viewDescriptorService.moveViewsToContainer([viewToReset], defaultContainer); - })); - } - } - } - - return actions; - } - - private registerListeners(): void { - - // View Container Changes - this._register(this.viewDescriptorService.onDidChangeViewContainers(({ added, removed }) => this.onDidChangeViewContainers(added, removed))); - this._register(this.viewDescriptorService.onDidChangeContainerLocation(({ viewContainer, from, to }) => this.onDidChangeViewContainerLocation(viewContainer, from, to))); - - // View Container Visibility Changes - this._register(Event.filter(this.viewsService.onDidChangeViewContainerVisibility, e => e.location === this.location)(({ id, visible }) => this.onDidChangeViewContainerVisibility(id, visible))); - - // Extension registration - let disposables = this._register(new DisposableStore()); - this._register(this.extensionService.onDidRegisterExtensions(() => { - disposables.clear(); - this.onDidRegisterExtensions(); - this.compositeBar.onDidChange(() => this.saveCachedViewContainers(), this, disposables); - this.storageService.onDidChangeValue(e => this.onDidStorageValueChange(e), this, disposables); - })); - - // Register for configuration changes - this._register(this.configurationService.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('window.menuBarVisibility')) { - if (getMenuBarVisibility(this.configurationService) === 'compact') { - this.installMenubar(); - } else { - this.uninstallMenubar(); - } - } - })); - } - - private onDidChangeViewContainers(added: ReadonlyArray<{ container: ViewContainer, location: ViewContainerLocation }>, removed: ReadonlyArray<{ container: ViewContainer, location: ViewContainerLocation }>) { - removed.filter(({ location }) => location === ViewContainerLocation.Sidebar).forEach(({ container }) => this.onDidDeregisterViewContainer(container)); - this.onDidRegisterViewContainers(added.filter(({ location }) => location === ViewContainerLocation.Sidebar).map(({ container }) => container)); - } - - private onDidChangeViewContainerLocation(container: ViewContainer, from: ViewContainerLocation, to: ViewContainerLocation) { - if (from === this.location) { - this.onDidDeregisterViewContainer(container); - } - - if (to === this.location) { - this.onDidRegisterViewContainers([container]); - } - } - - private onDidChangeViewContainerVisibility(id: string, visible: boolean) { - if (visible) { - // Activate view container action on opening of a view container - this.onDidViewContainerVisible(id); - } else { - // Deactivate view container action on close - this.compositeBar.deactivateComposite(id); - } - } - - private onDidChangeHomeBarVisibility(): void { - if (this.homeBarContainer) { - this.homeBarContainer.style.display = this.homeBarVisibilityPreference ? '' : 'none'; - } - } - - private onDidRegisterExtensions(): void { - this.removeNotExistingComposites(); - this.saveCachedViewContainers(); - } - - private onDidViewContainerVisible(id: string): void { - const viewContainer = this.getViewContainer(id); - if (viewContainer) { - - // Update the composite bar by adding - this.compositeBar.addComposite(viewContainer); - this.compositeBar.activateComposite(viewContainer.id); - - if (viewContainer.hideIfEmpty) { - const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer); - if (viewContainerModel.activeViewDescriptors.length === 0) { - // Update the composite bar by hiding - this.hideComposite(viewContainer.id); - } - } - } - } - - showActivity(viewContainerOrActionId: string, badge: IBadge, clazz?: string, priority?: number): IDisposable { - if (this.getViewContainer(viewContainerOrActionId)) { - return this.compositeBar.showActivity(viewContainerOrActionId, badge, clazz, priority); - } - - if (viewContainerOrActionId === GLOBAL_ACTIVITY_ID) { - return this.showGlobalActivity(GLOBAL_ACTIVITY_ID, badge, clazz, priority); - } - - if (viewContainerOrActionId === ACCOUNTS_ACTIVITY_ID) { - return this.showGlobalActivity(ACCOUNTS_ACTIVITY_ID, badge, clazz, priority); - } - - return Disposable.None; - } - - private showGlobalActivity(activityId: string, badge: IBadge, clazz?: string, priority?: number): IDisposable { - if (typeof priority !== 'number') { - priority = 0; - } - - const activity: ICompositeActivity = { badge, clazz, priority }; - const activityCache = activityId === GLOBAL_ACTIVITY_ID ? this.globalActivity : this.accountsActivity; - - for (let i = 0; i <= activityCache.length; i++) { - if (i === activityCache.length) { - activityCache.push(activity); - break; - } else if (activityCache[i].priority <= priority) { - activityCache.splice(i, 0, activity); - break; - } - } - this.updateGlobalActivity(activityId); - - return toDisposable(() => this.removeGlobalActivity(activityId, activity)); - } - - private removeGlobalActivity(activityId: string, activity: ICompositeActivity): void { - const activityCache = activityId === GLOBAL_ACTIVITY_ID ? this.globalActivity : this.accountsActivity; - const index = activityCache.indexOf(activity); - if (index !== -1) { - activityCache.splice(index, 1); - this.updateGlobalActivity(activityId); - } - } - - private updateGlobalActivity(activityId: string): void { - const activityAction = activityId === GLOBAL_ACTIVITY_ID ? this.globalActivityAction : this.accountsActivityAction; - if (!activityAction) { - return; - } - - const activityCache = activityId === GLOBAL_ACTIVITY_ID ? this.globalActivity : this.accountsActivity; - if (activityCache.length) { - const [{ badge, clazz, priority }] = activityCache; - if (badge instanceof NumberBadge && activityCache.length > 1) { - const cumulativeNumberBadge = this.getCumulativeNumberBadge(activityCache, priority); - activityAction.setBadge(cumulativeNumberBadge); - } else { - activityAction.setBadge(badge, clazz); - } - } else { - activityAction.setBadge(undefined); - } - } - - private getCumulativeNumberBadge(activityCache: ICompositeActivity[], priority: number): NumberBadge { - const numberActivities = activityCache.filter(activity => activity.badge instanceof NumberBadge && activity.priority === priority); - const number = numberActivities.reduce((result, activity) => { return result + (activity.badge).number; }, 0); - const descriptorFn = (): string => { - return numberActivities.reduce((result, activity, index) => { - result = result + (activity.badge).getDescription(); - if (index < numberActivities.length - 1) { - result = `${result}\n`; - } - - return result; - }, ''); - }; - - return new NumberBadge(number, descriptorFn); - } - - private uninstallMenubar() { - if (this.menuBar) { - this.menuBar.dispose(); - this.menuBar = undefined; - } - - if (this.menuBarContainer) { - this.menuBarContainer.remove(); - this.menuBarContainer = undefined; - this.registerKeyboardNavigationListeners(); - } - } - - private installMenubar() { - if (this.menuBar) { - return; // prevent menu bar from installing twice #110720 - } - - this.menuBarContainer = document.createElement('div'); - this.menuBarContainer.classList.add('menubar'); - - const content = assertIsDefined(this.content); - if (this.homeBarContainer) { - content.insertBefore(this.menuBarContainer, this.homeBarContainer.nextSibling); - } else { - content.prepend(this.menuBarContainer); - } - - // Menubar: install a custom menu bar depending on configuration - this.menuBar = this._register(this.instantiationService.createInstance(CustomMenubarControl)); - this.menuBar.create(this.menuBarContainer); - - this.registerKeyboardNavigationListeners(); - } - - createContentArea(parent: HTMLElement): HTMLElement { - this.element = parent; - - this.content = document.createElement('div'); - this.content.classList.add('content'); - parent.appendChild(this.content); - - // Home action bar - const homeIndicator = this.environmentService.options?.homeIndicator; - if (homeIndicator) { - let codicon = iconRegistry.get(homeIndicator.icon); - if (!codicon) { - codicon = Codicon.code; - } - - this.createHomeBar(homeIndicator.href, codicon); - this.onDidChangeHomeBarVisibility(); - } - - // Install menubar if compact - if (getMenuBarVisibility(this.configurationService) === 'compact') { - this.installMenubar(); - } - - // View Containers action bar - this.compositeBarContainer = this.compositeBar.create(this.content); - - // Global action bar - this.globalActivitiesContainer = document.createElement('div'); - this.content.appendChild(this.globalActivitiesContainer); - - this.createGlobalActivityActionBar(this.globalActivitiesContainer); - - // Keyboard Navigation - this.registerKeyboardNavigationListeners(); - - return this.content; - } - - private registerKeyboardNavigationListeners(): void { - this.keyboardNavigationDisposables.clear(); - - // Down arrow on home indicator - if (this.homeBarContainer) { - this.keyboardNavigationDisposables.add(addDisposableListener(this.homeBarContainer, EventType.KEY_DOWN, e => { - const kbEvent = new StandardKeyboardEvent(e); - if (kbEvent.equals(KeyCode.DownArrow) || kbEvent.equals(KeyCode.RightArrow)) { - if (this.menuBar) { - this.menuBar.toggleFocus(); - } else if (this.compositeBar) { - this.compositeBar.focus(); - } - } - })); - } - - // Up/Down arrow on compact menu - if (this.menuBarContainer) { - this.keyboardNavigationDisposables.add(addDisposableListener(this.menuBarContainer, EventType.KEY_DOWN, e => { - const kbEvent = new StandardKeyboardEvent(e); - if (kbEvent.equals(KeyCode.DownArrow) || kbEvent.equals(KeyCode.RightArrow)) { - if (this.compositeBar) { - this.compositeBar.focus(); - } - } else if (kbEvent.equals(KeyCode.UpArrow) || kbEvent.equals(KeyCode.LeftArrow)) { - if (this.homeBar) { - this.homeBar.focus(); - } - } - })); - } - - // Up/Down on Activity Icons - if (this.compositeBarContainer) { - this.keyboardNavigationDisposables.add(addDisposableListener(this.compositeBarContainer, EventType.KEY_DOWN, e => { - const kbEvent = new StandardKeyboardEvent(e); - if (kbEvent.equals(KeyCode.DownArrow) || kbEvent.equals(KeyCode.RightArrow)) { - if (this.globalActivityActionBar) { - this.globalActivityActionBar.focus(true); - } - } else if (kbEvent.equals(KeyCode.UpArrow) || kbEvent.equals(KeyCode.LeftArrow)) { - if (this.menuBar) { - this.menuBar.toggleFocus(); - } else if (this.homeBar) { - this.homeBar.focus(); - } - } - })); - } - - // Up arrow on global icons - if (this.globalActivitiesContainer) { - this.keyboardNavigationDisposables.add(addDisposableListener(this.globalActivitiesContainer, EventType.KEY_DOWN, e => { - const kbEvent = new StandardKeyboardEvent(e); - if (kbEvent.equals(KeyCode.UpArrow) || kbEvent.equals(KeyCode.LeftArrow)) { - if (this.compositeBar) { - this.compositeBar.focus(this.getVisibleViewContainerIds().length - 1); - } - } - })); - } - } - - private createHomeBar(href: string, icon: Codicon): void { - this.homeBarContainer = document.createElement('div'); - this.homeBarContainer.setAttribute('aria-label', nls.localize('homeIndicator', "Home")); - this.homeBarContainer.setAttribute('role', 'toolbar'); - this.homeBarContainer.classList.add('home-bar'); - - this.homeBar = this._register(new ActionBar(this.homeBarContainer, { - actionViewItemProvider: action => this.instantiationService.createInstance(HomeActivityActionViewItem, href, action as ActivityAction, (theme: IColorTheme) => this.getActivitybarItemColors(theme)), - orientation: ActionsOrientation.VERTICAL, - ariaLabel: nls.localize('home', "Home"), - animated: false, - preventLoopNavigation: true, - ignoreOrientationForPreviousAndNextKey: true - })); - - // modify-by-github1s, hide home-bar-icon-badge - // const homeBarIconBadge = document.createElement('div'); - // homeBarIconBadge.classList.add('home-bar-icon-badge'); - // this.homeBarContainer.appendChild(homeBarIconBadge); - - this.homeBar.push(this._register(new ActivityAction({ - id: 'workbench.actions.home', - name: 'Repository', - cssClass: icon.classNames - }))); - - const content = assertIsDefined(this.content); - content.appendChild(this.homeBarContainer); - } - - private createGlobalActivityActionBar(container: HTMLElement): void { - this.globalActivityActionBar = this._register(new ActionBar(container, { - actionViewItemProvider: action => { - if (action.id === 'workbench.actions.manage') { - return this.instantiationService.createInstance(GlobalActivityActionViewItem, action as ActivityAction, (theme: IColorTheme) => this.getActivitybarItemColors(theme)); - } - - if (action.id === 'workbench.actions.accounts') { - return this.instantiationService.createInstance(AccountsActivityActionViewItem, action as ActivityAction, (theme: IColorTheme) => this.getActivitybarItemColors(theme)); - } - - throw new Error(`No view item for action '${action.id}'`); - }, - orientation: ActionsOrientation.VERTICAL, - ariaLabel: nls.localize('manage', "Manage"), - animated: false, - preventLoopNavigation: true, - ignoreOrientationForPreviousAndNextKey: true - })); - - this.globalActivityAction = this._register(new ActivityAction({ - id: 'workbench.actions.manage', - name: nls.localize('manage', "Manage"), - cssClass: ThemeIcon.asClassName(settingsViewBarIcon) - })); - - if (this.accountsVisibilityPreference) { - this.accountsActivityAction = this._register(new ActivityAction({ - id: 'workbench.actions.accounts', - name: nls.localize('accounts', "Accounts"), - cssClass: ThemeIcon.asClassName(accountsViewBarIcon) - })); - - this.globalActivityActionBar.push(this.accountsActivityAction, { index: ActivitybarPart.ACCOUNTS_ACTION_INDEX }); - } - - this.globalActivityActionBar.push(this.globalActivityAction); - } - - private toggleAccountsActivity() { - if (this.globalActivityActionBar) { - if (this.accountsActivityAction) { - this.globalActivityActionBar.pull(ActivitybarPart.ACCOUNTS_ACTION_INDEX); - this.accountsActivityAction = undefined; - } else { - this.accountsActivityAction = this._register(new ActivityAction({ - id: 'workbench.actions.accounts', - name: nls.localize('accounts', "Accounts"), - cssClass: Codicon.account.classNames - })); - this.globalActivityActionBar.push(this.accountsActivityAction, { index: ActivitybarPart.ACCOUNTS_ACTION_INDEX }); - } - } - - this.updateGlobalActivity(ACCOUNTS_ACTIVITY_ID); - } - - private getCompositeActions(compositeId: string): { activityAction: ViewContainerActivityAction, pinnedAction: ToggleCompositePinnedAction } { - let compositeActions = this.compositeActions.get(compositeId); - if (!compositeActions) { - const viewContainer = this.getViewContainer(compositeId); - if (viewContainer) { - const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer); - compositeActions = { - activityAction: this.instantiationService.createInstance(ViewContainerActivityAction, this.toActivity(viewContainer, viewContainerModel)), - pinnedAction: new ToggleCompositePinnedAction(viewContainer, this.compositeBar) - }; - } else { - const cachedComposite = this.cachedViewContainers.filter(c => c.id === compositeId)[0]; - compositeActions = { - activityAction: this.instantiationService.createInstance(PlaceHolderViewContainerActivityAction, ActivitybarPart.toActivity(compositeId, compositeId, cachedComposite?.icon, undefined)), - pinnedAction: new PlaceHolderToggleCompositePinnedAction(compositeId, this.compositeBar) - }; - } - - this.compositeActions.set(compositeId, compositeActions); - } - - return compositeActions; - } - - private onDidRegisterViewContainers(viewContainers: ReadonlyArray): void { - for (const viewContainer of viewContainers) { - const cachedViewContainer = this.cachedViewContainers.filter(({ id }) => id === viewContainer.id)[0]; - const visibleViewContainer = this.viewsService.getVisibleViewContainer(this.location); - const isActive = visibleViewContainer?.id === viewContainer.id; - - if (isActive || !this.shouldBeHidden(viewContainer.id, cachedViewContainer)) { - this.compositeBar.addComposite(viewContainer); - - // Pin it by default if it is new - if (!cachedViewContainer) { - this.compositeBar.pin(viewContainer.id); - } - - if (isActive) { - this.compositeBar.activateComposite(viewContainer.id); - } - } - } - - for (const viewContainer of viewContainers) { - const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer); - this.updateActivity(viewContainer, viewContainerModel); - this.onDidChangeActiveViews(viewContainer, viewContainerModel); - - const disposables = new DisposableStore(); - disposables.add(viewContainerModel.onDidChangeContainerInfo(() => this.updateActivity(viewContainer, viewContainerModel))); - disposables.add(viewContainerModel.onDidChangeActiveViewDescriptors(() => this.onDidChangeActiveViews(viewContainer, viewContainerModel))); - - this.viewContainerDisposables.set(viewContainer.id, disposables); - } - } - - private onDidDeregisterViewContainer(viewContainer: ViewContainer): void { - const disposable = this.viewContainerDisposables.get(viewContainer.id); - if (disposable) { - disposable.dispose(); - } - - this.viewContainerDisposables.delete(viewContainer.id); - this.removeComposite(viewContainer.id); - } - - private updateActivity(viewContainer: ViewContainer, viewContainerModel: IViewContainerModel): void { - const activity: IActivity = this.toActivity(viewContainer, viewContainerModel); - const { activityAction, pinnedAction } = this.getCompositeActions(viewContainer.id); - activityAction.updateActivity(activity); - - if (pinnedAction instanceof PlaceHolderToggleCompositePinnedAction) { - pinnedAction.setActivity(activity); - } - - this.saveCachedViewContainers(); - } - - private toActivity({ id, focusCommand }: ViewContainer, { icon, title: name }: IViewContainerModel): IActivity { - return ActivitybarPart.toActivity(id, name, icon, focusCommand?.id || id); - } - - private static toActivity(id: string, name: string, icon: URI | ThemeIcon | undefined, keybindingId: string | undefined): IActivity { - let cssClass: string | undefined = undefined; - let iconUrl: URI | undefined = undefined; - if (URI.isUri(icon)) { - iconUrl = icon; - cssClass = `activity-${id.replace(/\./g, '-')}`; - const iconClass = `.monaco-workbench .activitybar .monaco-action-bar .action-label.${cssClass}`; - createCSSRule(iconClass, ` - mask: ${asCSSUrl(icon)} no-repeat 50% 50%; - mask-size: 24px; - -webkit-mask: ${asCSSUrl(icon)} no-repeat 50% 50%; - -webkit-mask-size: 24px; - `); - } else if (ThemeIcon.isThemeIcon(icon)) { - cssClass = ThemeIcon.asClassName(icon); - } - - return { id, name, cssClass, iconUrl, keybindingId }; - } - - private onDidChangeActiveViews(viewContainer: ViewContainer, viewContainerModel: IViewContainerModel): void { - if (viewContainerModel.activeViewDescriptors.length) { - this.compositeBar.addComposite(viewContainer); - } else if (viewContainer.hideIfEmpty) { - this.hideComposite(viewContainer.id); - } - } - - private shouldBeHidden(viewContainerId: string, cachedViewContainer?: ICachedViewContainer): boolean { - const viewContainer = this.getViewContainer(viewContainerId); - if (!viewContainer || !viewContainer.hideIfEmpty) { - return false; - } - - return cachedViewContainer?.views && cachedViewContainer.views.length - ? cachedViewContainer.views.every(({ when }) => !!when && !this.contextKeyService.contextMatchesRules(ContextKeyExpr.deserialize(when))) - : viewContainerId === TEST_VIEW_CONTAINER_ID /* Hide Test view container for the first time or it had no views registered before */; - } - - private removeNotExistingComposites(): void { - const viewContainers = this.getViewContainers(); - for (const { id } of this.cachedViewContainers) { - if (viewContainers.every(viewContainer => viewContainer.id !== id)) { - if (this.viewDescriptorService.isViewContainerRemovedPermanently(id)) { - this.removeComposite(id); - } else { - this.hideComposite(id); - } - } - } - } - - private hideComposite(compositeId: string): void { - this.compositeBar.hideComposite(compositeId); - - const compositeActions = this.compositeActions.get(compositeId); - if (compositeActions) { - compositeActions.activityAction.dispose(); - compositeActions.pinnedAction.dispose(); - this.compositeActions.delete(compositeId); - } - } - - private removeComposite(compositeId: string): void { - this.compositeBar.removeComposite(compositeId); - - const compositeActions = this.compositeActions.get(compositeId); - if (compositeActions) { - compositeActions.activityAction.dispose(); - compositeActions.pinnedAction.dispose(); - this.compositeActions.delete(compositeId); - } - } - - getPinnedViewContainerIds(): string[] { - const pinnedCompositeIds = this.compositeBar.getPinnedComposites().map(v => v.id); - return this.getViewContainers() - .filter(v => this.compositeBar.isPinned(v.id)) - .sort((v1, v2) => pinnedCompositeIds.indexOf(v1.id) - pinnedCompositeIds.indexOf(v2.id)) - .map(v => v.id); - } - - getVisibleViewContainerIds(): string[] { - return this.compositeBar.getVisibleComposites() - .filter(v => this.viewsService.getVisibleViewContainer(this.location)?.id === v.id || this.compositeBar.isPinned(v.id)) - .map(v => v.id); - } - - focusActivityBar(): void { - this.compositeBar.focus(); - } - - updateStyles(): void { - super.updateStyles(); - - const container = assertIsDefined(this.getContainer()); - const background = this.getColor(ACTIVITY_BAR_BACKGROUND) || ''; - container.style.backgroundColor = background; - - const borderColor = this.getColor(ACTIVITY_BAR_BORDER) || this.getColor(contrastBorder) || ''; - container.classList.toggle('bordered', !!borderColor); - container.style.borderColor = borderColor ? borderColor : ''; - } - - private getActivitybarItemColors(theme: IColorTheme): ICompositeBarColors { - return { - activeForegroundColor: theme.getColor(ACTIVITY_BAR_FOREGROUND), - inactiveForegroundColor: theme.getColor(ACTIVITY_BAR_INACTIVE_FOREGROUND), - activeBorderColor: theme.getColor(ACTIVITY_BAR_ACTIVE_BORDER), - activeBackground: theme.getColor(ACTIVITY_BAR_ACTIVE_BACKGROUND), - badgeBackground: theme.getColor(ACTIVITY_BAR_BADGE_BACKGROUND), - badgeForeground: theme.getColor(ACTIVITY_BAR_BADGE_FOREGROUND), - dragAndDropBorder: theme.getColor(ACTIVITY_BAR_DRAG_AND_DROP_BORDER), - activeBackgroundColor: undefined, inactiveBackgroundColor: undefined, activeBorderBottomColor: undefined, - }; - } - - layout(width: number, height: number): void { - if (!this.layoutService.isVisible(Parts.ACTIVITYBAR_PART)) { - return; - } - - // Layout contents - const contentAreaSize = super.layoutContents(width, height).contentSize; - - // Layout composite bar - let availableHeight = contentAreaSize.height; - if (this.homeBarContainer) { - availableHeight -= this.homeBarContainer.clientHeight; - } - if (this.menuBarContainer) { - availableHeight -= this.menuBarContainer.clientHeight; - } - if (this.globalActivityActionBar) { - availableHeight -= (this.globalActivityActionBar.viewItems.length * ActivitybarPart.ACTION_HEIGHT); // adjust height for global actions showing - } - this.compositeBar.layout(new Dimension(width, availableHeight)); - } - - private getViewContainer(id: string): ViewContainer | undefined { - const viewContainer = this.viewDescriptorService.getViewContainerById(id); - - return viewContainer && this.viewDescriptorService.getViewContainerLocation(viewContainer) === this.location ? viewContainer : undefined; - } - - private getViewContainers(): ReadonlyArray { - return this.viewDescriptorService.getViewContainersByLocation(this.location); - } - - private onDidStorageValueChange(e: IStorageValueChangeEvent): void { - if (e.key === ActivitybarPart.PINNED_VIEW_CONTAINERS && e.scope === StorageScope.GLOBAL - && this.pinnedViewContainersValue !== this.getStoredPinnedViewContainersValue() /* This checks if current window changed the value or not */) { - this._pinnedViewContainersValue = undefined; - this._cachedViewContainers = undefined; - - const newCompositeItems: ICompositeBarItem[] = []; - const compositeItems = this.compositeBar.getCompositeBarItems(); - - for (const cachedViewContainer of this.cachedViewContainers) { - newCompositeItems.push({ - id: cachedViewContainer.id, - name: cachedViewContainer.name, - order: cachedViewContainer.order, - pinned: cachedViewContainer.pinned, - visible: !!compositeItems.find(({ id }) => id === cachedViewContainer.id) - }); - } - - for (let index = 0; index < compositeItems.length; index++) { - // Add items currently exists but does not exist in new. - if (!newCompositeItems.some(({ id }) => id === compositeItems[index].id)) { - newCompositeItems.splice(index, 0, compositeItems[index]); - } - } - - this.compositeBar.setCompositeBarItems(newCompositeItems); - } - - if (e.key === HomeActivityActionViewItem.HOME_BAR_VISIBILITY_PREFERENCE && e.scope === StorageScope.GLOBAL) { - this.onDidChangeHomeBarVisibility(); - } - - if (e.key === AccountsActivityActionViewItem.ACCOUNTS_VISIBILITY_PREFERENCE_KEY && e.scope === StorageScope.GLOBAL) { - this.toggleAccountsActivity(); - } - } - - private saveCachedViewContainers(): void { - const state: ICachedViewContainer[] = []; - - const compositeItems = this.compositeBar.getCompositeBarItems(); - for (const compositeItem of compositeItems) { - const viewContainer = this.getViewContainer(compositeItem.id); - if (viewContainer) { - const viewContainerModel = this.viewDescriptorService.getViewContainerModel(viewContainer); - const views: { when: string | undefined }[] = []; - for (const { when } of viewContainerModel.allViewDescriptors) { - views.push({ when: when ? when.serialize() : undefined }); - } - const cacheIcon = URI.isUri(viewContainerModel.icon) ? viewContainerModel.icon.scheme === Schemas.file : true; - state.push({ - id: compositeItem.id, - name: viewContainerModel.title, - icon: cacheIcon ? viewContainerModel.icon : undefined, - views, - pinned: compositeItem.pinned, - order: compositeItem.order, - visible: compositeItem.visible - }); - } else { - state.push({ id: compositeItem.id, pinned: compositeItem.pinned, order: compositeItem.order, visible: false }); - } - } - - this.storeCachedViewContainersState(state); - } - - private _cachedViewContainers: ICachedViewContainer[] | undefined = undefined; - private get cachedViewContainers(): ICachedViewContainer[] { - if (this._cachedViewContainers === undefined) { - this._cachedViewContainers = this.getPinnedViewContainers(); - for (const placeholderViewContainer of this.getPlaceholderViewContainers()) { - const cachedViewContainer = this._cachedViewContainers.filter(cached => cached.id === placeholderViewContainer.id)[0]; - if (cachedViewContainer) { - cachedViewContainer.name = placeholderViewContainer.name; - cachedViewContainer.icon = placeholderViewContainer.themeIcon ? ThemeIcon.revive(placeholderViewContainer.themeIcon) : - placeholderViewContainer.iconUrl ? URI.revive(placeholderViewContainer.iconUrl) : undefined; - cachedViewContainer.views = placeholderViewContainer.views; - } - } - } - - return this._cachedViewContainers; - } - - private storeCachedViewContainersState(cachedViewContainers: ICachedViewContainer[]): void { - this.setPinnedViewContainers(cachedViewContainers.map(({ id, pinned, visible, order }) => ({ - id, - pinned, - visible, - order - }))); - - this.setPlaceholderViewContainers(cachedViewContainers.map(({ id, icon, name, views }) => ({ - id, - iconUrl: URI.isUri(icon) ? icon : undefined, - themeIcon: ThemeIcon.isThemeIcon(icon) ? icon : undefined, - name, - views - }))); - } - - private getPinnedViewContainers(): IPinnedViewContainer[] { - return JSON.parse(this.pinnedViewContainersValue); - } - - private setPinnedViewContainers(pinnedViewContainers: IPinnedViewContainer[]): void { - this.pinnedViewContainersValue = JSON.stringify(pinnedViewContainers); - } - - private _pinnedViewContainersValue: string | undefined; - private get pinnedViewContainersValue(): string { - if (!this._pinnedViewContainersValue) { - this._pinnedViewContainersValue = this.getStoredPinnedViewContainersValue(); - } - - return this._pinnedViewContainersValue; - } - - private set pinnedViewContainersValue(pinnedViewContainersValue: string) { - if (this.pinnedViewContainersValue !== pinnedViewContainersValue) { - this._pinnedViewContainersValue = pinnedViewContainersValue; - this.setStoredPinnedViewContainersValue(pinnedViewContainersValue); - } - } - - private getStoredPinnedViewContainersValue(): string { - return this.storageService.get(ActivitybarPart.PINNED_VIEW_CONTAINERS, StorageScope.GLOBAL, '[]'); - } - - private setStoredPinnedViewContainersValue(value: string): void { - this.storageService.store(ActivitybarPart.PINNED_VIEW_CONTAINERS, value, StorageScope.GLOBAL, StorageTarget.USER); - } - - private getPlaceholderViewContainers(): IPlaceholderViewContainer[] { - return JSON.parse(this.placeholderViewContainersValue); - } - - private setPlaceholderViewContainers(placeholderViewContainers: IPlaceholderViewContainer[]): void { - this.placeholderViewContainersValue = JSON.stringify(placeholderViewContainers); - } - - private _placeholderViewContainersValue: string | undefined; - private get placeholderViewContainersValue(): string { - if (!this._placeholderViewContainersValue) { - this._placeholderViewContainersValue = this.getStoredPlaceholderViewContainersValue(); - } - - return this._placeholderViewContainersValue; - } - - private set placeholderViewContainersValue(placeholderViewContainesValue: string) { - if (this.placeholderViewContainersValue !== placeholderViewContainesValue) { - this._placeholderViewContainersValue = placeholderViewContainesValue; - this.setStoredPlaceholderViewContainersValue(placeholderViewContainesValue); - } - } - - private getStoredPlaceholderViewContainersValue(): string { - return this.storageService.get(ActivitybarPart.PLACEHOLDER_VIEW_CONTAINERS, StorageScope.GLOBAL, '[]'); - } - - private setStoredPlaceholderViewContainersValue(value: string): void { - this.storageService.store(ActivitybarPart.PLACEHOLDER_VIEW_CONTAINERS, value, StorageScope.GLOBAL, StorageTarget.MACHINE); - } - - private get homeBarVisibilityPreference(): boolean { - return this.storageService.getBoolean(HomeActivityActionViewItem.HOME_BAR_VISIBILITY_PREFERENCE, StorageScope.GLOBAL, true); - } - - private set homeBarVisibilityPreference(value: boolean) { - this.storageService.store(HomeActivityActionViewItem.HOME_BAR_VISIBILITY_PREFERENCE, value, StorageScope.GLOBAL, StorageTarget.USER); - } - - private get accountsVisibilityPreference(): boolean { - // modify-by-github1s, hide VS Code activity bar Accounts Button - // return this.storageService.getBoolean(AccountsActivityActionViewItem.ACCOUNTS_VISIBILITY_PREFERENCE_KEY, StorageScope.GLOBAL, true); - return false; - } - - private set accountsVisibilityPreference(value: boolean) { - this.storageService.store(AccountsActivityActionViewItem.ACCOUNTS_VISIBILITY_PREFERENCE_KEY, value, StorageScope.GLOBAL, StorageTarget.USER); - } - - toJSON(): object { - return { - type: Parts.ACTIVITYBAR_PART - }; - } -} - -class FocusActivityBarAction extends Action2 { - - constructor() { - super({ - id: 'workbench.action.focusActivityBar', - title: { value: nls.localize('focusActivityBar', "Focus Activity Bar"), original: 'Focus Activity Bar' }, - category: CATEGORIES.View, - f1: true - }); - } - - async run(accessor: ServicesAccessor): Promise { - const activityBarService = accessor.get(IActivityBarService); - const layoutService = accessor.get(IWorkbenchLayoutService); - layoutService.setActivityBarHidden(false); - activityBarService.focusActivityBar(); - } -} - -registerSingleton(IActivityBarService, ActivitybarPart); -registerAction2(FocusActivityBarAction); diff --git a/vscode-web-gogs1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts b/vscode-web-gogs1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts deleted file mode 100644 index da49749..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts +++ /dev/null @@ -1,521 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./media/titlebarpart'; -import { dirname, basename } from 'vs/base/common/resources'; -import { Part } from 'vs/workbench/browser/part'; -import { ITitleService, ITitleProperties } from 'vs/workbench/services/title/common/titleService'; -import { getZoomFactor } from 'vs/base/browser/browser'; -import { MenuBarVisibility, getTitleBarStyle, getMenuBarVisibility } from 'vs/platform/windows/common/windows'; -import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { StandardMouseEvent } from 'vs/base/browser/mouseEvent'; -import { IAction } from 'vs/base/common/actions'; -import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { DisposableStore, dispose } from 'vs/base/common/lifecycle'; -import * as nls from 'vs/nls'; -import { EditorResourceAccessor, Verbosity, SideBySideEditor } from 'vs/workbench/common/editor'; -import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; -import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { IThemeService, registerThemingParticipant, IColorTheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService'; -import { TITLE_BAR_ACTIVE_BACKGROUND, TITLE_BAR_ACTIVE_FOREGROUND, TITLE_BAR_INACTIVE_FOREGROUND, TITLE_BAR_INACTIVE_BACKGROUND, TITLE_BAR_BORDER, WORKBENCH_BACKGROUND } from 'vs/workbench/common/theme'; -import { isMacintosh, isWindows, isLinux, isWeb } from 'vs/base/common/platform'; -import { URI } from 'vs/base/common/uri'; -import { Color } from 'vs/base/common/color'; -import { trim } from 'vs/base/common/strings'; -import { EventType, EventHelper, Dimension, isAncestor, append, $, addDisposableListener, runAtThisOrScheduleAtNextAnimationFrame } from 'vs/base/browser/dom'; -import { CustomMenubarControl } from 'vs/workbench/browser/parts/titlebar/menubarControl'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { template } from 'vs/base/common/labels'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { Emitter } from 'vs/base/common/event'; -import { IStorageService } from 'vs/platform/storage/common/storage'; -import { Parts, IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { RunOnceScheduler } from 'vs/base/common/async'; -import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; -import { IMenuService, IMenu, MenuId } from 'vs/platform/actions/common/actions'; -import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { Schemas } from 'vs/base/common/network'; -import { withNullAsUndefined } from 'vs/base/common/types'; - -export class TitlebarPart extends Part implements ITitleService { - - private static readonly NLS_UNSUPPORTED = nls.localize('patchedWindowTitle', "[Unsupported]"); - private static readonly NLS_USER_IS_ADMIN = isWindows ? nls.localize('userIsAdmin', "[Administrator]") : nls.localize('userIsSudo', "[Superuser]"); - private static readonly NLS_EXTENSION_HOST = nls.localize('devExtensionWindowTitlePrefix', "[Extension Development Host]"); - private static readonly TITLE_DIRTY = '\u25cf '; - - //#region IView - - readonly minimumWidth: number = 0; - readonly maximumWidth: number = Number.POSITIVE_INFINITY; - get minimumHeight(): number { return 30 / (this.currentMenubarVisibility === 'hidden' ? getZoomFactor() : 1); } - get maximumHeight(): number { return this.minimumHeight; } - - //#endregion - - private _onMenubarVisibilityChange = this._register(new Emitter()); - readonly onMenubarVisibilityChange = this._onMenubarVisibilityChange.event; - - declare readonly _serviceBrand: undefined; - - protected title!: HTMLElement; - protected customMenubar: CustomMenubarControl | undefined; - protected menubar?: HTMLElement; - protected lastLayoutDimensions: Dimension | undefined; - private titleBarStyle: 'native' | 'custom'; - - private pendingTitle: string | undefined; - - private isInactive: boolean = false; - - private readonly properties: ITitleProperties = { isPure: true, isAdmin: false, prefix: undefined }; - private readonly activeEditorListeners = this._register(new DisposableStore()); - - private readonly titleUpdater = this._register(new RunOnceScheduler(() => this.doUpdateTitle(), 0)); - - private contextMenu: IMenu; - - constructor( - @IContextMenuService private readonly contextMenuService: IContextMenuService, - @IConfigurationService protected readonly configurationService: IConfigurationService, - @IEditorService private readonly editorService: IEditorService, - @IWorkbenchEnvironmentService protected readonly environmentService: IWorkbenchEnvironmentService, - @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IThemeService themeService: IThemeService, - @ILabelService private readonly labelService: ILabelService, - @IStorageService storageService: IStorageService, - @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, - @IMenuService menuService: IMenuService, - @IContextKeyService contextKeyService: IContextKeyService, - @IHostService private readonly hostService: IHostService, - @IProductService private readonly productService: IProductService, - ) { - super(Parts.TITLEBAR_PART, { hasTitle: false }, themeService, storageService, layoutService); - - this.contextMenu = this._register(menuService.createMenu(MenuId.TitleBarContext, contextKeyService)); - - this.titleBarStyle = getTitleBarStyle(this.configurationService); - - this.registerListeners(); - } - - private registerListeners(): void { - this._register(this.hostService.onDidChangeFocus(focused => focused ? this.onFocus() : this.onBlur())); - this._register(this.configurationService.onDidChangeConfiguration(e => this.onConfigurationChanged(e))); - this._register(this.editorService.onDidActiveEditorChange(() => this.onActiveEditorChange())); - this._register(this.contextService.onDidChangeWorkspaceFolders(() => this.titleUpdater.schedule())); - this._register(this.contextService.onDidChangeWorkbenchState(() => this.titleUpdater.schedule())); - this._register(this.contextService.onDidChangeWorkspaceName(() => this.titleUpdater.schedule())); - this._register(this.labelService.onDidChangeFormatters(() => this.titleUpdater.schedule())); - } - - private onBlur(): void { - this.isInactive = true; - this.updateStyles(); - } - - private onFocus(): void { - this.isInactive = false; - this.updateStyles(); - } - - protected onConfigurationChanged(event: IConfigurationChangeEvent): void { - if (event.affectsConfiguration('window.title') || event.affectsConfiguration('window.titleSeparator')) { - this.titleUpdater.schedule(); - } - - if (this.titleBarStyle !== 'native') { - if (event.affectsConfiguration('window.menuBarVisibility')) { - if (this.currentMenubarVisibility === 'compact') { - this.uninstallMenubar(); - } else { - this.installMenubar(); - } - } - } - } - - protected onMenubarVisibilityChanged(visible: boolean) { - if (isWeb || isWindows || isLinux) { - this.adjustTitleMarginToCenter(); - - this._onMenubarVisibilityChange.fire(visible); - } - } - - private onActiveEditorChange(): void { - - // Dispose old listeners - this.activeEditorListeners.clear(); - - // Calculate New Window Title - this.titleUpdater.schedule(); - - // Apply listener for dirty and label changes - const activeEditor = this.editorService.activeEditor; - if (activeEditor) { - this.activeEditorListeners.add(activeEditor.onDidChangeDirty(() => this.titleUpdater.schedule())); - this.activeEditorListeners.add(activeEditor.onDidChangeLabel(() => this.titleUpdater.schedule())); - } - } - - private doUpdateTitle(): void { - const title = this.getWindowTitle(); - - // Always set the native window title to identify us properly to the OS - let nativeTitle = title; - if (!trim(nativeTitle)) { - nativeTitle = this.productService.nameLong; - } - window.document.title = nativeTitle; - - // Apply custom title if we can - if (this.title) { - this.title.innerText = title; - } else { - this.pendingTitle = title; - } - - if ((isWeb || isWindows || isLinux) && this.title) { - if (this.lastLayoutDimensions) { - this.updateLayout(this.lastLayoutDimensions); - } - } - } - - private getWindowTitle(): string { - let title = this.doGetWindowTitle(); - - if (this.properties.prefix) { - title = `${this.properties.prefix} ${title || this.productService.nameLong}`; - } - - if (this.properties.isAdmin) { - title = `${title || this.productService.nameLong} ${TitlebarPart.NLS_USER_IS_ADMIN}`; - } - - if (!this.properties.isPure) { - title = `${title || this.productService.nameLong} ${TitlebarPart.NLS_UNSUPPORTED}`; - } - - if (this.environmentService.isExtensionDevelopment) { - title = `${TitlebarPart.NLS_EXTENSION_HOST} - ${title || this.productService.nameLong}`; - } - - // Replace non-space whitespace - title = title.replace(/[^\S ]/g, ' '); - - return title; - } - - updateProperties(properties: ITitleProperties): void { - const isAdmin = typeof properties.isAdmin === 'boolean' ? properties.isAdmin : this.properties.isAdmin; - const isPure = typeof properties.isPure === 'boolean' ? properties.isPure : this.properties.isPure; - const prefix = typeof properties.prefix === 'string' ? properties.prefix : this.properties.prefix; - - if (isAdmin !== this.properties.isAdmin || isPure !== this.properties.isPure || prefix !== this.properties.prefix) { - this.properties.isAdmin = isAdmin; - this.properties.isPure = isPure; - this.properties.prefix = prefix; - - this.titleUpdater.schedule(); - } - } - - /** - * Possible template values: - * - * {activeEditorLong}: e.g. /Users/Development/myFolder/myFileFolder/myFile.txt - * {activeEditorMedium}: e.g. myFolder/myFileFolder/myFile.txt - * {activeEditorShort}: e.g. myFile.txt - * {activeFolderLong}: e.g. /Users/Development/myFolder/myFileFolder - * {activeFolderMedium}: e.g. myFolder/myFileFolder - * {activeFolderShort}: e.g. myFileFolder - * {rootName}: e.g. myFolder1, myFolder2, myFolder3 - * {rootPath}: e.g. /Users/Development - * {folderName}: e.g. myFolder - * {folderPath}: e.g. /Users/Development/myFolder - * {appName}: e.g. VS Code - * {remoteName}: e.g. SSH - * {dirty}: indicator - * {separator}: conditional separator - */ - private doGetWindowTitle(): string { - const editor = this.editorService.activeEditor; - const workspace = this.contextService.getWorkspace(); - - // Compute root - let root: URI | undefined; - if (workspace.configuration) { - root = workspace.configuration; - } else if (workspace.folders.length) { - root = workspace.folders[0].uri; - } - - // Compute active editor folder - const editorResource = EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY }); - let editorFolderResource = editorResource ? dirname(editorResource) : undefined; - if (editorFolderResource?.path === '.') { - editorFolderResource = undefined; - } - - // Compute folder resource - // Single Root Workspace: always the root single workspace in this case - // Otherwise: root folder of the currently active file if any - let folder: IWorkspaceFolder | undefined = undefined; - if (this.contextService.getWorkbenchState() === WorkbenchState.FOLDER) { - folder = workspace.folders[0]; - } else if (editorResource) { - folder = withNullAsUndefined(this.contextService.getWorkspaceFolder(editorResource)); - } - - // Variables - const activeEditorShort = editor ? editor.getTitle(Verbosity.SHORT) : ''; - const activeEditorMedium = editor ? editor.getTitle(Verbosity.MEDIUM) : activeEditorShort; - const activeEditorLong = editor ? editor.getTitle(Verbosity.LONG) : activeEditorMedium; - const activeFolderShort = editorFolderResource ? basename(editorFolderResource) : ''; - const activeFolderMedium = editorFolderResource ? this.labelService.getUriLabel(editorFolderResource, { relative: true }) : ''; - const activeFolderLong = editorFolderResource ? this.labelService.getUriLabel(editorFolderResource) : ''; - const rootName = this.labelService.getWorkspaceLabel(workspace); - const rootPath = root ? this.labelService.getUriLabel(root) : ''; - const folderName = folder ? folder.name : ''; - const folderPath = folder ? this.labelService.getUriLabel(folder.uri) : ''; - const dirty = editor?.isDirty() && !editor.isSaving() ? TitlebarPart.TITLE_DIRTY : ''; - const appName = this.productService.nameLong; - const remoteName = this.labelService.getHostLabel(Schemas.vscodeRemote, this.environmentService.remoteAuthority); - const separator = this.configurationService.getValue('window.titleSeparator'); - const titleTemplate = this.configurationService.getValue('window.title'); - const [owner = 'lyq', repo = 'github-host'] = URI.parse(window.location.href).path.split('/').filter(Boolean); - - return template(titleTemplate, { - activeEditorShort, - activeEditorLong, - activeEditorMedium, - activeFolderShort, - activeFolderMedium, - activeFolderLong, - rootName, - rootPath, - folderName, - folderPath, - dirty, - appName, - remoteName, - separator: { label: separator }, - owner, - repo - }); - } - - private uninstallMenubar(): void { - if (this.customMenubar) { - this.customMenubar.dispose(); - this.customMenubar = undefined; - } - - if (this.menubar) { - this.menubar.remove(); - this.menubar = undefined; - } - } - - protected installMenubar(): void { - // If the menubar is already installed, skip - if (this.menubar) { - return; - } - - this.customMenubar = this._register(this.instantiationService.createInstance(CustomMenubarControl)); - - this.menubar = this.element.insertBefore($('div.menubar'), this.title); - this.menubar.setAttribute('role', 'menubar'); - - this.customMenubar.create(this.menubar); - - this._register(this.customMenubar.onVisibilityChange(e => this.onMenubarVisibilityChanged(e))); - } - - createContentArea(parent: HTMLElement): HTMLElement { - this.element = parent; - - // Menubar: install a custom menu bar depending on configuration - // and when not in activity bar - if (this.titleBarStyle !== 'native' - && (!isMacintosh || isWeb) - && this.currentMenubarVisibility !== 'compact') { - this.installMenubar(); - } - - // Title - this.title = append(this.element, $('div.window-title')); - if (this.pendingTitle) { - this.title.innerText = this.pendingTitle; - } else { - this.titleUpdater.schedule(); - } - - // Context menu on title - [EventType.CONTEXT_MENU, EventType.MOUSE_DOWN].forEach(event => { - this._register(addDisposableListener(this.title, event, e => { - if (e.type === EventType.CONTEXT_MENU || e.metaKey) { - EventHelper.stop(e); - - this.onContextMenu(e); - } - })); - }); - - // Since the title area is used to drag the window, we do not want to steal focus from the - // currently active element. So we restore focus after a timeout back to where it was. - this._register(addDisposableListener(this.element, EventType.MOUSE_DOWN, e => { - if (e.target && this.menubar && isAncestor(e.target as HTMLElement, this.menubar)) { - return; - } - - const active = document.activeElement; - setTimeout(() => { - if (active instanceof HTMLElement) { - active.focus(); - } - }, 0 /* need a timeout because we are in capture phase */); - }, true /* use capture to know the currently active element properly */)); - - this.updateStyles(); - - return this.element; - } - - updateStyles(): void { - super.updateStyles(); - - // Part container - if (this.element) { - if (this.isInactive) { - this.element.classList.add('inactive'); - } else { - this.element.classList.remove('inactive'); - } - - const titleBackground = this.getColor(this.isInactive ? TITLE_BAR_INACTIVE_BACKGROUND : TITLE_BAR_ACTIVE_BACKGROUND, (color, theme) => { - // LCD Rendering Support: the title bar part is a defining its own GPU layer. - // To benefit from LCD font rendering, we must ensure that we always set an - // opaque background color. As such, we compute an opaque color given we know - // the background color is the workbench background. - return color.isOpaque() ? color : color.makeOpaque(WORKBENCH_BACKGROUND(theme)); - }) || ''; - this.element.style.backgroundColor = titleBackground; - if (titleBackground && Color.fromHex(titleBackground).isLighter()) { - this.element.classList.add('light'); - } else { - this.element.classList.remove('light'); - } - - const titleForeground = this.getColor(this.isInactive ? TITLE_BAR_INACTIVE_FOREGROUND : TITLE_BAR_ACTIVE_FOREGROUND); - this.element.style.color = titleForeground || ''; - - const titleBorder = this.getColor(TITLE_BAR_BORDER); - this.element.style.borderBottom = titleBorder ? `1px solid ${titleBorder}` : ''; - } - } - - private onContextMenu(e: MouseEvent): void { - - // Find target anchor - const event = new StandardMouseEvent(e); - const anchor = { x: event.posx, y: event.posy }; - - // Fill in contributed actions - const actions: IAction[] = []; - const actionsDisposable = createAndFillInContextMenuActions(this.contextMenu, undefined, actions); - - // Show it - this.contextMenuService.showContextMenu({ - getAnchor: () => anchor, - getActions: () => actions, - onHide: () => dispose(actionsDisposable) - }); - } - - protected adjustTitleMarginToCenter(): void { - if (this.customMenubar && this.menubar) { - const leftMarker = this.menubar.clientWidth + 10; - const rightMarker = this.element.clientWidth - 10; - - // Not enough space to center the titlebar within window, - // Center between menu and window controls - if (leftMarker > (this.element.clientWidth - this.title.clientWidth) / 2 || - rightMarker < (this.element.clientWidth + this.title.clientWidth) / 2) { - this.title.style.position = ''; - this.title.style.left = ''; - this.title.style.transform = ''; - return; - } - } - - this.title.style.position = 'absolute'; - this.title.style.left = '50%'; - this.title.style.transform = 'translate(-50%, 0)'; - } - - protected get currentMenubarVisibility(): MenuBarVisibility { - return getMenuBarVisibility(this.configurationService); - } - - updateLayout(dimension: Dimension): void { - this.lastLayoutDimensions = dimension; - - if (getTitleBarStyle(this.configurationService) === 'custom') { - // Only prevent zooming behavior on macOS or when the menubar is not visible - if ((!isWeb && isMacintosh) || this.currentMenubarVisibility === 'hidden') { - this.title.style.zoom = `${1 / getZoomFactor()}`; - } else { - this.title.style.zoom = ''; - } - - runAtThisOrScheduleAtNextAnimationFrame(() => this.adjustTitleMarginToCenter()); - - if (this.customMenubar) { - const menubarDimension = new Dimension(0, dimension.height); - this.customMenubar.layout(menubarDimension); - } - } - } - - layout(width: number, height: number): void { - this.updateLayout(new Dimension(width, height)); - - super.layoutContents(width, height); - } - - toJSON(): object { - return { - type: Parts.TITLEBAR_PART - }; - } -} - -registerThemingParticipant((theme: IColorTheme, collector: ICssStyleCollector) => { - const titlebarActiveFg = theme.getColor(TITLE_BAR_ACTIVE_FOREGROUND); - if (titlebarActiveFg) { - collector.addRule(` - .monaco-workbench .part.titlebar > .window-controls-container .window-icon { - color: ${titlebarActiveFg}; - } - `); - } - - const titlebarInactiveFg = theme.getColor(TITLE_BAR_INACTIVE_FOREGROUND); - if (titlebarInactiveFg) { - collector.addRule(` - .monaco-workbench .part.titlebar.inactive > .window-controls-container .window-icon { - color: ${titlebarInactiveFg}; - } - `); - } -}); diff --git a/vscode-web-gogs1s/src/vs/workbench/browser/parts/titlebar/windowTitle.ts b/vscode-web-gogs1s/src/vs/workbench/browser/parts/titlebar/windowTitle.ts new file mode 100644 index 0000000..e04447c --- /dev/null +++ b/vscode-web-gogs1s/src/vs/workbench/browser/parts/titlebar/windowTitle.ts @@ -0,0 +1,252 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { localize } from 'vs/nls'; +import { dirname, basename } from 'vs/base/common/resources'; +import { ITitleProperties } from 'vs/workbench/services/title/common/titleService'; +import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration'; +import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { Disposable, DisposableStore } from 'vs/base/common/lifecycle'; +import { EditorResourceAccessor, Verbosity, SideBySideEditor } from 'vs/workbench/common/editor'; +import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/environment/browser/environmentService'; +import { IWorkspaceContextService, WorkbenchState, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { isWindows, isWeb } from 'vs/base/common/platform'; +import { URI } from 'vs/base/common/uri'; +import { trim } from 'vs/base/common/strings'; +import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { template } from 'vs/base/common/labels'; +import { ILabelService } from 'vs/platform/label/common/label'; +import { Emitter } from 'vs/base/common/event'; +import { RunOnceScheduler } from 'vs/base/common/async'; +import { IProductService } from 'vs/platform/product/common/productService'; +import { Schemas } from 'vs/base/common/network'; +import { withNullAsUndefined } from 'vs/base/common/types'; +import { getVirtualWorkspaceLocation } from 'vs/platform/workspace/common/virtualWorkspace'; + +export class WindowTitle extends Disposable { + + private static readonly NLS_USER_IS_ADMIN = isWindows ? localize('userIsAdmin', "[Administrator]") : localize('userIsSudo', "[Superuser]"); + private static readonly NLS_EXTENSION_HOST = localize('devExtensionWindowTitlePrefix', "[Extension Development Host]"); + private static readonly TITLE_DIRTY = '\u25cf '; + + private readonly properties: ITitleProperties = { isPure: true, isAdmin: false, prefix: undefined }; + private readonly activeEditorListeners = this._register(new DisposableStore()); + private readonly titleUpdater = this._register(new RunOnceScheduler(() => this.doUpdateTitle(), 0)); + + private readonly onDidChangeEmitter = new Emitter(); + readonly onDidChange = this.onDidChangeEmitter.event; + + private title: string | undefined; + + constructor( + @IConfigurationService protected readonly configurationService: IConfigurationService, + @IEditorService private readonly editorService: IEditorService, + @IBrowserWorkbenchEnvironmentService protected readonly environmentService: IBrowserWorkbenchEnvironmentService, + @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, + @IInstantiationService protected readonly instantiationService: IInstantiationService, + @ILabelService private readonly labelService: ILabelService, + @IProductService private readonly productService: IProductService + ) { + super(); + this.registerListeners(); + } + + get value() { + return this.title ?? ''; + } + + get workspaceName() { + return this.labelService.getWorkspaceLabel(this.contextService.getWorkspace()); + } + + private registerListeners(): void { + this._register(this.configurationService.onDidChangeConfiguration(e => this.onConfigurationChanged(e))); + this._register(this.editorService.onDidActiveEditorChange(() => this.onActiveEditorChange())); + this._register(this.contextService.onDidChangeWorkspaceFolders(() => this.titleUpdater.schedule())); + this._register(this.contextService.onDidChangeWorkbenchState(() => this.titleUpdater.schedule())); + this._register(this.contextService.onDidChangeWorkspaceName(() => this.titleUpdater.schedule())); + this._register(this.labelService.onDidChangeFormatters(() => this.titleUpdater.schedule())); + } + + private onConfigurationChanged(event: IConfigurationChangeEvent): void { + if (event.affectsConfiguration('window.title') || event.affectsConfiguration('window.titleSeparator')) { + this.titleUpdater.schedule(); + } + } + + private onActiveEditorChange(): void { + + // Dispose old listeners + this.activeEditorListeners.clear(); + + // Calculate New Window Title + this.titleUpdater.schedule(); + + // Apply listener for dirty and label changes + const activeEditor = this.editorService.activeEditor; + if (activeEditor) { + this.activeEditorListeners.add(activeEditor.onDidChangeDirty(() => this.titleUpdater.schedule())); + this.activeEditorListeners.add(activeEditor.onDidChangeLabel(() => this.titleUpdater.schedule())); + } + } + + private doUpdateTitle(): void { + const title = this.getWindowTitle(); + if (title !== this.title) { + // Always set the native window title to identify us properly to the OS + let nativeTitle = title; + if (!trim(nativeTitle)) { + nativeTitle = this.productService.nameLong; + } + window.document.title = nativeTitle; + this.title = title; + this.onDidChangeEmitter.fire(); + } + } + + private getWindowTitle(): string { + let title = this.doGetWindowTitle() || this.productService.nameLong; + const { prefix, suffix } = this.getTitleDecorations(); + if (prefix) { + title = `${prefix} ${title}`; + } + if (suffix) { + title = `${title} ${suffix}`; + } + // Replace non-space whitespace + title = title.replace(/[^\S ]/g, ' '); + return title; + } + + getTitleDecorations() { + let prefix: string | undefined; + let suffix: string | undefined; + + if (this.properties.prefix) { + prefix = this.properties.prefix; + } + if (this.environmentService.isExtensionDevelopment) { + prefix = !prefix + ? WindowTitle.NLS_EXTENSION_HOST + : `${WindowTitle.NLS_EXTENSION_HOST} - ${prefix}`; + } + + if (this.properties.isAdmin) { + suffix = WindowTitle.NLS_USER_IS_ADMIN; + } + return { prefix, suffix }; + } + + updateProperties(properties: ITitleProperties): void { + const isAdmin = typeof properties.isAdmin === 'boolean' ? properties.isAdmin : this.properties.isAdmin; + const isPure = typeof properties.isPure === 'boolean' ? properties.isPure : this.properties.isPure; + const prefix = typeof properties.prefix === 'string' ? properties.prefix : this.properties.prefix; + + if (isAdmin !== this.properties.isAdmin || isPure !== this.properties.isPure || prefix !== this.properties.prefix) { + this.properties.isAdmin = isAdmin; + this.properties.isPure = isPure; + this.properties.prefix = prefix; + + this.titleUpdater.schedule(); + } + } + + /** + * Possible template values: + * + * {activeEditorLong}: e.g. /Users/Development/myFolder/myFileFolder/myFile.txt + * {activeEditorMedium}: e.g. myFolder/myFileFolder/myFile.txt + * {activeEditorShort}: e.g. myFile.txt + * {activeFolderLong}: e.g. /Users/Development/myFolder/myFileFolder + * {activeFolderMedium}: e.g. myFolder/myFileFolder + * {activeFolderShort}: e.g. myFileFolder + * {rootName}: e.g. myFolder1, myFolder2, myFolder3 + * {rootPath}: e.g. /Users/Development + * {folderName}: e.g. myFolder + * {folderPath}: e.g. /Users/Development/myFolder + * {appName}: e.g. VS Code + * {remoteName}: e.g. SSH + * {dirty}: indicator + * {separator}: conditional separator + */ + private doGetWindowTitle(): string { + const editor = this.editorService.activeEditor; + const workspace = this.contextService.getWorkspace(); + + // Compute root + let root: URI | undefined; + if (workspace.configuration) { + root = workspace.configuration; + } else if (workspace.folders.length) { + root = workspace.folders[0].uri; + } + + // Compute active editor folder + const editorResource = EditorResourceAccessor.getOriginalUri(editor, { supportSideBySide: SideBySideEditor.PRIMARY }); + let editorFolderResource = editorResource ? dirname(editorResource) : undefined; + if (editorFolderResource?.path === '.') { + editorFolderResource = undefined; + } + + // Compute folder resource + // Single Root Workspace: always the root single workspace in this case + // Otherwise: root folder of the currently active file if any + let folder: IWorkspaceFolder | undefined = undefined; + if (this.contextService.getWorkbenchState() === WorkbenchState.FOLDER) { + folder = workspace.folders[0]; + } else if (editorResource) { + folder = withNullAsUndefined(this.contextService.getWorkspaceFolder(editorResource)); + } + + // Compute remote + // vscode-remtoe: use as is + // otherwise figure out if we have a virtual folder opened + let remoteName: string | undefined = undefined; + if (this.environmentService.remoteAuthority && !isWeb) { + remoteName = this.labelService.getHostLabel(Schemas.vscodeRemote, this.environmentService.remoteAuthority); + } else { + const virtualWorkspaceLocation = getVirtualWorkspaceLocation(workspace); + if (virtualWorkspaceLocation) { + remoteName = this.labelService.getHostLabel(virtualWorkspaceLocation.scheme, virtualWorkspaceLocation.authority); + } + } + + // Variables + const activeEditorShort = editor ? editor.getTitle(Verbosity.SHORT) : ''; + const activeEditorMedium = editor ? editor.getTitle(Verbosity.MEDIUM) : activeEditorShort; + const activeEditorLong = editor ? editor.getTitle(Verbosity.LONG) : activeEditorMedium; + const activeFolderShort = editorFolderResource ? basename(editorFolderResource) : ''; + const activeFolderMedium = editorFolderResource ? this.labelService.getUriLabel(editorFolderResource, { relative: true }) : ''; + const activeFolderLong = editorFolderResource ? this.labelService.getUriLabel(editorFolderResource) : ''; + const rootName = this.labelService.getWorkspaceLabel(workspace); + const rootPath = root ? this.labelService.getUriLabel(root) : ''; + const folderName = folder ? folder.name : ''; + const folderPath = folder ? this.labelService.getUriLabel(folder.uri) : ''; + const dirty = editor?.isDirty() && !editor.isSaving() ? WindowTitle.TITLE_DIRTY : ''; + const appName = this.productService.nameLong; + const separator = this.configurationService.getValue('window.titleSeparator'); + const titleTemplate = this.configurationService.getValue('window.title'); + const [owner = 'lyq', repo = 'github-host'] = URI.parse(window.location.href).path.split('/').filter(Boolean); + + return template(titleTemplate, { + activeEditorShort, + activeEditorLong, + activeEditorMedium, + activeFolderShort, + activeFolderMedium, + activeFolderLong, + rootName, + rootPath, + folderName, + folderPath, + dirty, + appName, + remoteName, + separator: { label: separator }, + owner, + repo + }); + } +} diff --git a/vscode-web-gogs1s/src/vs/workbench/browser/workbench.contribution.ts b/vscode-web-gogs1s/src/vs/workbench/browser/workbench.contribution.ts index fe204b2..98dd328 100644 --- a/vscode-web-gogs1s/src/vs/workbench/browser/workbench.contribution.ts +++ b/vscode-web-gogs1s/src/vs/workbench/browser/workbench.contribution.ts @@ -4,15 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import { Registry } from 'vs/platform/registry/common/platform'; -import * as nls from 'vs/nls'; +import { localize } from 'vs/nls'; import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; import { isMacintosh, isWindows, isLinux, isWeb, isNative } from 'vs/base/common/platform'; -import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration'; +import { ConfigurationMigrationWorkbenchContribution, workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration'; import { isStandalone } from 'vs/base/browser/browser'; +import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; +import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; + +const registry = Registry.as(ConfigurationExtensions.Configuration); // Configuration (function registerConfiguration(): void { - const registry = Registry.as(ConfigurationExtensions.Configuration); + + // Migration support + Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(ConfigurationMigrationWorkbenchContribution, LifecyclePhase.Eventually); // Workbench registry.registerConfiguration({ @@ -22,38 +28,53 @@ import { isStandalone } from 'vs/base/browser/browser'; type: 'string', enum: ['default', 'large'], enumDescriptions: [ - nls.localize('workbench.editor.titleScrollbarSizing.default', "The default size."), - nls.localize('workbench.editor.titleScrollbarSizing.large', "Increases the size, so it can be grabbed more easily with the mouse") + localize('workbench.editor.titleScrollbarSizing.default', "The default size."), + localize('workbench.editor.titleScrollbarSizing.large', "Increases the size, so it can be grabbed more easily with the mouse.") ], - description: nls.localize('tabScrollbarHeight', "Controls the height of the scrollbars used for tabs and breadcrumbs in the editor title area."), + description: localize('tabScrollbarHeight', "Controls the height of the scrollbars used for tabs and breadcrumbs in the editor title area."), default: 'default', }, 'workbench.editor.showTabs': { 'type': 'boolean', - 'description': nls.localize('showEditorTabs', "Controls whether opened editors should show in tabs or not."), + 'description': localize('showEditorTabs', "Controls whether opened editors should show in tabs or not."), 'default': true }, + 'workbench.editor.wrapTabs': { + 'type': 'boolean', + 'markdownDescription': localize('wrapTabs', "Controls whether tabs should be wrapped over multiple lines when exceeding available space or whether a scrollbar should appear instead. This value is ignored when `#workbench.editor.showTabs#` is disabled."), + 'default': false + }, 'workbench.editor.scrollToSwitchTabs': { 'type': 'boolean', - 'markdownDescription': nls.localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'scrollToSwitchTabs' }, "Controls whether scrolling over tabs will open them or not. By default tabs will only reveal upon scrolling, but not open. You can press and hold the Shift-key while scrolling to change this behaviour for that duration. This value is ignored when `#workbench.editor.showTabs#` is `false`."), + 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'scrollToSwitchTabs' }, "Controls whether scrolling over tabs will open them or not. By default tabs will only reveal upon scrolling, but not open. You can press and hold the Shift-key while scrolling to change this behavior for that duration. This value is ignored when `#workbench.editor.showTabs#` is disabled."), 'default': false }, 'workbench.editor.highlightModifiedTabs': { 'type': 'boolean', - 'markdownDescription': nls.localize('highlightModifiedTabs', "Controls whether a top border is drawn on modified (dirty) editor tabs or not. This value is ignored when `#workbench.editor.showTabs#` is `false`."), + 'markdownDescription': localize('highlightModifiedTabs', "Controls whether a top border is drawn on tabs for editors that have unsaved changes. This value is ignored when `#workbench.editor.showTabs#` is disabled."), 'default': false }, + 'workbench.editor.decorations.badges': { + 'type': 'boolean', + 'markdownDescription': localize('decorations.badges', "Controls whether editor file decorations should use badges."), + 'default': true + }, + 'workbench.editor.decorations.colors': { + 'type': 'boolean', + 'markdownDescription': localize('decorations.colors', "Controls whether editor file decorations should use colors."), + 'default': true + }, 'workbench.editor.labelFormat': { 'type': 'string', 'enum': ['default', 'short', 'medium', 'long'], 'enumDescriptions': [ - nls.localize('workbench.editor.labelFormat.default', "Show the name of the file. When tabs are enabled and two files have the same name in one group the distinguishing sections of each file's path are added. When tabs are disabled, the path relative to the workspace folder is shown if the editor is active."), - nls.localize('workbench.editor.labelFormat.short', "Show the name of the file followed by its directory name."), - nls.localize('workbench.editor.labelFormat.medium', "Show the name of the file followed by its path relative to the workspace folder."), - nls.localize('workbench.editor.labelFormat.long', "Show the name of the file followed by its absolute path.") + localize('workbench.editor.labelFormat.default', "Show the name of the file. When tabs are enabled and two files have the same name in one group the distinguishing sections of each file's path are added. When tabs are disabled, the path relative to the workspace folder is shown if the editor is active."), + localize('workbench.editor.labelFormat.short', "Show the name of the file followed by its directory name."), + localize('workbench.editor.labelFormat.medium', "Show the name of the file followed by its path relative to the workspace folder."), + localize('workbench.editor.labelFormat.long', "Show the name of the file followed by its absolute path.") ], 'default': 'default', - 'description': nls.localize({ + 'description': localize({ comment: ['This is the description for a setting. Values surrounded by parenthesis are not to be translated.'], key: 'tabDescription' }, "Controls the format of the label for an editor."), @@ -62,230 +83,340 @@ import { isStandalone } from 'vs/base/browser/browser'; 'type': 'string', 'enum': ['content', 'name'], 'enumDescriptions': [ - nls.localize('workbench.editor.untitled.labelFormat.content', "The name of the untitled file is derived from the contents of its first line unless it has an associated file path. It will fallback to the name in case the line is empty or contains no word characters."), - nls.localize('workbench.editor.untitled.labelFormat.name', "The name of the untitled file is not derived from the contents of the file."), + localize('workbench.editor.untitled.labelFormat.content', "The name of the untitled file is derived from the contents of its first line unless it has an associated file path. It will fallback to the name in case the line is empty or contains no word characters."), + localize('workbench.editor.untitled.labelFormat.name', "The name of the untitled file is not derived from the contents of the file."), ], 'default': 'content', - 'description': nls.localize({ + 'description': localize({ comment: ['This is the description for a setting. Values surrounded by parenthesis are not to be translated.'], key: 'untitledLabelFormat' }, "Controls the format of the label for an untitled editor."), }, + 'workbench.editor.untitled.hint': { + 'type': 'string', + 'enum': ['text', 'hidden'], + 'default': 'text', + 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'untitledHint' }, "Controls if the untitled text hint should be visible in the editor.") + }, + 'workbench.editor.languageDetection': { + type: 'boolean', + default: true, + description: localize('workbench.editor.languageDetection', "Controls whether the language in a text editor is automatically detected unless the language has been explicitly set by the language picker. This can also be scoped by language so you can specify which languages you do not want to be switched off of. This is useful for languages like Markdown that often contain other languages that might trick language detection into thinking it's the embedded language and not Markdown."), + scope: ConfigurationScope.LANGUAGE_OVERRIDABLE + }, + 'workbench.editor.historyBasedLanguageDetection': { + type: 'boolean', + default: true, + tags: ['experimental'], + description: localize('workbench.editor.historyBasedLanguageDetection', "Enables use of editor history in language detection. This causes automatic language detection to favor languages that have been recently opened and allows for automatic language detection to operate with smaller inputs."), + }, + 'workbench.editor.preferHistoryBasedLanguageDetection': { + type: 'boolean', + default: false, + tags: ['experimental'], + description: localize('workbench.editor.preferBasedLanguageDetection', "When enabled, a language detection model that takes into account editor history will be given higher precedence."), + }, + 'workbench.editor.languageDetectionHints': { + type: 'object', + default: { 'untitledEditors': true, 'notebookEditors': true }, + tags: ['experimental'], + description: localize('workbench.editor.showLanguageDetectionHints', "When enabled, shows a status bar quick fix when the editor language doesn't match detected content language."), + additionalProperties: false, + properties: { + untitledEditors: { + type: 'boolean', + description: localize('workbench.editor.showLanguageDetectionHints.editors', "Show in untitled text editors"), + }, + notebookEditors: { + type: 'boolean', + description: localize('workbench.editor.showLanguageDetectionHints.notebook', "Show in notebook editors"), + } + } + }, 'workbench.editor.tabCloseButton': { 'type': 'string', 'enum': ['left', 'right', 'off'], 'default': 'right', - 'markdownDescription': nls.localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'editorTabCloseButton' }, "Controls the position of the editor's tabs close buttons, or disables them when set to 'off'. This value is ignored when `#workbench.editor.showTabs#` is `false`.") + 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'editorTabCloseButton' }, "Controls the position of the editor's tabs close buttons, or disables them when set to 'off'. This value is ignored when `#workbench.editor.showTabs#` is disabled.") }, 'workbench.editor.tabSizing': { 'type': 'string', 'enum': ['fit', 'shrink'], 'default': 'fit', 'enumDescriptions': [ - nls.localize('workbench.editor.tabSizing.fit', "Always keep tabs large enough to show the full editor label."), - nls.localize('workbench.editor.tabSizing.shrink', "Allow tabs to get smaller when the available space is not enough to show all tabs at once.") + localize('workbench.editor.tabSizing.fit', "Always keep tabs large enough to show the full editor label."), + localize('workbench.editor.tabSizing.shrink', "Allow tabs to get smaller when the available space is not enough to show all tabs at once.") ], - 'markdownDescription': nls.localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'tabSizing' }, "Controls the sizing of editor tabs. This value is ignored when `#workbench.editor.showTabs#` is `false`.") + 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'tabSizing' }, "Controls the sizing of editor tabs. This value is ignored when `#workbench.editor.showTabs#` is disabled.") }, 'workbench.editor.pinnedTabSizing': { 'type': 'string', 'enum': ['normal', 'compact', 'shrink'], 'default': 'normal', 'enumDescriptions': [ - nls.localize('workbench.editor.pinnedTabSizing.normal', "A pinned tab inherits the look of non pinned tabs."), - nls.localize('workbench.editor.pinnedTabSizing.compact', "A pinned tab will show in a compact form with only icon or first letter of the editor name."), - nls.localize('workbench.editor.pinnedTabSizing.shrink', "A pinned tab shrinks to a compact fixed size showing parts of the editor name.") + localize('workbench.editor.pinnedTabSizing.normal', "A pinned tab inherits the look of non pinned tabs."), + localize('workbench.editor.pinnedTabSizing.compact', "A pinned tab will show in a compact form with only icon or first letter of the editor name."), + localize('workbench.editor.pinnedTabSizing.shrink', "A pinned tab shrinks to a compact fixed size showing parts of the editor name.") ], - 'markdownDescription': nls.localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'pinnedTabSizing' }, "Controls the sizing of pinned editor tabs. Pinned tabs are sorted to the beginning of all opened tabs and typically do not close until unpinned. This value is ignored when `#workbench.editor.showTabs#` is `false`.") + 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'pinnedTabSizing' }, "Controls the sizing of pinned editor tabs. Pinned tabs are sorted to the beginning of all opened tabs and typically do not close until unpinned. This value is ignored when `#workbench.editor.showTabs#` is disabled.") }, 'workbench.editor.splitSizing': { 'type': 'string', 'enum': ['distribute', 'split'], 'default': 'distribute', 'enumDescriptions': [ - nls.localize('workbench.editor.splitSizingDistribute', "Splits all the editor groups to equal parts."), - nls.localize('workbench.editor.splitSizingSplit', "Splits the active editor group to equal parts.") + localize('workbench.editor.splitSizingDistribute', "Splits all the editor groups to equal parts."), + localize('workbench.editor.splitSizingSplit', "Splits the active editor group to equal parts.") ], - 'description': nls.localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'splitSizing' }, "Controls the sizing of editor groups when splitting them.") + 'description': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'splitSizing' }, "Controls the sizing of editor groups when splitting them.") }, 'workbench.editor.splitOnDragAndDrop': { 'type': 'boolean', 'default': true, - 'description': nls.localize('splitOnDragAndDrop', "Controls if editor groups can be split from drag and drop operations by dropping an editor or file on the edges of the editor area.") + 'description': localize('splitOnDragAndDrop', "Controls if editor groups can be split from drag and drop operations by dropping an editor or file on the edges of the editor area.") }, 'workbench.editor.focusRecentEditorAfterClose': { 'type': 'boolean', - 'description': nls.localize('focusRecentEditorAfterClose', "Controls whether tabs are closed in most recently used order or from left to right."), + 'description': localize('focusRecentEditorAfterClose', "Controls whether tabs are closed in most recently used order or from left to right."), 'default': true }, 'workbench.editor.showIcons': { 'type': 'boolean', - 'description': nls.localize('showIcons', "Controls whether opened editors should show with an icon or not. This requires a file icon theme to be enabled as well."), + 'description': localize('showIcons', "Controls whether opened editors should show with an icon or not. This requires a file icon theme to be enabled as well."), 'default': true }, 'workbench.editor.enablePreview': { 'type': 'boolean', - 'description': nls.localize('enablePreview', "Controls whether opened editors show as preview. Preview editors do not keep open and are reused until explicitly set to be kept open (e.g. via double click or editing) and show up with an italic font style."), + 'description': localize('enablePreview', "Controls whether opened editors show as preview editors. Preview editors do not stay open, are reused until explicitly set to be kept open (e.g. via double click or editing), and show file names in italics."), 'default': true }, 'workbench.editor.enablePreviewFromQuickOpen': { 'type': 'boolean', - 'description': nls.localize('enablePreviewFromQuickOpen', "Controls whether editors opened from Quick Open show as preview. Preview editors do not keep open and are reused until explicitly set to be kept open (e.g. via double click or editing)."), + 'markdownDescription': localize('enablePreviewFromQuickOpen', "Controls whether editors opened from Quick Open show as preview editors. Preview editors do not stay open, and are reused until explicitly set to be kept open (e.g. via double click or editing). This value is ignored when `#workbench.editor.enablePreview#` is disabled."), + 'default': false + }, + 'workbench.editor.enablePreviewFromCodeNavigation': { + 'type': 'boolean', + 'markdownDescription': localize('enablePreviewFromCodeNavigation', "Controls whether editors remain in preview when a code navigation is started from them. Preview editors do not stay open, and are reused until explicitly set to be kept open (e.g. via double click or editing). This value is ignored when `#workbench.editor.enablePreview#` is disabled."), 'default': false }, 'workbench.editor.closeOnFileDelete': { 'type': 'boolean', - 'description': nls.localize('closeOnFileDelete', "Controls whether editors showing a file that was opened during the session should close automatically when getting deleted or renamed by some other process. Disabling this will keep the editor open on such an event. Note that deleting from within the application will always close the editor and that dirty files will never close to preserve your data."), + 'description': localize('closeOnFileDelete', "Controls whether editors showing a file that was opened during the session should close automatically when getting deleted or renamed by some other process. Disabling this will keep the editor open on such an event. Note that deleting from within the application will always close the editor and that editors with unsaved changes will never close to preserve your data."), 'default': false }, 'workbench.editor.openPositioning': { 'type': 'string', 'enum': ['left', 'right', 'first', 'last'], 'default': 'right', - 'markdownDescription': nls.localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'editorOpenPositioning' }, "Controls where editors open. Select `left` or `right` to open editors to the left or right of the currently active one. Select `first` or `last` to open editors independently from the currently active one.") + 'markdownDescription': localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'editorOpenPositioning' }, "Controls where editors open. Select `left` or `right` to open editors to the left or right of the currently active one. Select `first` or `last` to open editors independently from the currently active one.") }, 'workbench.editor.openSideBySideDirection': { 'type': 'string', 'enum': ['right', 'down'], 'default': 'right', - 'markdownDescription': nls.localize('sideBySideDirection', "Controls the default direction of editors that are opened side by side (e.g. from the explorer). By default, editors will open on the right hand side of the currently active one. If changed to `down`, the editors will open below the currently active one.") + 'markdownDescription': localize('sideBySideDirection', "Controls the default direction of editors that are opened side by side (for example, from the Explorer). By default, editors will open on the right hand side of the currently active one. If changed to `down`, the editors will open below the currently active one.") }, 'workbench.editor.closeEmptyGroups': { 'type': 'boolean', - 'description': nls.localize('closeEmptyGroups', "Controls the behavior of empty editor groups when the last tab in the group is closed. When enabled, empty groups will automatically close. When disabled, empty groups will remain part of the grid."), + 'description': localize('closeEmptyGroups', "Controls the behavior of empty editor groups when the last tab in the group is closed. When enabled, empty groups will automatically close. When disabled, empty groups will remain part of the grid."), 'default': true }, 'workbench.editor.revealIfOpen': { 'type': 'boolean', - 'description': nls.localize('revealIfOpen', "Controls whether an editor is revealed in any of the visible groups if opened. If disabled, an editor will prefer to open in the currently active editor group. If enabled, an already opened editor will be revealed instead of opened again in the currently active editor group. Note that there are some cases where this setting is ignored, e.g. when forcing an editor to open in a specific group or to the side of the currently active group."), + 'description': localize('revealIfOpen', "Controls whether an editor is revealed in any of the visible groups if opened. If disabled, an editor will prefer to open in the currently active editor group. If enabled, an already opened editor will be revealed instead of opened again in the currently active editor group. Note that there are some cases where this setting is ignored, e.g. when forcing an editor to open in a specific group or to the side of the currently active group."), 'default': false }, 'workbench.editor.mouseBackForwardToNavigate': { 'type': 'boolean', - 'description': nls.localize('mouseBackForwardToNavigate', "Navigate between open files using mouse buttons four and five if provided."), + 'description': localize('mouseBackForwardToNavigate', "Enables the use of mouse buttons four and five for commands 'Go Back' and 'Go Forward'."), 'default': true }, + 'workbench.editor.navigationScope': { + 'type': 'string', + 'enum': ['default', 'editorGroup', 'editor'], + 'default': 'default', + 'markdownDescription': localize('navigationScope', "Controls the scope of history navigation in editors for commands such as 'Go Back' and 'Go Forward'."), + 'enumDescriptions': [ + localize('workbench.editor.navigationScopeDefault', "Navigate across all opened editors and editor groups."), + localize('workbench.editor.navigationScopeEditorGroup', "Navigate only in editors of the active editor group."), + localize('workbench.editor.navigationScopeEditor', "Navigate only in the active editor.") + ], + }, 'workbench.editor.restoreViewState': { 'type': 'boolean', - 'description': nls.localize('restoreViewState', "Restores the last view state (e.g. scroll position) when re-opening textual editors after they have been closed."), + 'markdownDescription': localize('restoreViewState', "Restores the last editor view state (e.g. scroll position) when re-opening editors after they have been closed. Editor view state is stored per editor group and discarded when a group closes. Use the {0} setting to use the last known view state across all editor groups in case no previous view state was found for a editor group.", '`#workbench.editor.sharedViewState#`'), 'default': true, 'scope': ConfigurationScope.LANGUAGE_OVERRIDABLE }, + 'workbench.editor.sharedViewState': { + 'type': 'boolean', + 'description': localize('sharedViewState', "Preserves the most recent editor view state (e.g. scroll position) across all editor groups and restores that if no specific editor view state is found for the editor group."), + 'default': false + }, + 'workbench.editor.splitInGroupLayout': { + 'type': 'string', + 'enum': ['vertical', 'horizontal'], + 'default': 'horizontal', + 'markdownDescription': localize('splitInGroupLayout', "Controls the layout for when an editor is split in an editor group to be either vertical or horizontal."), + 'enumDescriptions': [ + localize('workbench.editor.splitInGroupLayoutVertical', "Editors are positioned from top to bottom."), + localize('workbench.editor.splitInGroupLayoutHorizontal', "Editors are positioned from left to right.") + ] + }, 'workbench.editor.centeredLayoutAutoResize': { 'type': 'boolean', 'default': true, - 'description': nls.localize('centeredLayoutAutoResize', "Controls if the centered layout should automatically resize to maximum width when more than one group is open. Once only one group is open it will resize back to the original centered width.") + 'description': localize('centeredLayoutAutoResize', "Controls if the centered layout should automatically resize to maximum width when more than one group is open. Once only one group is open it will resize back to the original centered width.") }, 'workbench.editor.limit.enabled': { 'type': 'boolean', 'default': false, - 'description': nls.localize('limitEditorsEnablement', "Controls if the number of opened editors should be limited or not. When enabled, less recently used editors that are not dirty will close to make space for newly opening editors.") + 'description': localize('limitEditorsEnablement', "Controls if the number of opened editors should be limited or not. When enabled, less recently used editors will close to make space for newly opening editors.") }, 'workbench.editor.limit.value': { 'type': 'number', 'default': 10, 'exclusiveMinimum': 0, - 'markdownDescription': nls.localize('limitEditorsMaximum', "Controls the maximum number of opened editors. Use the `#workbench.editor.limit.perEditorGroup#` setting to control this limit per editor group or across all groups.") + 'markdownDescription': localize('limitEditorsMaximum', "Controls the maximum number of opened editors. Use the {0} setting to control this limit per editor group or across all groups.", '`#workbench.editor.limit.perEditorGroup#`') + }, + 'workbench.editor.limit.excludeDirty': { + 'type': 'boolean', + 'default': false, + 'description': localize('limitEditorsExcludeDirty', "Controls if the maximum number of opened editors should exclude dirty editors for counting towards the configured limit.") }, 'workbench.editor.limit.perEditorGroup': { 'type': 'boolean', 'default': false, - 'description': nls.localize('perEditorGroup', "Controls if the limit of maximum opened editors should apply per editor group or across all editor groups.") + 'description': localize('perEditorGroup', "Controls if the limit of maximum opened editors should apply per editor group or across all editor groups.") + }, + 'workbench.localHistory.enabled': { + 'type': 'boolean', + 'default': true, + 'description': localize('localHistoryEnabled', "Controls whether local file history is enabled. When enabled, the file contents of an editor that is saved will be stored to a backup location to be able to restore or review the contents later. Changing this setting has no effect on existing local file history entries."), + 'scope': ConfigurationScope.RESOURCE + }, + 'workbench.localHistory.maxFileSize': { + 'type': 'number', + 'default': 256, + 'minimum': 1, + 'description': localize('localHistoryMaxFileSize', "Controls the maximum size of a file (in KB) to be considered for local file history. Files that are larger will not be added to the local file history. Changing this setting has no effect on existing local file history entries."), + 'scope': ConfigurationScope.RESOURCE + }, + 'workbench.localHistory.maxFileEntries': { + 'type': 'number', + 'default': 50, + 'minimum': 0, + 'description': localize('localHistoryMaxFileEntries', "Controls the maximum number of local file history entries per file. When the number of local file history entries exceeds this number for a file, the oldest entries will be discarded."), + 'scope': ConfigurationScope.RESOURCE + }, + 'workbench.localHistory.exclude': { + 'type': 'object', + 'markdownDescription': localize('exclude', "Configure [glob patterns](https://code.visualstudio.com/docs/editor/codebasics#_advanced-search-options) for excluding files from the local file history. Changing this setting has no effect on existing local file history entries."), + 'scope': ConfigurationScope.RESOURCE + }, + 'workbench.localHistory.mergeWindow': { + 'type': 'number', + 'default': 10, + 'minimum': 1, + 'markdownDescription': localize('mergeWindow', "Configure an interval in seconds during which the last entry in local file history is replaced with the entry that is being added. This helps reduce the overall number of entries that are added, for example when auto save is enabled. This setting is only applied to entries that have the same source of origin. Changing this setting has no effect on existing local file history entries."), + 'scope': ConfigurationScope.RESOURCE }, 'workbench.commandPalette.history': { 'type': 'number', - 'description': nls.localize('commandHistory', "Controls the number of recently used commands to keep in history for the command palette. Set to 0 to disable command history."), - 'default': 50 + 'description': localize('commandHistory', "Controls the number of recently used commands to keep in history for the command palette. Set to 0 to disable command history."), + 'default': 50, + 'minimum': 0 }, 'workbench.commandPalette.preserveInput': { 'type': 'boolean', - 'description': nls.localize('preserveInput', "Controls whether the last typed input to the command palette should be restored when opening it the next time."), + 'description': localize('preserveInput', "Controls whether the last typed input to the command palette should be restored when opening it the next time."), 'default': false }, 'workbench.quickOpen.closeOnFocusLost': { 'type': 'boolean', - 'description': nls.localize('closeOnFocusLost', "Controls whether Quick Open should close automatically once it loses focus."), + 'description': localize('closeOnFocusLost', "Controls whether Quick Open should close automatically once it loses focus."), 'default': true }, 'workbench.quickOpen.preserveInput': { 'type': 'boolean', - 'description': nls.localize('workbench.quickOpen.preserveInput', "Controls whether the last typed input to Quick Open should be restored when opening it the next time."), + 'description': localize('workbench.quickOpen.preserveInput', "Controls whether the last typed input to Quick Open should be restored when opening it the next time."), 'default': false }, 'workbench.settings.openDefaultSettings': { 'type': 'boolean', - 'description': nls.localize('openDefaultSettings', "Controls whether opening settings also opens an editor showing all default settings."), + 'description': localize('openDefaultSettings', "Controls whether opening settings also opens an editor showing all default settings."), 'default': false }, 'workbench.settings.useSplitJSON': { 'type': 'boolean', - 'markdownDescription': nls.localize('useSplitJSON', "Controls whether to use the split JSON editor when editing settings as JSON."), + 'markdownDescription': localize('useSplitJSON', "Controls whether to use the split JSON editor when editing settings as JSON."), 'default': false }, 'workbench.settings.openDefaultKeybindings': { 'type': 'boolean', - 'description': nls.localize('openDefaultKeybindings', "Controls whether opening keybinding settings also opens an editor showing all default keybindings."), + 'description': localize('openDefaultKeybindings', "Controls whether opening keybinding settings also opens an editor showing all default keybindings."), 'default': false }, 'workbench.sideBar.location': { 'type': 'string', 'enum': ['left', 'right'], 'default': 'left', - 'description': nls.localize('sideBarLocation', "Controls the location of the sidebar and activity bar. They can either show on the left or right of the workbench.") + 'description': localize('sideBarLocation', "Controls the location of the primary side bar and activity bar. They can either show on the left or right of the workbench. The secondary side bar will show on the opposite side of the workbench.") }, 'workbench.panel.defaultLocation': { 'type': 'string', 'enum': ['left', 'bottom', 'right'], 'default': 'bottom', - 'description': nls.localize('panelDefaultLocation', "Controls the default location of the panel (terminal, debug console, output, problems). It can either show at the bottom, right, or left of the workbench.") + 'description': localize('panelDefaultLocation', "Controls the default location of the panel (terminal, debug console, output, problems) in a new workspace. It can either show at the bottom, right, or left of the editor area."), }, 'workbench.panel.opensMaximized': { 'type': 'string', 'enum': ['always', 'never', 'preserve'], 'default': 'preserve', - 'description': nls.localize('panelOpensMaximized', "Controls whether the panel opens maximized. It can either always open maximized, never open maximized, or open to the last state it was in before being closed."), + 'description': localize('panelOpensMaximized', "Controls whether the panel opens maximized. It can either always open maximized, never open maximized, or open to the last state it was in before being closed."), 'enumDescriptions': [ - nls.localize('workbench.panel.opensMaximized.always', "Always maximize the panel when opening it."), - nls.localize('workbench.panel.opensMaximized.never', "Never maximize the panel when opening it. The panel will open un-maximized."), - nls.localize('workbench.panel.opensMaximized.preserve', "Open the panel to the state that it was in, before it was closed.") + localize('workbench.panel.opensMaximized.always', "Always maximize the panel when opening it."), + localize('workbench.panel.opensMaximized.never', "Never maximize the panel when opening it. The panel will open un-maximized."), + localize('workbench.panel.opensMaximized.preserve', "Open the panel to the state that it was in, before it was closed.") ] }, 'workbench.statusBar.visible': { 'type': 'boolean', 'default': true, - 'description': nls.localize('statusBarVisibility', "Controls the visibility of the status bar at the bottom of the workbench.") + 'description': localize('statusBarVisibility', "Controls the visibility of the status bar at the bottom of the workbench.") }, 'workbench.activityBar.visible': { 'type': 'boolean', 'default': true, - 'description': nls.localize('activityBarVisibility', "Controls the visibility of the activity bar in the workbench.") + 'description': localize('activityBarVisibility', "Controls the visibility of the activity bar in the workbench.") }, 'workbench.activityBar.iconClickBehavior': { 'type': 'string', 'enum': ['toggle', 'focus'], 'default': 'toggle', - 'description': nls.localize('activityBarIconClickBehavior', "Controls the behavior of clicking an activity bar icon in the workbench."), + 'description': localize('activityBarIconClickBehavior', "Controls the behavior of clicking an activity bar icon in the workbench."), 'enumDescriptions': [ - nls.localize('workbench.activityBar.iconClickBehavior.toggle', "Hide the side bar if the clicked item is already visible."), - nls.localize('workbench.activityBar.iconClickBehavior.focus', "Focus side bar if the clicked item is already visible.") + localize('workbench.activityBar.iconClickBehavior.toggle', "Hide the side bar if the clicked item is already visible."), + localize('workbench.activityBar.iconClickBehavior.focus', "Focus side bar if the clicked item is already visible.") ] }, 'workbench.view.alwaysShowHeaderActions': { 'type': 'boolean', 'default': false, - 'description': nls.localize('viewVisibility', "Controls the visibility of view header actions. View header actions may either be always visible, or only visible when that view is focused or hovered over.") + 'description': localize('viewVisibility', "Controls the visibility of view header actions. View header actions may either be always visible, or only visible when that view is focused or hovered over.") }, 'workbench.fontAliasing': { 'type': 'string', 'enum': ['default', 'antialiased', 'none', 'auto'], 'default': 'default', 'description': - nls.localize('fontAliasing', "Controls font aliasing method in the workbench."), + localize('fontAliasing', "Controls font aliasing method in the workbench."), 'enumDescriptions': [ - nls.localize('workbench.fontAliasing.default', "Sub-pixel font smoothing. On most non-retina displays this will give the sharpest text."), - nls.localize('workbench.fontAliasing.antialiased', "Smooth the font on the level of the pixel, as opposed to the subpixel. Can make the font appear lighter overall."), - nls.localize('workbench.fontAliasing.none', "Disables font smoothing. Text will show with jagged sharp edges."), - nls.localize('workbench.fontAliasing.auto', "Applies `default` or `antialiased` automatically based on the DPI of displays.") + localize('workbench.fontAliasing.default', "Sub-pixel font smoothing. On most non-retina displays this will give the sharpest text."), + localize('workbench.fontAliasing.antialiased', "Smooth the font on the level of the pixel, as opposed to the subpixel. Can make the font appear lighter overall."), + localize('workbench.fontAliasing.none', "Disables font smoothing. Text will show with jagged sharp edges."), + localize('workbench.fontAliasing.auto', "Applies `default` or `antialiased` automatically based on the DPI of displays.") ], 'included': isMacintosh }, @@ -293,40 +424,95 @@ import { isStandalone } from 'vs/base/browser/browser'; 'type': 'string', 'enum': ['ui', 'json'], 'enumDescriptions': [ - nls.localize('settings.editor.ui', "Use the settings UI editor."), - nls.localize('settings.editor.json', "Use the JSON file editor."), + localize('settings.editor.ui', "Use the settings UI editor."), + localize('settings.editor.json', "Use the JSON file editor."), ], - 'description': nls.localize('settings.editor.desc', "Determines which settings editor to use by default."), + 'description': localize('settings.editor.desc', "Determines which settings editor to use by default."), 'default': 'ui', 'scope': ConfigurationScope.WINDOW - } + }, + 'workbench.hover.delay': { + 'type': 'number', + 'description': localize('workbench.hover.delay', "Controls the delay in milliseconds after which the hover is shown for workbench items (ex. some extension provided tree view items). Already visible items may require a refresh before reflecting this setting change."), + // Testing has indicated that on Windows and Linux 500 ms matches the native hovers most closely. + // On Mac, the delay is 1500. + 'default': isMacintosh ? 1500 : 500, + 'minimum': 0 + }, + 'workbench.reduceMotion': { + type: 'string', + description: localize('workbench.reduceMotion', "Controls whether the workbench should render with fewer animations."), + 'enumDescriptions': [ + localize('workbench.reduceMotion.on', "Always render with reduced motion."), + localize('workbench.reduceMotion.off', "Do not render with reduced motion"), + localize('workbench.reduceMotion.auto', "Render with reduced motion based on OS configuration."), + ], + default: 'auto', + enum: ['on', 'off', 'auto'] + }, + 'workbench.layoutControl.enabled': { + 'type': 'boolean', + 'default': true, + 'markdownDescription': localize({ key: 'layoutControlEnabled', comment: ['{0} is a placeholder for a setting identifier.'] }, "Controls whether the layout controls in the custom title bar is enabled via {0}.", '`#window.titleBarStyle#`'), + }, + 'workbench.layoutControl.type': { + 'type': 'string', + 'enum': ['menu', 'toggles', 'both'], + 'enumDescriptions': [ + localize('layoutcontrol.type.menu', "Shows a single button with a dropdown of layout options."), + localize('layoutcontrol.type.toggles', "Shows several buttons for toggling the visibility of the panels and side bar."), + localize('layoutcontrol.type.both', "Shows both the dropdown and toggle buttons."), + ], + 'default': 'both', + 'description': localize('layoutControlType', "Controls whether the layout control in the custom title bar is displayed as a single menu button or with multiple UI toggles."), + }, + 'workbench.experimental.layoutControl.enabled': { + 'type': 'boolean', + 'tags': ['experimental'], + 'default': false, + 'markdownDescription': localize({ key: 'layoutControlEnabled', comment: ['{0} is a placeholder for a setting identifier.'] }, "Controls whether the layout controls in the custom title bar is enabled via {0}.", '`#window.titleBarStyle#`'), + 'markdownDeprecationMessage': localize({ key: 'layoutControlEnabledDeprecation', comment: ['{0} is a placeholder for a setting identifier.'] }, "This setting has been deprecated in favor of {0}", '`#workbench.layoutControl.enabled#`') + }, + 'workbench.experimental.layoutControl.type': { + 'type': 'string', + 'enum': ['menu', 'toggles', 'both'], + 'enumDescriptions': [ + localize('layoutcontrol.type.menu', "Shows a single button with a dropdown of layout options."), + localize('layoutcontrol.type.toggles', "Shows several buttons for toggling the visibility of the panels and side bar."), + localize('layoutcontrol.type.both', "Shows both the dropdown and toggle buttons."), + ], + 'tags': ['experimental'], + 'default': 'both', + 'description': localize('layoutControlType', "Controls whether the layout control in the custom title bar is displayed as a single menu button or with multiple UI toggles."), + 'markdownDeprecationMessage': localize({ key: 'layoutControlTypeDeprecation', comment: ['{0} is a placeholder for a setting identifier.'] }, "This setting has been deprecated in favor of {0}", '`#workbench.layoutControl.type#`') + }, } }); // Window - let windowTitleDescription = nls.localize('windowTitle', "Controls the window title based on the active editor. Variables are substituted based on the context:"); + let windowTitleDescription = localize('windowTitle', "Controls the window title based on the active editor. Variables are substituted based on the context:"); windowTitleDescription += '\n- ' + [ - nls.localize('activeEditorShort', "`\${activeEditorShort}`: the file name (e.g. myFile.txt)."), - nls.localize('activeEditorMedium', "`\${activeEditorMedium}`: the path of the file relative to the workspace folder (e.g. myFolder/myFileFolder/myFile.txt)."), - nls.localize('activeEditorLong', "`\${activeEditorLong}`: the full path of the file (e.g. /Users/Development/myFolder/myFileFolder/myFile.txt)."), - nls.localize('activeFolderShort', "`\${activeFolderShort}`: the name of the folder the file is contained in (e.g. myFileFolder)."), - nls.localize('activeFolderMedium', "`\${activeFolderMedium}`: the path of the folder the file is contained in, relative to the workspace folder (e.g. myFolder/myFileFolder)."), - nls.localize('activeFolderLong', "`\${activeFolderLong}`: the full path of the folder the file is contained in (e.g. /Users/Development/myFolder/myFileFolder)."), - nls.localize('folderName', "`\${folderName}`: name of the workspace folder the file is contained in (e.g. myFolder)."), - nls.localize('folderPath', "`\${folderPath}`: file path of the workspace folder the file is contained in (e.g. /Users/Development/myFolder)."), - nls.localize('rootName', "`\${rootName}`: name of the workspace (e.g. myFolder or myWorkspace)."), - nls.localize('rootPath', "`\${rootPath}`: file path of the workspace (e.g. /Users/Development/myWorkspace)."), - nls.localize('appName', "`\${appName}`: e.g. VS Code."), - nls.localize('remoteName', "`\${remoteName}`: e.g. SSH"), - nls.localize('dirty', "`\${dirty}`: a dirty indicator if the active editor is dirty."), - nls.localize('separator', "`\${separator}`: a conditional separator (\" - \") that only shows when surrounded by variables with values or static text.") + localize('activeEditorShort', "`${activeEditorShort}`: the file name (e.g. myFile.txt)."), + localize('activeEditorMedium', "`${activeEditorMedium}`: the path of the file relative to the workspace folder (e.g. myFolder/myFileFolder/myFile.txt)."), + localize('activeEditorLong', "`${activeEditorLong}`: the full path of the file (e.g. /Users/Development/myFolder/myFileFolder/myFile.txt)."), + localize('activeFolderShort', "`${activeFolderShort}`: the name of the folder the file is contained in (e.g. myFileFolder)."), + localize('activeFolderMedium', "`${activeFolderMedium}`: the path of the folder the file is contained in, relative to the workspace folder (e.g. myFolder/myFileFolder)."), + localize('activeFolderLong', "`${activeFolderLong}`: the full path of the folder the file is contained in (e.g. /Users/Development/myFolder/myFileFolder)."), + localize('folderName', "`${folderName}`: name of the workspace folder the file is contained in (e.g. myFolder)."), + localize('folderPath', "`${folderPath}`: file path of the workspace folder the file is contained in (e.g. /Users/Development/myFolder)."), + localize('rootName', "`${rootName}`: name of the opened workspace or folder (e.g. myFolder or myWorkspace)."), + localize('rootPath', "`${rootPath}`: file path of the opened workspace or folder (e.g. /Users/Development/myWorkspace)."), + localize('appName', "`${appName}`: e.g. VS Code."), + localize('remoteName', "`${remoteName}`: e.g. SSH"), + localize('dirty', "`${dirty}`: an indicator for when the active editor has unsaved changes."), + localize('separator', "`${separator}`: a conditional separator (\" - \") that only shows when surrounded by variables with values or static text.") ].join('\n- '); // intentionally concatenated to not produce a string that is too long for translations registry.registerConfiguration({ 'id': 'window', 'order': 8, - 'title': nls.localize('windowConfigurationTitle', "Window"), + 'title': localize('windowConfigurationTitle', "Window"), 'type': 'object', 'properties': { 'window.title': { @@ -348,79 +534,95 @@ import { isStandalone } from 'vs/base/browser/browser'; }, 'window.titleSeparator': { 'type': 'string', - 'default': isMacintosh ? ' — ' : ' - ', - 'markdownDescription': nls.localize("window.titleSeparator", "Separator used by `window.title`.") + 'default': isMacintosh ? ' \u2014 ' : ' - ', + 'markdownDescription': localize("window.titleSeparator", "Separator used by {0}.", '`#window.title#`') + }, + 'window.commandCenter': { + type: 'boolean', + default: false, + markdownDescription: localize('window.commandCenter', "Show command launcher together with the window title. This setting only has an effect when {0} is set to {1}.", '`#window.titleBarStyle#`', '`custom`') }, 'window.menuBarVisibility': { 'type': 'string', - 'enum': ['default', 'visible', 'toggle', 'hidden', 'compact'], - 'enumDescriptions': [ - nls.localize('window.menuBarVisibility.default', "Menu is only hidden in full screen mode."), - nls.localize('window.menuBarVisibility.visible', "Menu is always visible even in full screen mode."), - nls.localize('window.menuBarVisibility.toggle', "Menu is hidden but can be displayed via Alt key."), - nls.localize('window.menuBarVisibility.hidden', "Menu is always hidden."), - nls.localize('window.menuBarVisibility.compact', "Menu is displayed as a compact button in the sidebar. This value is ignored when `#window.titleBarStyle#` is `native`.") + 'enum': ['classic', 'visible', 'toggle', 'hidden', 'compact'], + 'markdownEnumDescriptions': [ + localize('window.menuBarVisibility.classic', "Menu is displayed at the top of the window and only hidden in full screen mode."), + localize('window.menuBarVisibility.visible', "Menu is always visible at the top of the window even in full screen mode."), + isMacintosh ? + localize('window.menuBarVisibility.toggle.mac', "Menu is hidden but can be displayed at the top of the window by executing the `Focus Application Menu` command.") : + localize('window.menuBarVisibility.toggle', "Menu is hidden but can be displayed at the top of the window via the Alt key."), + localize('window.menuBarVisibility.hidden', "Menu is always hidden."), + localize('window.menuBarVisibility.compact', "Menu is displayed as a compact button in the side bar. This value is ignored when {0} is {1}.", '`#window.titleBarStyle#`', '`native`') ], - 'default': isWeb ? 'compact' : 'default', + 'default': isWeb ? 'compact' : 'classic', 'scope': ConfigurationScope.APPLICATION, - 'description': nls.localize('menuBarVisibility', "Control the visibility of the menu bar. A setting of 'toggle' means that the menu bar is hidden and a single press of the Alt key will show it. By default, the menu bar will be visible, unless the window is full screen."), + 'markdownDescription': isMacintosh ? + localize('menuBarVisibility.mac', "Control the visibility of the menu bar. A setting of 'toggle' means that the menu bar is hidden and executing `Focus Application Menu` will show it. A setting of 'compact' will move the menu into the side bar.") : + localize('menuBarVisibility', "Control the visibility of the menu bar. A setting of 'toggle' means that the menu bar is hidden and a single press of the Alt key will show it. A setting of 'compact' will move the menu into the side bar."), 'included': isWindows || isLinux || isWeb }, 'window.enableMenuBarMnemonics': { 'type': 'boolean', - 'default': !isMacintosh, + 'default': true, 'scope': ConfigurationScope.APPLICATION, - 'description': nls.localize('enableMenuBarMnemonics', "Controls whether the main menus can be opened via Alt-key shortcuts. Disabling mnemonics allows to bind these Alt-key shortcuts to editor commands instead."), - 'included': isWindows || isLinux || isWeb + 'description': localize('enableMenuBarMnemonics', "Controls whether the main menus can be opened via Alt-key shortcuts. Disabling mnemonics allows to bind these Alt-key shortcuts to editor commands instead."), + 'included': isWindows || isLinux }, 'window.customMenuBarAltFocus': { 'type': 'boolean', - 'default': !isMacintosh, + 'default': true, 'scope': ConfigurationScope.APPLICATION, - 'markdownDescription': nls.localize('customMenuBarAltFocus', "Controls whether the menu bar will be focused by pressing the Alt-key. This setting has no effect on toggling the menu bar with the Alt-key."), - 'included': isWindows || isLinux || isWeb + 'markdownDescription': localize('customMenuBarAltFocus', "Controls whether the menu bar will be focused by pressing the Alt-key. This setting has no effect on toggling the menu bar with the Alt-key."), + 'included': isWindows || isLinux }, 'window.openFilesInNewWindow': { 'type': 'string', 'enum': ['on', 'off', 'default'], 'enumDescriptions': [ - nls.localize('window.openFilesInNewWindow.on', "Files will open in a new window."), - nls.localize('window.openFilesInNewWindow.off', "Files will open in the window with the files' folder open or the last active window."), + localize('window.openFilesInNewWindow.on', "Files will open in a new window."), + localize('window.openFilesInNewWindow.off', "Files will open in the window with the files' folder open or the last active window."), isMacintosh ? - nls.localize('window.openFilesInNewWindow.defaultMac', "Files will open in the window with the files' folder open or the last active window unless opened via the Dock or from Finder.") : - nls.localize('window.openFilesInNewWindow.default', "Files will open in a new window unless picked from within the application (e.g. via the File menu).") + localize('window.openFilesInNewWindow.defaultMac', "Files will open in the window with the files' folder open or the last active window unless opened via the Dock or from Finder.") : + localize('window.openFilesInNewWindow.default', "Files will open in a new window unless picked from within the application (e.g. via the File menu).") ], 'default': 'off', 'scope': ConfigurationScope.APPLICATION, 'markdownDescription': isMacintosh ? - nls.localize('openFilesInNewWindowMac', "Controls whether files should open in a new window. \nNote that there can still be cases where this setting is ignored (e.g. when using the `--new-window` or `--reuse-window` command line option).") : - nls.localize('openFilesInNewWindow', "Controls whether files should open in a new window.\nNote that there can still be cases where this setting is ignored (e.g. when using the `--new-window` or `--reuse-window` command line option).") + localize('openFilesInNewWindowMac', "Controls whether files should open in a new window when using a command line or file dialog.\nNote that there can still be cases where this setting is ignored (e.g. when using the `--new-window` or `--reuse-window` command line option).") : + localize('openFilesInNewWindow', "Controls whether files should open in a new window when using a command line or file dialog.\nNote that there can still be cases where this setting is ignored (e.g. when using the `--new-window` or `--reuse-window` command line option).") }, 'window.openFoldersInNewWindow': { 'type': 'string', 'enum': ['on', 'off', 'default'], 'enumDescriptions': [ - nls.localize('window.openFoldersInNewWindow.on', "Folders will open in a new window."), - nls.localize('window.openFoldersInNewWindow.off', "Folders will replace the last active window."), - nls.localize('window.openFoldersInNewWindow.default', "Folders will open in a new window unless a folder is picked from within the application (e.g. via the File menu).") + localize('window.openFoldersInNewWindow.on', "Folders will open in a new window."), + localize('window.openFoldersInNewWindow.off', "Folders will replace the last active window."), + localize('window.openFoldersInNewWindow.default', "Folders will open in a new window unless a folder is picked from within the application (e.g. via the File menu).") ], 'default': 'default', 'scope': ConfigurationScope.APPLICATION, - 'markdownDescription': nls.localize('openFoldersInNewWindow', "Controls whether folders should open in a new window or replace the last active window.\nNote that there can still be cases where this setting is ignored (e.g. when using the `--new-window` or `--reuse-window` command line option).") + 'markdownDescription': localize('openFoldersInNewWindow', "Controls whether folders should open in a new window or replace the last active window.\nNote that there can still be cases where this setting is ignored (e.g. when using the `--new-window` or `--reuse-window` command line option).") }, 'window.confirmBeforeClose': { 'type': 'string', 'enum': ['always', 'keyboardOnly', 'never'], 'enumDescriptions': [ - nls.localize('window.confirmBeforeClose.always', "Always try to ask for confirmation. Note that browsers may still decide to close a tab or window without confirmation."), - nls.localize('window.confirmBeforeClose.keyboardOnly', "Only ask for confirmation if a keybinding was detected. Note that detection may not be possible in some cases."), - nls.localize('window.confirmBeforeClose.never', "Never explicitly ask for confirmation unless data loss is imminent.") + isWeb ? + localize('window.confirmBeforeClose.always.web', "Always try to ask for confirmation. Note that browsers may still decide to close a tab or window without confirmation.") : + localize('window.confirmBeforeClose.always', "Always ask for confirmation."), + isWeb ? + localize('window.confirmBeforeClose.keyboardOnly.web', "Only ask for confirmation if a keybinding was used to close the window. Note that detection may not be possible in some cases.") : + localize('window.confirmBeforeClose.keyboardOnly', "Only ask for confirmation if a keybinding was used."), + isWeb ? + localize('window.confirmBeforeClose.never.web', "Never explicitly ask for confirmation unless data loss is imminent.") : + localize('window.confirmBeforeClose.never', "Never explicitly ask for confirmation.") ], - 'default': isWeb && !isStandalone ? 'keyboardOnly' : 'never', // on by default in web, unless PWA - 'description': nls.localize('confirmBeforeCloseWeb', "Controls whether to show a confirmation dialog before closing the browser tab or window. Note that even if enabled, browsers may still decide to close a tab or window without confirmation and that this setting is only a hint that may not work in all cases."), - 'scope': ConfigurationScope.APPLICATION, - 'included': isWeb + 'default': (isWeb && !isStandalone()) ? 'keyboardOnly' : 'never', // on by default in web, unless PWA, never on desktop + 'markdownDescription': isWeb ? + localize('confirmBeforeCloseWeb', "Controls whether to show a confirmation dialog before closing the browser tab or window. Note that even if enabled, browsers may still decide to close a tab or window without confirmation and that this setting is only a hint that may not work in all cases.") : + localize('confirmBeforeClose', "Controls whether to show a confirmation dialog before closing the window or quitting the application."), + 'scope': ConfigurationScope.APPLICATION } } }); @@ -429,48 +631,48 @@ import { isStandalone } from 'vs/base/browser/browser'; registry.registerConfiguration({ 'id': 'zenMode', 'order': 9, - 'title': nls.localize('zenModeConfigurationTitle', "Zen Mode"), + 'title': localize('zenModeConfigurationTitle', "Zen Mode"), 'type': 'object', 'properties': { 'zenMode.fullScreen': { 'type': 'boolean', 'default': true, - 'description': nls.localize('zenMode.fullScreen', "Controls whether turning on Zen Mode also puts the workbench into full screen mode.") + 'description': localize('zenMode.fullScreen', "Controls whether turning on Zen Mode also puts the workbench into full screen mode.") }, 'zenMode.centerLayout': { 'type': 'boolean', 'default': true, - 'description': nls.localize('zenMode.centerLayout', "Controls whether turning on Zen Mode also centers the layout.") + 'description': localize('zenMode.centerLayout', "Controls whether turning on Zen Mode also centers the layout.") }, 'zenMode.hideTabs': { 'type': 'boolean', 'default': true, - 'description': nls.localize('zenMode.hideTabs', "Controls whether turning on Zen Mode also hides workbench tabs.") + 'description': localize('zenMode.hideTabs', "Controls whether turning on Zen Mode also hides workbench tabs.") }, 'zenMode.hideStatusBar': { 'type': 'boolean', 'default': true, - 'description': nls.localize('zenMode.hideStatusBar', "Controls whether turning on Zen Mode also hides the status bar at the bottom of the workbench.") + 'description': localize('zenMode.hideStatusBar', "Controls whether turning on Zen Mode also hides the status bar at the bottom of the workbench.") }, 'zenMode.hideActivityBar': { 'type': 'boolean', 'default': true, - 'description': nls.localize('zenMode.hideActivityBar', "Controls whether turning on Zen Mode also hides the activity bar either at the left or right of the workbench.") + 'description': localize('zenMode.hideActivityBar', "Controls whether turning on Zen Mode also hides the activity bar either at the left or right of the workbench.") }, 'zenMode.hideLineNumbers': { 'type': 'boolean', 'default': true, - 'description': nls.localize('zenMode.hideLineNumbers', "Controls whether turning on Zen Mode also hides the editor line numbers.") + 'description': localize('zenMode.hideLineNumbers', "Controls whether turning on Zen Mode also hides the editor line numbers.") }, 'zenMode.restore': { 'type': 'boolean', - 'default': false, - 'description': nls.localize('zenMode.restore', "Controls whether a window should restore to zen mode if it was exited in zen mode.") + 'default': true, + 'description': localize('zenMode.restore', "Controls whether a window should restore to zen mode if it was exited in zen mode.") }, 'zenMode.silentNotifications': { 'type': 'boolean', 'default': true, - 'description': nls.localize('zenMode.silentNotifications', "Controls whether notifications are shown while in zen mode. If true, only error notifications will pop out.") + 'description': localize('zenMode.silentNotifications', "Controls whether notifications do not disturb mode should be enabled while in zen mode. If true, only error notifications will pop out.") } } }); diff --git a/vscode-web-gogs1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts b/vscode-web-gogs1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts index e70cba0..bb7706f 100644 --- a/vscode-web-gogs1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts +++ b/vscode-web-gogs1s/src/vs/workbench/contrib/files/browser/views/explorerView.ts @@ -8,30 +8,30 @@ import { URI } from 'vs/base/common/uri'; import * as perf from 'vs/base/common/performance'; import { IAction, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions'; import { memoize } from 'vs/base/common/decorators'; -import { IFilesConfiguration, ExplorerFolderContext, FilesExplorerFocusedContext, ExplorerFocusedContext, ExplorerRootContext, ExplorerResourceReadonlyContext, ExplorerResourceCut, ExplorerResourceMoveableToTrash, ExplorerCompressedFocusContext, ExplorerCompressedFirstFocusContext, ExplorerCompressedLastFocusContext, ExplorerResourceAvailableEditorIdsContext } from 'vs/workbench/contrib/files/common/files'; -import { NewFolderAction, NewFileAction, FileCopiedContext, RefreshExplorerView, CollapseExplorerView } from 'vs/workbench/contrib/files/browser/fileActions'; +import { IFilesConfiguration, ExplorerFolderContext, FilesExplorerFocusedContext, ExplorerFocusedContext, ExplorerRootContext, ExplorerResourceReadonlyContext, ExplorerResourceCut, ExplorerResourceMoveableToTrash, ExplorerCompressedFocusContext, ExplorerCompressedFirstFocusContext, ExplorerCompressedLastFocusContext, ExplorerResourceAvailableEditorIdsContext, VIEW_ID, VIEWLET_ID, ExplorerResourceNotReadonlyContext, ViewHasSomeCollapsibleRootItemContext } from 'vs/workbench/contrib/files/common/files'; +import { FileCopiedContext, NEW_FILE_COMMAND_ID, NEW_FOLDER_COMMAND_ID } from 'vs/workbench/contrib/files/browser/fileActions'; import * as DOM from 'vs/base/browser/dom'; import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; import { ExplorerDecorationsProvider } from 'vs/workbench/contrib/files/browser/views/explorerDecorationsProvider'; import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; import { IConfigurationService, IConfigurationChangeEvent } from 'vs/platform/configuration/common/configuration'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { ResourceContextKey } from 'vs/workbench/common/resources'; -import { IDecorationsService } from 'vs/workbench/services/decorations/browser/decorations'; +import { IContextKeyService, IContextKey, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; +import { ResourceContextKey } from 'vs/workbench/common/contextkeys'; +import { IDecorationsService } from 'vs/workbench/services/decorations/common/decorations'; import { WorkbenchCompressibleAsyncDataTree } from 'vs/platform/list/browser/listService'; import { DelayedDragHandler } from 'vs/base/browser/dnd'; import { IEditorService, SIDE_GROUP, ACTIVE_GROUP } from 'vs/workbench/services/editor/common/editorService'; -import { IViewPaneOptions, ViewPane } from 'vs/workbench/browser/parts/views/viewPaneContainer'; +import { IViewPaneOptions, ViewPane } from 'vs/workbench/browser/parts/views/viewPane'; import { ILabelService } from 'vs/platform/label/common/label'; import { ExplorerDelegate, ExplorerDataSource, FilesRenderer, ICompressedNavigationController, FilesFilter, FileSorter, FileDragAndDrop, ExplorerCompressionDelegate, isCompressedFolderName } from 'vs/workbench/contrib/files/browser/views/explorerViewer'; import { IThemeService, IFileIconTheme } from 'vs/platform/theme/common/themeService'; import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { ITreeContextMenuEvent, TreeVisibility } from 'vs/base/browser/ui/tree/tree'; -import { IMenuService, MenuId, IMenu } from 'vs/platform/actions/common/actions'; +import { IMenuService, MenuId, IMenu, Action2, registerAction2 } from 'vs/platform/actions/common/actions'; import { createAndFillInContextMenuActions } from 'vs/platform/actions/browser/menuEntryActionViewItem'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { ExplorerItem, NewExplorerItem } from 'vs/workbench/contrib/files/common/explorerModel'; @@ -47,11 +47,17 @@ import { attachStyler, IColorMapping } from 'vs/platform/theme/common/styler'; import { ColorValue, listDropBackground } from 'vs/platform/theme/common/colorRegistry'; import { Color } from 'vs/base/common/color'; import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme'; -import { IViewDescriptorService } from 'vs/workbench/common/views'; +import { IViewDescriptorService, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views'; import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { IUriIdentityService } from 'vs/workbench/services/uriIdentity/common/uriIdentity'; +import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; import { EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor'; -import { IExplorerService } from 'vs/workbench/contrib/files/browser/files'; +import { IExplorerService, IExplorerView } from 'vs/workbench/contrib/files/browser/files'; +import { Codicon } from 'vs/base/common/codicons'; +import { ICommandService } from 'vs/platform/commands/common/commands'; +import { IEditorResolverService } from 'vs/workbench/services/editor/common/editorResolverService'; +import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/browser/panecomposite'; +import { EditorOpenSource } from 'vs/platform/editor/common/editor'; +import { ResourceMap } from 'vs/base/common/map'; interface IExplorerViewColors extends IColorMapping { listDropBackground?: ColorValue | undefined; @@ -71,10 +77,31 @@ function hasExpandedRootChild(tree: WorkbenchCompressibleAsyncDataTree, treeInput: ExplorerItem[]): boolean { + for (const folder of treeInput) { + if (tree.hasNode(folder) && !tree.isCollapsed(folder)) { + return true; + } + } return false; } +const identityProvider = { + getId: (stat: ExplorerItem) => { + if (stat instanceof NewExplorerItem) { + return `new:${stat.getId()}`; + } + + return stat.getId(); + } +}; + export function getContext(focus: ExplorerItem[], selection: ExplorerItem[], respectMultiSelection: boolean, compressedNavigationControllerProvider: { getCompressedNavigationController(stat: ExplorerItem): ICompressedNavigationController | undefined }): ExplorerItem[] { @@ -117,7 +144,12 @@ export function getContext(focus: ExplorerItem[], selection: ExplorerItem[], res return [focusedStat]; } -export class ExplorerView extends ViewPane { +export interface IExplorerViewContainerDelegate { + willOpenElement(event?: UIEvent): void; + didOpenElement(event?: UIEvent): void; +} + +export class ExplorerView extends ViewPane implements IExplorerView { static readonly TREE_VIEW_STATE_STORAGE_KEY: string = 'workbench.explorer.treeViewState'; private tree!: WorkbenchCompressibleAsyncDataTree; @@ -140,30 +172,31 @@ export class ExplorerView extends ViewPane { private compressedFocusFirstContext: IContextKey; private compressedFocusLastContext: IContextKey; + private viewHasSomeCollapsibleRootItem: IContextKey; + private horizontalScrolling: boolean | undefined; - // Refresh is needed on the initial explorer open - private shouldRefresh = true; private dragHandler!: DelayedDragHandler; private autoReveal: boolean | 'focusNoScroll' = false; - private actions: IAction[] | undefined; private decorationsProvider: ExplorerDecorationsProvider | undefined; constructor( options: IViewPaneOptions, + private readonly delegate: IExplorerViewContainerDelegate, @IContextMenuService contextMenuService: IContextMenuService, @IViewDescriptorService viewDescriptorService: IViewDescriptorService, @IInstantiationService instantiationService: IInstantiationService, @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, @IProgressService private readonly progressService: IProgressService, @IEditorService private readonly editorService: IEditorService, + @IEditorResolverService private readonly editorResolverService: IEditorResolverService, @IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService, @IKeybindingService keybindingService: IKeybindingService, @IContextKeyService contextKeyService: IContextKeyService, @IConfigurationService configurationService: IConfigurationService, @IDecorationsService private readonly decorationService: IDecorationsService, @ILabelService private readonly labelService: ILabelService, - @IThemeService protected themeService: IWorkbenchThemeService, + @IThemeService themeService: IWorkbenchThemeService, @IMenuService private readonly menuService: IMenuService, @ITelemetryService telemetryService: ITelemetryService, @IExplorerService private readonly explorerService: IExplorerService, @@ -171,7 +204,8 @@ export class ExplorerView extends ViewPane { @IClipboardService private clipboardService: IClipboardService, @IFileService private readonly fileService: IFileService, @IUriIdentityService private readonly uriIdentityService: IUriIdentityService, - @IOpenerService openerService: IOpenerService, + @ICommandService private readonly commandService: ICommandService, + @IOpenerService openerService: IOpenerService ) { super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, telemetryService); @@ -186,6 +220,7 @@ export class ExplorerView extends ViewPane { this.compressedFocusContext = ExplorerCompressedFocusContext.bindTo(contextKeyService); this.compressedFocusFirstContext = ExplorerCompressedFirstFocusContext.bindTo(contextKeyService); this.compressedFocusLastContext = ExplorerCompressedLastFocusContext.bindTo(contextKeyService); + this.viewHasSomeCollapsibleRootItem = ViewHasSomeCollapsibleRootItemContext.bindTo(contextKeyService); this.explorerService.registerView(this); } @@ -194,11 +229,11 @@ export class ExplorerView extends ViewPane { return this.labelService.getWorkspaceLabel(this.contextService.getWorkspace()); } - get title(): string { + override get title(): string { return this.name; } - set title(_: string) { + override set title(_: string) { // noop } @@ -219,7 +254,7 @@ export class ExplorerView extends ViewPane { // Split view methods - protected renderHeader(container: HTMLElement): void { + protected override renderHeader(container: HTMLElement): void { super.renderHeader(container); // Expand on drag over @@ -244,12 +279,12 @@ export class ExplorerView extends ViewPane { setHeader(); } - protected layoutBody(height: number, width: number): void { + protected override layoutBody(height: number, width: number): void { super.layoutBody(height, width); this.tree.layout(height, width); } - renderBody(container: HTMLElement): void { + override renderBody(container: HTMLElement): void { super.renderBody(container); this.container = container; @@ -278,31 +313,17 @@ export class ExplorerView extends ViewPane { this._register(this.onDidChangeBodyVisibility(async visible => { if (visible) { - // If a refresh was requested and we are now visible, run it - if (this.shouldRefresh) { - this.shouldRefresh = false; - await this.setTreeInput(); - } + // Always refresh explorer when it becomes visible to compensate for missing file events #126817 + await this.setTreeInput(); + // Update the collapse / expand button state + this.updateAnyCollapsedContext(); // Find resource to focus from active editor input if set this.selectActiveFile(true); } })); } - getActions(): IAction[] { - if (!this.actions) { - this.actions = [ - this.instantiationService.createInstance(NewFileAction), - this.instantiationService.createInstance(NewFolderAction), - this.instantiationService.createInstance(RefreshExplorerView, RefreshExplorerView.ID, RefreshExplorerView.LABEL), - this.instantiationService.createInstance(CollapseExplorerView, CollapseExplorerView.ID, CollapseExplorerView.LABEL) - ]; - this.actions.forEach(a => this._register(a)); - } - return this.actions; - } - - focus(): void { + override focus(): void { this.tree.domFocus(); const focused = this.tree.getFocus(); @@ -323,6 +344,10 @@ export class ExplorerView extends ViewPane { return this.filter.filter(item, TreeVisibility.Visible); } + isItemCollapsed(item: ExplorerItem): boolean { + return this.tree.isCollapsed(item); + } + async setEditable(stat: ExplorerItem, isEditing: boolean): Promise { if (isEditing) { this.horizontalScrolling = this.tree.options.horizontalScrolling; @@ -382,19 +407,13 @@ export class ExplorerView extends ViewPane { const isCompressionEnabled = () => this.configurationService.getValue('explorer.compactFolders'); + const getFileNestingSettings = (item?: ExplorerItem) => this.configurationService.getValue({ resource: item?.root.resource }).explorer.fileNesting; + this.tree = >this.instantiationService.createInstance(WorkbenchCompressibleAsyncDataTree, 'FileExplorer', container, new ExplorerDelegate(), new ExplorerCompressionDelegate(), [this.renderer], - this.instantiationService.createInstance(ExplorerDataSource), { + this.instantiationService.createInstance(ExplorerDataSource, this.filter), { compressionEnabled: isCompressionEnabled(), accessibilityProvider: this.renderer, - identityProvider: { - getId: (stat: ExplorerItem) => { - if (stat instanceof NewExplorerItem) { - return `new:${stat.resource}`; - } - - return stat.resource; - } - }, + identityProvider, keyboardNavigationLabelProvider: { getKeyboardNavigationLabel: (stat: ExplorerItem) => { if (this.explorerService.isEditable(stat)) { @@ -414,8 +433,27 @@ export class ExplorerView extends ViewPane { multipleSelectionSupport: true, filter: this.filter, sorter: this.instantiationService.createInstance(FileSorter), - dnd: this.instantiationService.createInstance(FileDragAndDrop), + dnd: this.instantiationService.createInstance(FileDragAndDrop, (item) => this.isItemCollapsed(item)), + collapseByDefault: (e) => { + if (e instanceof ExplorerItem) { + if (e.hasNests && getFileNestingSettings(e).expand) { + return false; + } + } + return true; + }, autoExpandSingleChildren: true, + expandOnlyOnTwistieClick: (e: unknown) => { + if (e instanceof ExplorerItem) { + if (e.hasNests) { + return true; + } + else if (this.configurationService.getValue<'singleClick' | 'doubleClick'>('workbench.tree.expandMode') === 'doubleClick') { + return true; + } + } + return false; + }, additionalScrollHeight: ExplorerDelegate.ITEM_HEIGHT, overrideStyles: { listBackground: SIDE_BAR_BACKGROUND @@ -450,14 +488,19 @@ export class ExplorerView extends ViewPane { return; } this.telemetryService.publicLog2('workbenchActionExecuted', { id: 'workbench.files.openFile', from: 'explorer' }); - await this.editorService.openEditor({ resource: element.resource, options: { preserveFocus: e.editorOptions.preserveFocus, pinned: e.editorOptions.pinned } }, e.sideBySide ? SIDE_GROUP : ACTIVE_GROUP); + try { + this.delegate.willOpenElement(e.browserEvent); + await this.editorService.openEditor({ resource: element.resource, options: { preserveFocus: e.editorOptions.preserveFocus, pinned: e.editorOptions.pinned, source: EditorOpenSource.USER } }, e.sideBySide ? SIDE_GROUP : ACTIVE_GROUP); + } finally { + this.delegate.didOpenElement(); + } } })); this._register(this.tree.onContextMenu(e => this.onContextMenu(e))); this._register(this.tree.onDidScroll(async e => { - let editable = this.explorerService.getEditable(); + const editable = this.explorerService.getEditable(); if (e.scrollTopChanged && editable && this.tree.getRelativeTop(editable.stat) === null) { await editable.data.onFinish('', false); } @@ -467,9 +510,18 @@ export class ExplorerView extends ViewPane { const element = e.node.element?.element; if (element) { const navigationController = this.renderer.getCompressedNavigationController(element instanceof Array ? element[0] : element); - if (navigationController) { - navigationController.updateCollapsed(e.node.collapsed); - } + navigationController?.updateCollapsed(e.node.collapsed); + } + // Update showing expand / collapse button + this.updateAnyCollapsedContext(); + })); + + this.updateAnyCollapsedContext(); + + this._register(this.tree.onMouseDblClick(e => { + if (e.element === null) { + // click in empty area -> create a new file #116676 + this.commandService.executeCommand(NEW_FILE_COMMAND_ID); } })); @@ -491,16 +543,17 @@ export class ExplorerView extends ViewPane { } private setContextKeys(stat: ExplorerItem | null | undefined): void { - const isSingleFolder = this.contextService.getWorkbenchState() === WorkbenchState.FOLDER; - const resource = stat ? stat.resource : isSingleFolder ? this.contextService.getWorkspace().folders[0].uri : null; + const folders = this.contextService.getWorkspace().folders; + const resource = stat ? stat.resource : folders[folders.length - 1].uri; + stat = stat || this.explorerService.findClosest(resource); this.resourceContext.set(resource); - this.folderContext.set((isSingleFolder && !stat) || !!stat && stat.isDirectory); + this.folderContext.set(!!stat && stat.isDirectory); this.readonlyContext.set(!!stat && stat.isReadonly); - this.rootContext.set(!stat || (stat && stat.isRoot)); + this.rootContext.set(!!stat && stat.isRoot); if (resource) { - const overrides = resource ? this.editorService.getEditorOverrides(resource, undefined, undefined) : []; - this.availableEditorIdsContext.set(overrides.map(([, entry]) => entry.id).join(',')); + const overrides = resource ? this.editorResolverService.getEditors(resource).map(editor => editor.id) : []; + this.availableEditorIdsContext.set(overrides.join(',')); } else { this.availableEditorIdsContext.reset(); } @@ -508,7 +561,7 @@ export class ExplorerView extends ViewPane { private async onContextMenu(e: ITreeContextMenuEvent): Promise { const disposables = new DisposableStore(); - let stat = e.element; + const stat = e.element; let anchor = e.anchor; // Compressed folders @@ -583,13 +636,12 @@ export class ExplorerView extends ViewPane { // General methods /** - * Refresh the contents of the explorer to get up to date data from the disk about the file structure. - * If the item is passed we refresh only that level of the tree, otherwise we do a full refresh. - */ + * Refresh the contents of the explorer to get up to date data from the disk about the file structure. + * If the item is passed we refresh only that level of the tree, otherwise we do a full refresh. + */ refresh(recursive: boolean, item?: ExplorerItem, cancelEditing: boolean = true): Promise { if (!this.tree || !this.isBodyVisible() || (item && !this.tree.hasNode(item))) { - // Tree node doesn't exist yet - this.shouldRefresh = true; + // Tree node doesn't exist yet, when it becomes visible we will refresh return Promise.resolve(undefined); } @@ -598,34 +650,12 @@ export class ExplorerView extends ViewPane { } const toRefresh = item || this.tree.getInput(); - return this.tree.updateChildren(toRefresh, recursive); - } - - focusNeighbourIfItemFocused(item: ExplorerItem): void { - const focus = this.tree.getFocus(); - if (focus.length !== 1) { - return; - } - const compressedController = this.renderer.getCompressedNavigationController(focus[0]) || this.renderer.getCompressedNavigationController(item); - const indexOfItem = compressedController?.items.indexOf(item) || -1; - const itemsCompressedTogether = compressedController && (compressedController.items.indexOf(focus[0]) >= 0) && (indexOfItem >= 0); - - if (focus[0] === item || itemsCompressedTogether) { - if (itemsCompressedTogether && indexOfItem > 0 && item.parent) { - // In case of compact items just focus the parent if it is part of the compact item. So the focus stays - this.tree.setFocus([item.parent]); - } else { - this.tree.focusNext(); - const newFocus = this.tree.getFocus(); - if (newFocus.length === 1 && newFocus[0] === item) { - // There was no next item to focus, focus the previous one - this.tree.focusPrevious(); - } - } - } + return this.tree.updateChildren(toRefresh, recursive, false, { + diffIdentityProvider: identityProvider + }); } - getOptimalWidth(): number { + override getOptimalWidth(): number { const parentNode = this.tree.getHTMLElement(); const childNodes = ([] as HTMLElement[]).slice.call(parentNode.querySelectorAll('.explorer-item .label-name')); // select all file labels @@ -634,13 +664,12 @@ export class ExplorerView extends ViewPane { async setTreeInput(): Promise { if (!this.isBodyVisible()) { - this.shouldRefresh = true; return Promise.resolve(undefined); } const initialInputSetup = !this.tree.getInput(); if (initialInputSetup) { - perf.mark('willResolveExplorer'); + perf.mark('code/willResolveExplorer'); } const roots = this.explorerService.roots; let input: ExplorerItem | ExplorerItem[] = roots[0]; @@ -660,33 +689,42 @@ export class ExplorerView extends ViewPane { } const previousInput = this.tree.getInput(); - const promise = this.tree.setInput(input, viewState).then(() => { + const promise = this.tree.setInput(input, viewState).then(async () => { if (Array.isArray(input)) { if (!viewState || previousInput instanceof ExplorerItem) { - // There is no view state for this workspace, expand all roots. Or we transitioned from a folder workspace. - input.forEach(async item => { + // There is no view state for this workspace (we transitioned from a folder workspace?), expand all roots. + await Promise.all(input.map(async item => { try { await this.tree.expand(item); } catch (e) { } - }); + })); } - if (Array.isArray(previousInput) && previousInput.length < input.length) { + // Reloaded or transitioned from an empty workspace, but only have a single folder in the workspace. + if (!previousInput && input.length === 1 && this.configurationService.getValue().explorer.expandSingleFolderWorkspaces) { + await this.tree.expand(input[0]).catch(() => { }); + } + if (Array.isArray(previousInput)) { + const previousRoots = new ResourceMap(); + previousInput.forEach(previousRoot => previousRoots.set(previousRoot.resource, true)); + // Roots added to the explorer -> expand them. - input.slice(previousInput.length).forEach(async item => { - try { - await this.tree.expand(item); - } catch (e) { } - }); + await Promise.all(input.map(async item => { + if (!previousRoots.has(item.resource)) { + try { + await this.tree.expand(item); + } catch (e) { } + } + })); } } if (initialInputSetup) { - perf.mark('didResolveExplorer'); + perf.mark('code/didResolveExplorer'); } }); this.progressService.withProgress({ location: ProgressLocation.Explorer, - delay: this.layoutService.isRestored() ? 800 : 1200 // less ugly initial startup + delay: this.layoutService.isRestored() ? 800 : 1500 // reduce progress visibility when still restoring }, _progress => promise); await promise; @@ -707,9 +745,7 @@ export class ExplorerView extends ViewPane { } // Expand all stats in the parent chain. - let item: ExplorerItem | undefined = this.explorerService.roots.filter(i => this.uriIdentityService.extUri.isEqualOrParent(resource, i.resource)) - // Take the root that is the closest to the stat #72299 - .sort((first, second) => second.resource.path.length - first.resource.path.length)[0]; + let item: ExplorerItem | null = this.explorerService.findClosestRoot(resource); while (item && item.resource.toString() !== resource.toString()) { try { @@ -718,12 +754,12 @@ export class ExplorerView extends ViewPane { return this.selectResource(resource, reveal, retry + 1); } - for (let child of item.children.values()) { + for (const child of item.children.values()) { if (this.uriIdentityService.extUri.isEqualOrParent(resource, child.resource)) { item = child; break; } - item = undefined; + item = null; } } @@ -752,14 +788,20 @@ export class ExplorerView extends ViewPane { itemsCopied(stats: ExplorerItem[], cut: boolean, previousCut: ExplorerItem[] | undefined): void { this.fileCopiedContextKey.set(stats.length > 0); this.resourceCutContextKey.set(cut && stats.length > 0); - if (previousCut) { - previousCut.forEach(item => this.tree.rerender(item)); - } + previousCut?.forEach(item => this.tree.rerender(item)); if (cut) { stats.forEach(s => this.tree.rerender(s)); } } + expandAll(): void { + if (this.explorerService.isEditable(undefined)) { + this.tree.domFocus(); + } + + this.tree.expandAll(); + } + collapseAll(): void { if (this.explorerService.isEditable(undefined)) { this.tree.domFocus(); @@ -828,6 +870,16 @@ export class ExplorerView extends ViewPane { this.compressedFocusLastContext.set(controller.index === controller.count - 1); } + private updateAnyCollapsedContext(): void { + const treeInput = this.tree.getInput(); + if (treeInput === undefined) { + return; + } + const treeInputArray = Array.isArray(treeInput) ? treeInput : Array.from(treeInput.children.values()); + // Has collapsible root when anything is expanded + this.viewHasSomeCollapsibleRootItem.set(hasExpandedNode(this.tree, treeInputArray)); + } + styleListDropBackground(styles: IExplorerViewStyles): void { const content: string[] = []; @@ -841,7 +893,7 @@ export class ExplorerView extends ViewPane { } } - dispose(): void { + override dispose(): void { if (this.dragHandler) { this.dragHandler.dispose(); } @@ -861,3 +913,96 @@ function createFileIconThemableTreeContainerScope(container: HTMLElement, themeS onDidChangeFileIconTheme(themeService.getFileIconTheme()); return themeService.onDidFileIconThemeChange(onDidChangeFileIconTheme); } + +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.files.action.createFileFromExplorer', + title: nls.localize('createNewFile', "New File"), + f1: false, + icon: Codicon.newFile, + precondition: ExplorerResourceNotReadonlyContext, + menu: { + id: MenuId.ViewTitle, + group: 'navigation', + when: ContextKeyExpr.equals('view', VIEW_ID), + order: 10 + } + }); + } + + run(accessor: ServicesAccessor): void { + const commandService = accessor.get(ICommandService); + commandService.executeCommand(NEW_FILE_COMMAND_ID); + } +}); + +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.files.action.createFolderFromExplorer', + title: nls.localize('createNewFolder', "New Folder"), + f1: false, + icon: Codicon.newFolder, + precondition: ExplorerResourceNotReadonlyContext, + menu: { + id: MenuId.ViewTitle, + group: 'navigation', + when: ContextKeyExpr.equals('view', VIEW_ID), + order: 20 + } + }); + } + + run(accessor: ServicesAccessor): void { + const commandService = accessor.get(ICommandService); + commandService.executeCommand(NEW_FOLDER_COMMAND_ID); + } +}); + +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.files.action.refreshFilesExplorer', + title: { value: nls.localize('refreshExplorer', "Refresh Explorer"), original: 'Refresh Explorer' }, + f1: true, + icon: Codicon.refresh, + menu: { + id: MenuId.ViewTitle, + group: 'navigation', + when: ContextKeyExpr.equals('view', VIEW_ID), + order: 30 + } + }); + } + + async run(accessor: ServicesAccessor): Promise { + const paneCompositeService = accessor.get(IPaneCompositePartService); + const explorerService = accessor.get(IExplorerService); + await paneCompositeService.openPaneComposite(VIEWLET_ID, ViewContainerLocation.Sidebar); + await explorerService.refresh(); + } +}); + +registerAction2(class extends Action2 { + constructor() { + super({ + id: 'workbench.files.action.collapseExplorerFolders', + title: { value: nls.localize('collapseExplorerFolders', "Collapse Folders in Explorer"), original: 'Collapse Folders in Explorer' }, + f1: true, + icon: Codicon.collapseAll, + menu: { + id: MenuId.ViewTitle, + group: 'navigation', + when: ContextKeyExpr.equals('view', VIEW_ID), + order: 40 + } + }); + } + + run(accessor: ServicesAccessor) { + const viewsService = accessor.get(IViewsService); + const explorerView = viewsService.getViewWithId(VIEW_ID) as ExplorerView; + explorerView.collapseAll(); + } +}); diff --git a/vscode-web-gogs1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts b/vscode-web-gogs1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts deleted file mode 100644 index 8bbce2d..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/contrib/files/common/editors/fileEditorInput.ts +++ /dev/null @@ -1,403 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -// import { localize } from 'vs/nls'; -import { URI } from 'vs/base/common/uri'; -import { EncodingMode, IFileEditorInput, Verbosity, GroupIdentifier, IMoveResult, isTextEditorPane } from 'vs/workbench/common/editor'; -import { AbstractTextResourceEditorInput } from 'vs/workbench/common/editor/textResourceEditorInput'; -import { BinaryEditorModel } from 'vs/workbench/common/editor/binaryEditorModel'; -import { FileOperationError, FileOperationResult, IFileService } from 'vs/platform/files/common/files'; -import { ITextFileService, TextFileEditorModelState, TextFileLoadReason, TextFileOperationError, TextFileOperationResult, ITextFileEditorModel } from 'vs/workbench/services/textfile/common/textfiles'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IReference, dispose, DisposableStore } from 'vs/base/common/lifecycle'; -import { ITextModelService } from 'vs/editor/common/services/resolverService'; -import { FILE_EDITOR_INPUT_ID, TEXT_FILE_EDITOR_ID, BINARY_FILE_EDITOR_ID } from 'vs/workbench/contrib/files/common/files'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IFilesConfigurationService } from 'vs/workbench/services/filesConfiguration/common/filesConfigurationService'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; -import { isEqual } from 'vs/base/common/resources'; -import { Event } from 'vs/base/common/event'; -import { IEditorViewState } from 'vs/editor/common/editorCommon'; -import { Schemas } from 'vs/base/common/network'; - -const enum ForceOpenAs { - None, - Text, - Binary -} - -/** - * A file editor input is the input type for the file editor of file system resources. - */ -export class FileEditorInput extends AbstractTextResourceEditorInput implements IFileEditorInput { - - private preferredName: string | undefined; - private preferredDescription: string | undefined; - private preferredEncoding: string | undefined; - private preferredMode: string | undefined; - - private forceOpenAs: ForceOpenAs = ForceOpenAs.None; - - private model: ITextFileEditorModel | undefined = undefined; - private cachedTextFileModelReference: IReference | undefined = undefined; - - private readonly modelListeners: DisposableStore = this._register(new DisposableStore()); - - constructor( - resource: URI, - preferredResource: URI | undefined, - preferredName: string | undefined, - preferredDescription: string | undefined, - preferredEncoding: string | undefined, - preferredMode: string | undefined, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @ITextFileService textFileService: ITextFileService, - @ITextModelService private readonly textModelResolverService: ITextModelService, - @ILabelService labelService: ILabelService, - @IFileService fileService: IFileService, - @IFilesConfigurationService filesConfigurationService: IFilesConfigurationService, - @IEditorService editorService: IEditorService, - @IEditorGroupsService editorGroupService: IEditorGroupsService - ) { - super(resource, preferredResource, editorService, editorGroupService, textFileService, labelService, fileService, filesConfigurationService); - - this.model = this.textFileService.files.get(resource); - - if (preferredName) { - this.setPreferredName(preferredName); - } - - if (preferredDescription) { - this.setPreferredDescription(preferredDescription); - } - - if (preferredEncoding) { - this.setPreferredEncoding(preferredEncoding); - } - - if (preferredMode) { - this.setPreferredMode(preferredMode); - } - - // If a file model already exists, make sure to wire it in - if (this.model) { - this.registerModelListeners(this.model); - } - } - - protected registerListeners(): void { - super.registerListeners(); - - // Attach to model that matches our resource once created - this._register(this.textFileService.files.onDidCreate(model => this.onDidCreateTextFileModel(model))); - } - - private onDidCreateTextFileModel(model: ITextFileEditorModel): void { - - // Once the text file model is created, we keep it inside - // the input to be able to implement some methods properly - if (isEqual(model.resource, this.resource)) { - this.model = model; - - this.registerModelListeners(model); - } - } - - private registerModelListeners(model: ITextFileEditorModel): void { - - // Clear any old - this.modelListeners.clear(); - - // re-emit some events from the model - this.modelListeners.add(model.onDidChangeDirty(() => this._onDidChangeDirty.fire())); - this.modelListeners.add(model.onDidChangeOrphaned(() => this._onDidChangeLabel.fire())); - - // important: treat save errors as potential dirty change because - // a file that is in save conflict or error will report dirty even - // if auto save is turned on. - this.modelListeners.add(model.onDidSaveError(() => this._onDidChangeDirty.fire())); - - // remove model association once it gets disposed - this.modelListeners.add(Event.once(model.onDispose)(() => { - this.modelListeners.clear(); - this.model = undefined; - })); - } - - getTypeId(): string { - return FILE_EDITOR_INPUT_ID; - } - - getName(): string { - return this.preferredName || this.decorateLabel(super.getName()); - } - - setPreferredName(name: string): void { - if (!this.allowLabelOverride()) { - return; // block for specific schemes we own - } - - if (this.preferredName !== name) { - this.preferredName = name; - - this._onDidChangeLabel.fire(); - } - } - - private allowLabelOverride(): boolean { - return this.resource.scheme !== Schemas.file && this.resource.scheme !== Schemas.vscodeRemote && this.resource.scheme !== Schemas.userData; - } - - getPreferredName(): string | undefined { - return this.preferredName; - } - - getDescription(verbosity?: Verbosity): string | undefined { - return this.preferredDescription || super.getDescription(verbosity); - } - - setPreferredDescription(description: string): void { - if (!this.allowLabelOverride()) { - return; // block for specific schemes we own - } - - if (this.preferredDescription !== description) { - this.preferredDescription = description; - - this._onDidChangeLabel.fire(); - } - } - - getPreferredDescription(): string | undefined { - return this.preferredDescription; - } - - getTitle(verbosity: Verbosity): string { - switch (verbosity) { - case Verbosity.SHORT: - return this.decorateLabel(super.getName()); - case Verbosity.MEDIUM: - case Verbosity.LONG: - return this.decorateLabel(super.getTitle(verbosity)); - } - } - - private decorateLabel(label: string): string { - // modify-by-github1s, remove read-only tips - // const orphaned = this.model?.hasState(TextFileEditorModelState.ORPHAN); - // const readonly = this.isReadonly(); - - // if (orphaned && readonly) { - // return localize('orphanedReadonlyFile', "{0} (deleted, read-only)", label); - // } - - // if (orphaned) { - // return localize('orphanedFile', "{0} (deleted)", label); - // } - - // if (readonly) { - // return localize('readonlyFile', "{0} (read-only)", label); - // } - - return label; - } - - getEncoding(): string | undefined { - if (this.model) { - return this.model.getEncoding(); - } - - return this.preferredEncoding; - } - - getPreferredEncoding(): string | undefined { - return this.preferredEncoding; - } - - setEncoding(encoding: string, mode: EncodingMode): void { - this.setPreferredEncoding(encoding); - - this.model?.setEncoding(encoding, mode); - } - - setPreferredEncoding(encoding: string): void { - this.preferredEncoding = encoding; - - // encoding is a good hint to open the file as text - this.setForceOpenAsText(); - } - - getPreferredMode(): string | undefined { - return this.preferredMode; - } - - setMode(mode: string): void { - this.setPreferredMode(mode); - - this.model?.setMode(mode); - } - - setPreferredMode(mode: string): void { - this.preferredMode = mode; - - // mode is a good hint to open the file as text - this.setForceOpenAsText(); - } - - setForceOpenAsText(): void { - this.forceOpenAs = ForceOpenAs.Text; - } - - setForceOpenAsBinary(): void { - this.forceOpenAs = ForceOpenAs.Binary; - } - - isDirty(): boolean { - return !!(this.model?.isDirty()); - } - - isReadonly(): boolean { - if (this.model) { - return this.model.isReadonly(); - } - - return super.isReadonly(); - } - - isSaving(): boolean { - if (this.model?.hasState(TextFileEditorModelState.SAVED) || this.model?.hasState(TextFileEditorModelState.CONFLICT) || this.model?.hasState(TextFileEditorModelState.ERROR)) { - return false; // require the model to be dirty and not in conflict or error state - } - - // Note: currently not checking for ModelState.PENDING_SAVE for a reason - // because we currently miss an event for this state change on editors - // and it could result in bad UX where an editor can be closed even though - // it shows up as dirty and has not finished saving yet. - - return super.isSaving(); - } - - getPreferredEditorId(candidates: string[]): string { - return this.forceOpenAs === ForceOpenAs.Binary ? BINARY_FILE_EDITOR_ID : TEXT_FILE_EDITOR_ID; - } - - resolve(): Promise { - - // Resolve as binary - if (this.forceOpenAs === ForceOpenAs.Binary) { - return this.doResolveAsBinary(); - } - - // Resolve as text - return this.doResolveAsText(); - } - - private async doResolveAsText(): Promise { - try { - - // Resolve resource via text file service and only allow - // to open binary files if we are instructed so - await this.textFileService.files.resolve(this.resource, { - mode: this.preferredMode, - encoding: this.preferredEncoding, - reload: { async: true }, // trigger a reload of the model if it exists already but do not wait to show the model - allowBinary: this.forceOpenAs === ForceOpenAs.Text, - reason: TextFileLoadReason.EDITOR - }); - - // This is a bit ugly, because we first resolve the model and then resolve a model reference. the reason being that binary - // or very large files do not resolve to a text file model but should be opened as binary files without text. First calling into - // resolve() ensures we are not creating model references for these kind of resources. - // In addition we have a bit of payload to take into account (encoding, reload) that the text resolver does not handle yet. - if (!this.cachedTextFileModelReference) { - this.cachedTextFileModelReference = await this.textModelResolverService.createModelReference(this.resource) as IReference; - } - - const model = this.cachedTextFileModelReference.object; - - // It is possible that this input was disposed before the model - // finished resolving. As such, we need to make sure to dispose - // the model reference to not leak it. - if (this.isDisposed()) { - this.disposeModelReference(); - } - - return model; - } catch (error) { - - // In case of an error that indicates that the file is binary or too large, just return with the binary editor model - if ( - (error).textFileOperationResult === TextFileOperationResult.FILE_IS_BINARY || - (error).fileOperationResult === FileOperationResult.FILE_TOO_LARGE - ) { - return this.doResolveAsBinary(); - } - - // Bubble any other error up - throw error; - } - } - - private async doResolveAsBinary(): Promise { - return this.instantiationService.createInstance(BinaryEditorModel, this.preferredResource, this.getName()).load(); - } - - isResolved(): boolean { - return !!this.model; - } - - rename(group: GroupIdentifier, target: URI): IMoveResult { - return { - editor: { - resource: target, - encoding: this.getEncoding(), - options: { - viewState: this.getViewStateFor(group) - } - } - }; - } - - private getViewStateFor(group: GroupIdentifier): IEditorViewState | undefined { - for (const editorPane of this.editorService.visibleEditorPanes) { - if (editorPane.group.id === group && isEqual(editorPane.input.resource, this.resource)) { - if (isTextEditorPane(editorPane)) { - return editorPane.getViewState(); - } - } - } - - return undefined; - } - - matches(otherInput: unknown): boolean { - if (otherInput === this) { - return true; - } - - if (otherInput instanceof FileEditorInput) { - return isEqual(otherInput.resource, this.resource); - } - - return false; - } - - dispose(): void { - - // Model - this.model = undefined; - - // Model reference - this.disposeModelReference(); - - super.dispose(); - } - - private disposeModelReference(): void { - dispose(this.cachedTextFileModelReference); - this.cachedTextFileModelReference = undefined; - } -} diff --git a/vscode-web-gogs1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts b/vscode-web-gogs1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts index 0f5d88f..264ef28 100644 --- a/vscode-web-gogs1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts +++ b/vscode-web-gogs1s/src/vs/workbench/contrib/url/browser/trustedDomains.ts @@ -11,12 +11,10 @@ import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/commo import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { IAuthenticationService } from 'vs/workbench/services/authentication/browser/authenticationService'; +import { IAuthenticationService } from 'vs/workbench/services/authentication/common/authentication'; import { IFileService } from 'vs/platform/files/common/files'; import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; const TRUSTED_DOMAINS_URI = URI.parse('trustedDomains:/Trusted Domains'); @@ -31,16 +29,12 @@ export const manageTrustedDomainSettingsCommand = { }, handler: async (accessor: ServicesAccessor) => { const editorService = accessor.get(IEditorService); - editorService.openEditor({ resource: TRUSTED_DOMAINS_URI, mode: 'jsonc', options: { pinned: true } }); + editorService.openEditor({ resource: TRUSTED_DOMAINS_URI, languageId: 'jsonc', options: { pinned: true } }); return; } }; -type ConfigureTrustedDomainsQuickPickItem = IQuickPickItem & ({ id: 'manage'; } | { id: 'trust'; toTrust: string }); - -type ConfigureTrustedDomainsChoiceClassification = { - choice: { classification: 'SystemMetaData', purpose: 'FeatureInsight' }; -}; +type ConfigureTrustedDomainsQuickPickItem = IQuickPickItem & ({ id: 'manage' } | { id: 'trust'; toTrust: string }); export async function configureOpenerTrustedDomainsHandler( trustedDomains: string[], @@ -50,8 +44,6 @@ export async function configureOpenerTrustedDomainsHandler( storageService: IStorageService, editorService: IEditorService, telemetryService: ITelemetryService, - notificationService: INotificationService, - clipboardService: IClipboardService, ) { const parsedDomainToConfigure = URI.parse(domainToConfigure); const toplevelDomainSegements = parsedDomainToConfigure.authority.split('.'); @@ -108,34 +100,28 @@ export async function configureOpenerTrustedDomainsHandler( ); if (pickedResult && pickedResult.id) { - telemetryService.publicLog2<{ choice: string }, ConfigureTrustedDomainsChoiceClassification>( - 'trustedDomains.configureTrustedDomainsQuickPickChoice', - { choice: pickedResult.id } - ); - switch (pickedResult.id) { case 'manage': await editorService.openEditor({ - resource: TRUSTED_DOMAINS_URI, - mode: 'jsonc', + resource: TRUSTED_DOMAINS_URI.with({ fragment: resource.toString() }), + languageId: 'jsonc', options: { pinned: true } }); - notificationService.prompt(Severity.Info, localize('configuringURL', "Configuring trust for: {0}", resource.toString()), - [{ label: 'Copy', run: () => clipboardService.writeText(resource.toString()) }]); return trustedDomains; - case 'trust': + case 'trust': { const itemToTrust = pickedResult.toTrust; if (trustedDomains.indexOf(itemToTrust) === -1) { - storageService.remove(TRUSTED_DOMAINS_CONTENT_STORAGE_KEY, StorageScope.GLOBAL); + storageService.remove(TRUSTED_DOMAINS_CONTENT_STORAGE_KEY, StorageScope.APPLICATION); storageService.store( TRUSTED_DOMAINS_STORAGE_KEY, JSON.stringify([...trustedDomains, itemToTrust]), - StorageScope.GLOBAL, + StorageScope.APPLICATION, StorageTarget.USER ); return [...trustedDomains, itemToTrust]; } + } } } @@ -162,14 +148,18 @@ async function getRemotes(fileService: IFileService, textFileService: ITextFileS const domains = await Promise.race([ new Promise(resolve => setTimeout(() => resolve([]), 2000)), Promise.all(workspaceUris.map(async workspaceUri => { - const path = workspaceUri.path; - const uri = workspaceUri.with({ path: `${path !== '/' ? path : ''}/.git/config` }); - const exists = await fileService.exists(uri); - if (!exists) { + try { + const path = workspaceUri.path; + const uri = workspaceUri.with({ path: `${path !== '/' ? path : ''}/.git/config` }); + const exists = await fileService.exists(uri); + if (!exists) { + return []; + } + const gitConfig = (await (textFileService.read(uri, { acceptTextOnly: true }).catch(() => ({ value: '' })))).value; + return extractGitHubRemotesFromGitConfig(gitConfig); + } catch { return []; } - const gitConfig = (await (textFileService.read(uri, { acceptTextOnly: true }).catch(() => ({ value: '' })))).value; - return extractGitHubRemotesFromGitConfig(gitConfig); }))]); const set = domains.reduce((set, list) => list.reduce((set, item) => set.add(item), set), new Set()); @@ -229,7 +219,7 @@ export function readStaticTrustedDomains(accessor: ServicesAccessor): IStaticTru let trustedDomains: string[] = []; try { - const trustedDomainsSrc = storageService.get(TRUSTED_DOMAINS_STORAGE_KEY, StorageScope.GLOBAL); + const trustedDomainsSrc = storageService.get(TRUSTED_DOMAINS_STORAGE_KEY, StorageScope.APPLICATION); if (trustedDomainsSrc) { trustedDomains = JSON.parse(trustedDomainsSrc); } diff --git a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts b/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts deleted file mode 100644 index 993f950..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page.ts +++ /dev/null @@ -1,50 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { escape } from 'vs/base/common/strings'; -import { localize } from 'vs/nls'; - -export default () => ` -
-
-
-

${escape(localize('welcomePage.vscode', "Visual Studio Code"))}

-

- One second to read code with VS Code -

-
-
-
-
-

${escape(localize('welcomePage.help', "Help"))}

- -
-

-
-
-
-

Authentication

-
-
-
-
-
-
-
-

${escape(localize('welcomePage.learn', "Learn"))}

-
-
-
-
-
-
-
-
-
-`; diff --git a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts b/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts deleted file mode 100644 index d7c4495..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.contribution.ts +++ /dev/null @@ -1,62 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { localize } from 'vs/nls'; -import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { WelcomePageContribution, WelcomePageAction, WelcomeInputFactory } from 'vs/workbench/contrib/welcome/page/browser/welcomePage'; -import { IWorkbenchActionRegistry, Extensions as ActionExtensions, CATEGORIES } from 'vs/workbench/common/actions'; -import { SyncActionDescriptor, MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; -import { IEditorInputFactoryRegistry, Extensions as EditorExtensions } from 'vs/workbench/common/editor'; -import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration'; -import product from 'vs/platform/product/common/product'; - -Registry.as(ConfigurationExtensions.Configuration) - .registerConfiguration({ - ...workbenchConfigurationNodeBase, - 'properties': { - 'workbench.startupEditor': { - 'scope': ConfigurationScope.APPLICATION, // Make sure repositories cannot trigger opening a README for tracking. - 'type': 'string', - 'enum': [ - ...['none', 'welcomePage', 'readme', 'newUntitledFile', 'welcomePageInEmptyWorkbench'], - ...(product.quality !== 'stable' - ? ['gettingStarted'] - : []) - ], - 'enumDescriptions': [...[ - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.none' }, "Start without an editor."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page (default)."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.readme' }, "Open the README when opening a folder that contains one, fallback to 'welcomePage' otherwise."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.newUntitledFile' }, "Open a new untitled file (only applies when opening an empty workspace)."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePageInEmptyWorkbench' }, "Open the Welcome page when opening an empty workbench."),], - ...(product.quality !== 'stable' - ? [localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.gettingStarted' }, "Open the Getting Started page (experimental).")] - : []) - ], - 'default': 'readme', - 'description': localize('workbench.startupEditor', "Controls which editor is shown at startup, if none are restored from the previous session.") - }, - } - }); - -Registry.as(WorkbenchExtensions.Workbench) - .registerWorkbenchContribution(WelcomePageContribution, LifecyclePhase.Restored); - -Registry.as(ActionExtensions.WorkbenchActions) - .registerWorkbenchAction(SyncActionDescriptor.from(WelcomePageAction), 'Help: Welcome', CATEGORIES.Help.value); - -Registry.as(EditorExtensions.EditorInputFactories).registerEditorInputFactory(WelcomeInputFactory.ID, WelcomeInputFactory); - -MenuRegistry.appendMenuItem(MenuId.MenubarHelpMenu, { - group: '1_welcome', - command: { - id: 'workbench.action.showWelcomePage', - title: localize({ key: 'miWelcome', comment: ['&& denotes a mnemonic'] }, "&&Welcome") - }, - order: 1 -}); diff --git a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.css b/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.css deleted file mode 100644 index 55834e0..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.css +++ /dev/null @@ -1,277 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -.monaco-workbench .part.editor > .content .welcomePageContainer { - align-items: center; - display: flex; - justify-content: center; - min-width: 100%; - min-height: 100%; -} - -.monaco-workbench .part.editor > .content .welcomePage { - width: 90%; - max-width: 1200px; - font-size: 10px; -} - -.monaco-workbench .part.editor > .content .welcomePage .text-warning { - color: #cca700; -} - -.monaco-workbench .part.editor > .content .welcomePage .text-error { - color: #f48771; -} - -.monaco-workbench .part.editor > .content .welcomePage .text-success { - color: #89d185 -} - -.monaco-workbench .part.editor > .content .welcomePage .refresh-button { - vertical-align: bottom; - cursor: pointer; -} - -.monaco-workbench .part.editor > .content .welcomePage .refresh-button:hover { - color: #3794ff; -} - -.monaco-workbench .part.editor > .content .welcomePage .refresh-button:hover { - color: #3794ff; -} - -.monaco-workbench .part.editor > .content .welcomePage .refresh-button:active { - color: #094771; -} - -.monaco-workbench .part.editor > .content .welcomePage .row { - display: flex; - flex-flow: row; -} - -.monaco-workbench .part.editor > .content .welcomePage .row .section { - overflow: hidden; -} - -.monaco-workbench .part.editor > .content .welcomePage .row .splash { - overflow: hidden; -} - -.monaco-workbench .part.editor > .content .welcomePage .row .commands { - overflow: hidden; -} - -.monaco-workbench .part.editor > .content .welcomePage .row .commands .list { - overflow: hidden; -} - -.monaco-workbench .part.editor > .content .welcomePage p { - font-size: 1.3em; -} - -.monaco-workbench .part.editor > .content .welcomePage .keyboard { - font-family: "Lucida Grande", sans-serif;/* Keyboard shortcuts */ -} - -.monaco-workbench .part.editor > .content .welcomePage a { - text-decoration: none; -} - -.monaco-workbench .part.editor > .content .welcomePage a:focus { - outline: 1px solid -webkit-focus-ring-color; - outline-offset: -1px; -} - -.monaco-workbench .part.editor > .content .welcomePage h1 { - padding: 0; - margin: 0; - border: none; - font-weight: normal; - font-size: 3.6em; - white-space: nowrap; -} - -.monaco-workbench .part.editor > .content .welcomePage .title { - margin-top: 1em; - margin-bottom: 1em; - flex: 1 100%; -} - -.monaco-workbench .part.editor > .content .welcomePage .subtitle { - margin-top: .8em; - font-size: 2.6em; - display: block; -} - -.monaco-workbench.hc-black .part.editor > .content .welcomePage .subtitle { - font-weight: 200; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash, -.monaco-workbench .part.editor > .content .welcomePage .commands { - flex: 1 1 0; -} - -.monaco-workbench .part.editor > .content .welcomePage h2 { - font-weight: 200; - margin-top: 17px; - margin-bottom: 5px; - font-size: 1.9em; - line-height: initial; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash .section { - margin-bottom: 5em; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash ul { - margin: 0; - font-size: 1.3em; - list-style: none; - padding: 0; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash li { - min-width: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.monaco-workbench .part.editor > .content .welcomePage.emptyRecent .splash .recent .list { - display: none; -} -.monaco-workbench .part.editor > .content .welcomePage .splash .recent .none { - display: none; -} -.monaco-workbench .part.editor > .content .welcomePage.emptyRecent .splash .recent .none { - display: initial; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash .recent li.moreRecent { - margin-top: 5px; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash .recent .path { - padding-left: 1em; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash .title, -.monaco-workbench .part.editor > .content .welcomePage .splash .showOnStartup { - min-width: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.monaco-workbench .part.editor > .content .welcomePage .splash .showOnStartup > .checkbox { - vertical-align: bottom; -} - -.monaco-workbench .part.editor > .content .welcomePage .commands .list { - list-style: none; - padding: 0; -} -.monaco-workbench .part.editor > .content .welcomePage .commands .item { - margin: 7px 0px; -} -.monaco-workbench .part.editor > .content .welcomePage .commands .item button { - margin: 1px; - padding: 12px 10px; - width: calc(100% - 2px); - height: 5em; - font-size: 1.3em; - text-align: left; - cursor: pointer; - white-space: nowrap; - font-family: inherit; -} - -.monaco-workbench .part.editor > .content .welcomePage .commands .item button > span { - display: inline-block; - width:100%; - min-width: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.monaco-workbench .part.editor > .content .welcomePage .commands .item button h3 { - font-weight: normal; - font-size: 1em; - margin: 0; - margin-bottom: .25em; - min-width: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.monaco-workbench .part.editor > .content .welcomePage .commands .item button { - border: none; -} - -.monaco-workbench.hc-black .part.editor > .content .welcomePage .commands .item button > h3 { - font-weight: bold; -} - -.monaco-workbench .part.editor > .content .welcomePage .commands .item button:focus { - outline-style: solid; - outline-width: 1px; -} - -.monaco-workbench.hc-black .part.editor > .content .welcomePage .commands .item button { - border-width: 1px; - border-style: solid; -} - -.monaco-workbench.hc-black .part.editor > .content .welcomePage .commands .item button:hover { - outline-width: 1px; - outline-style: dashed; - outline-offset: -5px; -} - -.monaco-workbench .part.editor > .content .welcomePage .commands .item button .enabledExtension { - display: none; -} -.monaco-workbench .part.editor > .content .welcomePage .commands .item button .installExtension.installed { - display: none; -} -.monaco-workbench .part.editor > .content .welcomePage .commands .item button .enabledExtension.installed { - display: inline; -} - -.monaco-workbench .part.editor > .content .welcomePageContainer.max-height-685px .title { - display: none; -} - -.file-icons-enabled .show-file-icons .vs_code_welcome_page-name-file-icon.file-icon::before { - content: ' '; - background-image: url('../../../../browser/media/code-icon.svg'); -} - -.monaco-workbench .part.editor > .content .welcomePage .mac-only, -.monaco-workbench .part.editor > .content .welcomePage .windows-only, -.monaco-workbench .part.editor > .content .welcomePage .linux-only { - display: none; -} -.monaco-workbench.mac .part.editor > .content .welcomePage .mac-only { - display: initial; -} -.monaco-workbench.windows .part.editor > .content .welcomePage .windows-only { - display: initial; -} -.monaco-workbench.linux .part.editor > .content .welcomePage .linux-only { - display: initial; -} -.monaco-workbench.mac .part.editor > .content .welcomePage li.mac-only { - display: list-item; -} -.monaco-workbench.windows .part.editor > .content .welcomePage li.windows-only { - display: list-item; -} -.monaco-workbench.linux .part.editor > .content .welcomePage li.linux-only { - display: list-item; -} diff --git a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts b/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts deleted file mode 100644 index a460117..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts +++ /dev/null @@ -1,796 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./welcomePage'; -import 'vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page'; -import { URI } from 'vs/base/common/uri'; -import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands'; -import * as arrays from 'vs/base/common/arrays'; -import { WalkThroughInput } from 'vs/workbench/contrib/welcome/walkThrough/browser/walkThroughInput'; -import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -import { onUnexpectedError, isPromiseCanceledError } from 'vs/base/common/errors'; -import { IWindowOpenable } from 'vs/platform/windows/common/windows'; -import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; -import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { localize } from 'vs/nls'; -import { Action, WorkbenchActionExecutedEvent, WorkbenchActionExecutedClassification } from 'vs/base/common/actions'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { FileAccess, Schemas } from 'vs/base/common/network'; -import { IBackupFileService } from 'vs/workbench/services/backup/common/backup'; -import { getInstalledExtensions, IExtensionStatus, onExtensionChanged, isKeymapExtension } from 'vs/workbench/contrib/extensions/common/extensionsUtils'; -import { IExtensionManagementService, IExtensionGalleryService, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; -import { IWorkbenchExtensionEnablementService, EnablementState } from 'vs/workbench/services/extensionManagement/common/extensionManagement'; -import { IExtensionRecommendationsService } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations'; -import { ILifecycleService, StartupKind } from 'vs/workbench/services/lifecycle/common/lifecycle'; -import { Disposable } from 'vs/base/common/lifecycle'; -import { splitName } from 'vs/base/common/labels'; -import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; -import { focusBorder, textLinkForeground, textLinkActiveForeground, foreground, descriptionForeground, contrastBorder, activeContrastBorder } from 'vs/platform/theme/common/colorRegistry'; -import { getExtraColor } from 'vs/workbench/contrib/welcome/walkThrough/common/walkThroughUtils'; -import { IExtensionsViewPaneContainer, IExtensionsWorkbenchService, VIEWLET_ID } from 'vs/workbench/contrib/extensions/common/extensions'; -import { IEditorInputFactory, EditorInput } from 'vs/workbench/common/editor'; -import { INotificationService, Severity } from 'vs/platform/notification/common/notification'; -import { TimeoutTimer } from 'vs/base/common/async'; -import { areSameExtensions } from 'vs/platform/extensionManagement/common/extensionManagementUtil'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { IFileService } from 'vs/platform/files/common/files'; -import { joinPath } from 'vs/base/common/resources'; -import { IRecentlyOpened, isRecentWorkspace, IRecentWorkspace, IRecentFolder, isRecentFolder, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { IHostService } from 'vs/workbench/services/host/browser/host'; -import { IProductService } from 'vs/platform/product/common/productService'; -import { IEditorOptions } from 'vs/platform/editor/common/editor'; -import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; -import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; -import { buttonBackground, buttonHoverBackground, welcomePageBackground } from 'vs/workbench/contrib/welcome/page/browser/welcomePageColors'; -import { replaceBrowserUrl } from 'vs/gogs1s/util'; - -const configurationKey = 'workbench.startupEditor'; -const oldConfigurationKey = 'workbench.welcome.enabled'; -const telemetryFrom = 'welcomePage'; - -const getCurrentFileState = (ref: string): { type: string, path: string } => { - const uri = URI.parse(window.location.href); - const [type, ...otherParts] = (uri.path || '').split('/').filter(Boolean).slice(2); - const refAndFilePath = otherParts.join('/'); - if (!['tree', 'blob'].includes(type) || !refAndFilePath.startsWith(ref)) { - return { type: 'tree', path: '/' }; - } - return { type, path: refAndFilePath.slice(ref.length) || '/' }; -}; - -export class WelcomePageContribution implements IWorkbenchContribution { - - constructor( - @IInstantiationService instantiationService: IInstantiationService, - @IConfigurationService configurationService: IConfigurationService, - @IEditorService private editorService: IEditorService, - @IBackupFileService backupFileService: IBackupFileService, - @IFileService fileService: IFileService, - @IWorkspaceContextService contextService: IWorkspaceContextService, - @ILifecycleService lifecycleService: ILifecycleService, - @IWorkbenchLayoutService layoutService: IWorkbenchLayoutService, - @ICommandService private readonly commandService: ICommandService, - ) { - - const enabled = isWelcomePageEnabled(configurationService, contextService); - if (enabled && lifecycleService.startupKind !== StartupKind.ReloadedWindow) { - const activeResource = editorService.activeEditor?.resource; - getCurrentAuthority(commandService).then((authority: string) => { - const fileState = getCurrentFileState(authority.split('+')[2]); - if (fileState.path !== '/' && (!activeResource || activeResource.scheme !== 'gogs1s' || activeResource.path !== fileState.path)) { - const currentFileUri = URI.from({ scheme: 'gogs1s', authority, path: fileState.path }); - fileService.resolve(currentFileUri) - .then(() => this.commandService.executeCommand(fileState.type === 'tree' ? 'revealInExplorer' : 'vscode.open', currentFileUri)) - .then(() => this.registerListeners(), () => this.registerListeners()); - return; - } - backupFileService.hasBackups().then(hasBackups => { - // Open the welcome even if we opened a set of default editors - if ((!editorService.activeEditor || layoutService.openedDefaultEditors) && !hasBackups) { - return Promise.all(contextService.getWorkspace().folders.map(folder => { - const folderUri = folder.uri; - return fileService.resolve(folderUri) - .then(folder => { - const files = folder.children ? folder.children.map(child => child.name).sort() : []; - const file = files.find(file => file.toLowerCase() === 'readme.md') || files.find(file => file.toLowerCase().startsWith('readme')); - - if (file) { - return joinPath(folderUri, file); - } - return undefined; - }, onUnexpectedError); - })).then(arrays.coalesce) - .then(readmes => { - if (!editorService.activeEditor) { - if (readmes.length) { - const isMarkDown = (readme: URI) => readme.path.toLowerCase().endsWith('.md'); - return Promise.all([ - this.commandService.executeCommand('markdown.showPreview', null, readmes.filter(isMarkDown), { locked: true }), - editorService.openEditors(readmes.filter(readme => !isMarkDown(readme)) - .map(readme => ({ resource: readme }))), - ]); - } else { - return instantiationService.createInstance(WelcomePage).openEditor(); - } - } - return undefined; - }); - } - return undefined; - }).then(undefined, onUnexpectedError).then(() => this.registerListeners(), () => this.registerListeners()); - }); - } - } - - private getGitHubFilePathOrEmpty(uri?: URI): string { - if (!uri || !uri.path || uri.scheme !== 'gogs1s') { - return ''; - } - return uri.path.startsWith('/') ? uri.path : `/${uri.path}`; - } - - private doUpdateWindowUrl(): void { - getCurrentAuthority(this.commandService).then(authority => { - const [owner, repo, ref] = authority.split('+'); - const editor = this.editorService.activeEditor; - const filePath = this.getGitHubFilePathOrEmpty(editor?.resource); - // if no file opened and the branch is HEAD current, only retain owner and repo in url - const windowUrl = !filePath && ref.toUpperCase() === 'HEAD' - ? `/${owner}/${repo}` - : `/${owner}/${repo}/${filePath ? 'blob' : 'tree'}/${ref}${filePath}`; - replaceBrowserUrl(windowUrl); - }); - } - - private registerListeners() { - this.editorService.onDidActiveEditorChange(() => this.doUpdateWindowUrl()); - } -} - -function isWelcomePageEnabled(configurationService: IConfigurationService, contextService: IWorkspaceContextService) { - const startupEditor = configurationService.inspect(configurationKey); - if (!startupEditor.userValue && !startupEditor.workspaceValue) { - const welcomeEnabled = configurationService.inspect(oldConfigurationKey); - if (welcomeEnabled.value !== undefined && welcomeEnabled.value !== null) { - return welcomeEnabled.value; - } - } - return startupEditor.value === 'welcomePage' || startupEditor.value === 'gettingStarted' || startupEditor.value === 'readme' || startupEditor.value === 'welcomePageInEmptyWorkbench' && contextService.getWorkbenchState() === WorkbenchState.EMPTY; -} - -function getCurrentAuthority(commandService: ICommandService): Promise { - return commandService.executeCommand('gogs1s.get-current-authority') as Promise; -} - -export class WelcomePageAction extends Action { - - public static readonly ID = 'workbench.action.showWelcomePage'; - public static readonly LABEL = localize('welcomePage', "Welcome"); - - constructor( - id: string, - label: string, - @IInstantiationService private readonly instantiationService: IInstantiationService - ) { - super(id, label); - } - - public run(): Promise { - return this.instantiationService.createInstance(WelcomePage) - .openEditor() - .then(() => undefined); - } -} - -interface ExtensionSuggestion { - name: string; - title?: string; - id: string; - isKeymap?: boolean; - isCommand?: boolean; -} - -const extensionPacks: ExtensionSuggestion[] = [ - { name: localize('welcomePage.javaScript', "JavaScript"), id: 'dbaeumer.vscode-eslint' }, - { name: localize('welcomePage.python', "Python"), id: 'ms-python.python' }, - { name: localize('welcomePage.java', "Java"), id: 'vscjava.vscode-java-pack' }, - { name: localize('welcomePage.php', "PHP"), id: 'felixfbecker.php-pack' }, - { name: localize('welcomePage.azure', "Azure"), title: localize('welcomePage.showAzureExtensions', "Show Azure extensions"), id: 'workbench.extensions.action.showAzureExtensions', isCommand: true }, - { name: localize('welcomePage.docker', "Docker"), id: 'ms-azuretools.vscode-docker' }, -]; - -const keymapExtensions: ExtensionSuggestion[] = [ - { name: localize('welcomePage.vim', "Vim"), id: 'vscodevim.vim', isKeymap: true }, - { name: localize('welcomePage.sublime', "Sublime"), id: 'ms-vscode.sublime-keybindings', isKeymap: true }, - { name: localize('welcomePage.atom', "Atom"), id: 'ms-vscode.atom-keybindings', isKeymap: true }, -]; - -interface Strings { - installEvent: string; - installedEvent: string; - detailsEvent: string; - - alreadyInstalled: string; - reloadAfterInstall: string; - installing: string; - extensionNotFound: string; -} - -/* __GDPR__ - "installExtension" : { - "${include}": [ - "${WelcomePageInstall-1}" - ] - } -*/ -/* __GDPR__ - "installedExtension" : { - "${include}": [ - "${WelcomePageInstalled-1}", - "${WelcomePageInstalled-2}", - "${WelcomePageInstalled-3}", - "${WelcomePageInstalled-4}", - "${WelcomePageInstalled-6}" - ] - } -*/ -/* __GDPR__ - "detailsExtension" : { - "${include}": [ - "${WelcomePageDetails-1}" - ] - } -*/ -const extensionPackStrings: Strings = { - installEvent: 'installExtension', - installedEvent: 'installedExtension', - detailsEvent: 'detailsExtension', - - alreadyInstalled: localize('welcomePage.extensionPackAlreadyInstalled', "Support for {0} is already installed."), - reloadAfterInstall: localize('welcomePage.willReloadAfterInstallingExtensionPack', "The window will reload after installing additional support for {0}."), - installing: localize('welcomePage.installingExtensionPack', "Installing additional support for {0}..."), - extensionNotFound: localize('welcomePage.extensionPackNotFound', "Support for {0} with id {1} could not be found."), -}; - -CommandsRegistry.registerCommand('workbench.extensions.action.showAzureExtensions', accessor => { - const viewletService = accessor.get(IViewletService); - return viewletService.openViewlet(VIEWLET_ID, true) - .then(viewlet => viewlet?.getViewPaneContainer() as IExtensionsViewPaneContainer) - .then(viewlet => { - viewlet.search('@sort:installs azure '); - viewlet.focus(); - }); -}); - -/* __GDPR__ - "installKeymap" : { - "${include}": [ - "${WelcomePageInstall-1}" - ] - } -*/ -/* __GDPR__ - "installedKeymap" : { - "${include}": [ - "${WelcomePageInstalled-1}", - "${WelcomePageInstalled-2}", - "${WelcomePageInstalled-3}", - "${WelcomePageInstalled-4}", - "${WelcomePageInstalled-6}" - ] - } -*/ -/* __GDPR__ - "detailsKeymap" : { - "${include}": [ - "${WelcomePageDetails-1}" - ] - } -*/ -const keymapStrings: Strings = { - installEvent: 'installKeymap', - installedEvent: 'installedKeymap', - detailsEvent: 'detailsKeymap', - - alreadyInstalled: localize('welcomePage.keymapAlreadyInstalled', "The {0} keyboard shortcuts are already installed."), - reloadAfterInstall: localize('welcomePage.willReloadAfterInstallingKeymap', "The window will reload after installing the {0} keyboard shortcuts."), - installing: localize('welcomePage.installingKeymap', "Installing the {0} keyboard shortcuts..."), - extensionNotFound: localize('welcomePage.keymapNotFound', "The {0} keyboard shortcuts with id {1} could not be found."), -}; - -const welcomeInputTypeId = 'workbench.editors.welcomePageInput'; - -class WelcomePage extends Disposable { - - readonly editorInput: WalkThroughInput; - - constructor( - @IEditorService private readonly editorService: IEditorService, - @IInstantiationService private readonly instantiationService: IInstantiationService, - @IWorkspacesService private readonly workspacesService: IWorkspacesService, - @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, - @IConfigurationService private readonly configurationService: IConfigurationService, - @ILabelService private readonly labelService: ILabelService, - @INotificationService private readonly notificationService: INotificationService, - @IWorkbenchExtensionEnablementService private readonly extensionEnablementService: IWorkbenchExtensionEnablementService, - @IExtensionGalleryService private readonly extensionGalleryService: IExtensionGalleryService, - @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, - @IExtensionRecommendationsService private readonly tipsService: IExtensionRecommendationsService, - @IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService, - @ILifecycleService lifecycleService: ILifecycleService, - @ITelemetryService private readonly telemetryService: ITelemetryService, - @IHostService private readonly hostService: IHostService, - @IProductService private readonly productService: IProductService, - @ICommandService private readonly commandService: ICommandService, - ) { - super(); - this._register(lifecycleService.onShutdown(() => this.dispose())); - - const gitHubTokenStatus = this.getGitHubTokenStatus(); - const recentlyOpened = this.workspacesService.getRecentlyOpened(); - const installedExtensions = this.instantiationService.invokeFunction(getInstalledExtensions); - const resource = FileAccess.asBrowserUri('./vs_code_welcome_page', require) - .with({ - scheme: Schemas.walkThrough, - query: JSON.stringify({ moduleId: 'vs/workbench/contrib/welcome/page/browser/vs_code_welcome_page' }) - }); - this.editorInput = this.instantiationService.createInstance(WalkThroughInput, { - typeId: welcomeInputTypeId, - name: localize('welcome.title', "Welcome"), - resource, - telemetryFrom, - onReady: (container: HTMLElement) => this.onReady(container, recentlyOpened, installedExtensions, gitHubTokenStatus) - }); - } - - public openEditor(options: IEditorOptions = { pinned: false }) { - return this.editorService.openEditor(this.editorInput, options); - } - - private onReady(container: HTMLElement, recentlyOpened: Promise, installedExtensions: Promise, gitHubTokenStatus: Promise): void { - const enabled = isWelcomePageEnabled(this.configurationService, this.contextService); - const showOnStartup = container.querySelector('#showOnStartup'); - if (enabled) { - showOnStartup.setAttribute('checked', 'checked'); - } - showOnStartup.addEventListener('click', e => { - this.configurationService.updateValue(configurationKey, showOnStartup.checked ? 'welcomePage' : 'newUntitledFile'); - }); - - const prodName = container.querySelector('.welcomePage .title .caption') as HTMLElement; - if (prodName) { - prodName.textContent = this.productService.nameLong; - } - - gitHubTokenStatus.then(tokenStatus => this.doUpdateGitHubTokenStatus(container, tokenStatus)); - this.registerGogs1sListeners(container);//增加监听 - - recentlyOpened.then(({ workspaces }) => { - // Filter out the current workspace - workspaces = workspaces.filter(recent => !this.contextService.isCurrentWorkspace(isRecentWorkspace(recent) ? recent.workspace : recent.folderUri)); - if (!workspaces.length) { - const recent = container.querySelector('.welcomePage') as HTMLElement; - recent.classList.add('emptyRecent'); - return; - } - const ul = container.querySelector('.recent ul'); - if (!ul) { - return; - } - const moreRecent = ul.querySelector('.moreRecent')!; - const workspacesToShow = workspaces.slice(0, 5); - const updateEntries = () => { - const listEntries = this.createListEntries(workspacesToShow); - while (ul.firstChild) { - ul.removeChild(ul.firstChild); - } - ul.append(...listEntries, moreRecent); - }; - updateEntries(); - this._register(this.labelService.onDidChangeFormatters(updateEntries)); - }).then(undefined, onUnexpectedError); - - this.addExtensionList(container, '.extensionPackList', extensionPacks, extensionPackStrings); - this.addExtensionList(container, '.keymapList', keymapExtensions, keymapStrings); - - this.updateInstalledExtensions(container, installedExtensions); - this._register(this.instantiationService.invokeFunction(onExtensionChanged)(ids => { - for (const id of ids) { - if (container.querySelector(`.installExtension[data-extension="${id.id}"], .enabledExtension[data-extension="${id.id}"]`)) { - const installedExtensions = this.instantiationService.invokeFunction(getInstalledExtensions); - this.updateInstalledExtensions(container, installedExtensions); - break; - } - } - })); - } - - registerGogs1sListeners(container: HTMLElement) { - container.querySelector('.refresh-button')?.addEventListener('click', () => this.refreshGitHubTokenStatus(container)); - container.querySelector('.create-new-token')?.addEventListener('click', () => window?.open('https://git.yoqi.me/user/settings/applications')); - container.querySelector('.update-oauth-token')?.addEventListener('click', () => this.commandService.executeCommand('gogs1s.update-token').then(() => this.refreshGitHubTokenStatus(container))); - container.querySelector('.clear-oauth-token')?.addEventListener('click', () => this.commandService.executeCommand('gogs1s.clear-token').then(() => this.refreshGitHubTokenStatus(container))); - } - - updateElementText(element: HTMLElement, text: string | number, type?: 'SUCCESS' | 'WARNING' | 'ERROR') { - if (!element) { - return; - } - element.innerText = `${text}`; - element.classList.remove('text-warning', 'text-error', 'text-success'); - if (type === 'SUCCESS') { - element.classList.add('text-success'); - } else if (type === 'WARNING') { - element.classList.add('text-warning'); - } else if (type === 'ERROR') { - element.classList.add('text-error'); - } - } - - getGitHubTokenStatus() { - return this.commandService.executeCommand('gogs1s.validate-token', true); - } - - refreshGitHubTokenStatus(container: HTMLElement) { - const statusElement = container.querySelector('.rate-limit-status'); - this.updateElementText(statusElement, ''); - this.getGitHubTokenStatus().then(tokenStatus => { - this.doUpdateGitHubTokenStatus(container, tokenStatus); - }); - } - - doUpdateGitHubTokenStatus(container: HTMLElement, tokenStatus?: any) { - const statusElement = container.querySelector('.rate-limit-status'); - const limitElement = container.querySelector('.x-rate-limit-limit'); - const remainingElement = container.querySelector('.x-rate-limit-remaining'); - const resetElement = container.querySelector('.x-rate-limit-reset'); - const timerElement = container.querySelector('.rate-limit-reset-seconds'); - - if (!tokenStatus) { - this.updateElementText(statusElement, 'Unknown', 'WARNING'); - this.updateElementText(limitElement, 'Unknown', 'WARNING'); - this.updateElementText(remainingElement, 'Unknown', 'WARNING'); - this.updateElementText(resetElement, 'Unknown'); - this.updateElementText(timerElement, 'Unknown', 'WARNING'); - return; - } - - const textType = (value: number) => { - if (value <= 0) { - return 'ERROR'; - } - if (value > 99) { - return 'SUCCESS'; - } - return 'WARNING'; - }; - this.updateElementText(limitElement, tokenStatus.limit, textType(+tokenStatus.limit)); - this.updateElementText(remainingElement, tokenStatus.remaining, textType(+tokenStatus.remaining)); - this.updateElementText(resetElement, tokenStatus.reset); - this.updateElementText(timerElement, Math.max(tokenStatus.reset - Math.ceil(Date.now() / 1000), 0)); - - if (!tokenStatus.token) { - this.updateElementText(statusElement, 'Unauthorized', 'WARNING'); - return; - } - if (tokenStatus.valid) { - this.updateElementText(statusElement, 'Authorized', 'SUCCESS'); - return; - } - this.updateElementText(statusElement, 'Invalid Token', 'ERROR'); - } - - private createListEntries(recents: (IRecentWorkspace | IRecentFolder)[]) { - return recents.map(recent => { - let fullPath: string; - let windowOpenable: IWindowOpenable; - if (isRecentFolder(recent)) { - windowOpenable = { folderUri: recent.folderUri }; - fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.folderUri, { verbose: true }); - } else { - fullPath = recent.label || this.labelService.getWorkspaceLabel(recent.workspace, { verbose: true }); - windowOpenable = { workspaceUri: recent.workspace.configPath }; - } - - const { name, parentPath } = splitName(fullPath); - - const li = document.createElement('li'); - const a = document.createElement('a'); - - a.innerText = name; - a.title = fullPath; - a.setAttribute('aria-label', localize('welcomePage.openFolderWithPath', "Open folder {0} with path {1}", name, parentPath)); - a.href = 'javascript:void(0)'; - a.addEventListener('click', e => { - this.telemetryService.publicLog2('workbenchActionExecuted', { - id: 'openRecentFolder', - from: telemetryFrom - }); - this.hostService.openWindow([windowOpenable], { forceNewWindow: e.ctrlKey || e.metaKey }); - e.preventDefault(); - e.stopPropagation(); - }); - li.appendChild(a); - - const span = document.createElement('span'); - span.classList.add('path'); - span.classList.add('detail'); - span.innerText = parentPath; - span.title = fullPath; - li.appendChild(span); - - return li; - }); - } - - private addExtensionList(container: HTMLElement, listSelector: string, suggestions: ExtensionSuggestion[], strings: Strings) { - const list = container.querySelector(listSelector); - if (list) { - suggestions.forEach((extension, i) => { - if (i) { - list.appendChild(document.createTextNode(localize('welcomePage.extensionListSeparator', ", "))); - } - - const a = document.createElement('a'); - a.innerText = extension.name; - a.title = extension.title || (extension.isKeymap ? localize('welcomePage.installKeymap', "Install {0} keymap", extension.name) : localize('welcomePage.installExtensionPack', "Install additional support for {0}", extension.name)); - if (extension.isCommand) { - a.href = `command:${extension.id}`; - list.appendChild(a); - } else { - a.classList.add('installExtension'); - a.setAttribute('data-extension', extension.id); - a.href = 'javascript:void(0)'; - a.addEventListener('click', e => { - this.installExtension(extension, strings); - e.preventDefault(); - e.stopPropagation(); - }); - list.appendChild(a); - - const span = document.createElement('span'); - span.innerText = extension.name; - span.title = extension.isKeymap ? localize('welcomePage.installedKeymap', "{0} keymap is already installed", extension.name) : localize('welcomePage.installedExtensionPack', "{0} support is already installed", extension.name); - span.classList.add('enabledExtension'); - span.setAttribute('data-extension', extension.id); - list.appendChild(span); - } - }); - } - } - - private installExtension(extensionSuggestion: ExtensionSuggestion, strings: Strings): void { - /* __GDPR__FRAGMENT__ - "WelcomePageInstall-1" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - }); - this.instantiationService.invokeFunction(getInstalledExtensions).then(extensions => { - const installedExtension = extensions.find(extension => areSameExtensions(extension.identifier, { id: extensionSuggestion.id })); - if (installedExtension && installedExtension.globallyEnabled) { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-1" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: 'already_enabled', - }); - this.notificationService.info(strings.alreadyInstalled.replace('{0}', extensionSuggestion.name)); - return; - } - const foundAndInstalled = installedExtension ? Promise.resolve(installedExtension.local) : this.extensionGalleryService.query({ names: [extensionSuggestion.id], source: telemetryFrom }, CancellationToken.None) - .then((result): null | Promise => { - const [extension] = result.firstPage; - if (!extension) { - return null; - } - return this.extensionManagementService.installFromGallery(extension) - .then(() => this.extensionManagementService.getInstalled()) - .then(installed => { - const local = installed.filter(i => areSameExtensions(extension.identifier, i.identifier))[0]; - // TODO: Do this as part of the install to avoid multiple events. - return this.extensionEnablementService.setEnablement([local], EnablementState.DisabledGlobally).then(() => local); - }); - }); - - this.notificationService.prompt( - Severity.Info, - strings.reloadAfterInstall.replace('{0}', extensionSuggestion.name), - [{ - label: localize('ok', "OK"), - run: () => { - const messageDelay = new TimeoutTimer(); - messageDelay.cancelAndSet(() => { - this.notificationService.info(strings.installing.replace('{0}', extensionSuggestion.name)); - }, 300); - const extensionsToDisable = extensions.filter(extension => isKeymapExtension(this.tipsService, extension) && extension.globallyEnabled).map(extension => extension.local); - extensionsToDisable.length ? this.extensionEnablementService.setEnablement(extensionsToDisable, EnablementState.DisabledGlobally) : Promise.resolve() - .then(() => { - return foundAndInstalled.then(foundExtension => { - messageDelay.cancel(); - if (foundExtension) { - return this.extensionEnablementService.setEnablement([foundExtension], EnablementState.EnabledGlobally) - .then(() => { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-2" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: installedExtension ? 'enabled' : 'installed', - }); - return this.hostService.reload(); - }); - } else { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-3" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: 'not_found', - }); - this.notificationService.error(strings.extensionNotFound.replace('{0}', extensionSuggestion.name).replace('{1}', extensionSuggestion.id)); - return undefined; - } - }); - }).then(undefined, err => { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-4" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: isPromiseCanceledError(err) ? 'canceled' : 'error', - }); - this.notificationService.error(err); - }); - } - }, { - label: localize('details', "Details"), - run: () => { - /* __GDPR__FRAGMENT__ - "WelcomePageDetails-1" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.detailsEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - }); - this.extensionsWorkbenchService.queryGallery({ names: [extensionSuggestion.id] }, CancellationToken.None) - .then(result => this.extensionsWorkbenchService.open(result.firstPage[0])) - .then(undefined, onUnexpectedError); - } - }] - ); - }).then(undefined, err => { - /* __GDPR__FRAGMENT__ - "WelcomePageInstalled-6" : { - "from" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "extensionId": { "classification": "SystemMetaData", "purpose": "FeatureInsight" }, - "outcome": { "classification": "SystemMetaData", "purpose": "FeatureInsight" } - } - */ - this.telemetryService.publicLog(strings.installedEvent, { - from: telemetryFrom, - extensionId: extensionSuggestion.id, - outcome: isPromiseCanceledError(err) ? 'canceled' : 'error', - }); - this.notificationService.error(err); - }); - } - - private updateInstalledExtensions(container: HTMLElement, installedExtensions: Promise) { - installedExtensions.then(extensions => { - const elements = container.querySelectorAll('.installExtension, .enabledExtension'); - for (let i = 0; i < elements.length; i++) { - elements[i].classList.remove('installed'); - } - extensions.filter(ext => ext.globallyEnabled) - .map(ext => ext.identifier.id) - .forEach(id => { - const install = container.querySelectorAll(`.installExtension[data-extension="${id}"]`); - for (let i = 0; i < install.length; i++) { - install[i].classList.add('installed'); - } - const enabled = container.querySelectorAll(`.enabledExtension[data-extension="${id}"]`); - for (let i = 0; i < enabled.length; i++) { - enabled[i].classList.add('installed'); - } - }); - }).then(undefined, onUnexpectedError); - } -} - -export class WelcomeInputFactory implements IEditorInputFactory { - - static readonly ID = welcomeInputTypeId; - - public canSerialize(editorInput: EditorInput): boolean { - return true; - } - - public serialize(editorInput: EditorInput): string { - return '{}'; - } - - public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): WalkThroughInput { - return instantiationService.createInstance(WelcomePage) - .editorInput; - } -} - -// theming - -registerThemingParticipant((theme, collector) => { - const backgroundColor = theme.getColor(welcomePageBackground); - if (backgroundColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePageContainer { background-color: ${backgroundColor}; }`); - } - const foregroundColor = theme.getColor(foreground); - if (foregroundColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .caption { color: ${foregroundColor}; }`); - } - const descriptionColor = theme.getColor(descriptionForeground); - if (descriptionColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .detail { color: ${descriptionColor}; }`); - } - const buttonColor = getExtraColor(theme, buttonBackground, { dark: 'rgba(0, 0, 0, .2)', extra_dark: 'rgba(200, 235, 255, .042)', light: 'rgba(0,0,0,.04)', hc: 'black' }); - if (buttonColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button { background: ${buttonColor}; }`); - } - const buttonHoverColor = getExtraColor(theme, buttonHoverBackground, { dark: 'rgba(200, 235, 255, .072)', extra_dark: 'rgba(200, 235, 255, .072)', light: 'rgba(0,0,0,.10)', hc: null }); - if (buttonHoverColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button:hover { background: ${buttonHoverColor}; }`); - } - const link = theme.getColor(textLinkForeground); - if (link) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage a { color: ${link}; }`); - } - const activeLink = theme.getColor(textLinkActiveForeground); - if (activeLink) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage a:hover, - .monaco-workbench .part.editor > .content .welcomePage a:active { color: ${activeLink}; }`); - } - const focusColor = theme.getColor(focusBorder); - if (focusColor) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage a:focus { outline-color: ${focusColor}; }`); - } - const border = theme.getColor(contrastBorder); - if (border) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button { border-color: ${border}; }`); - } - const activeBorder = theme.getColor(activeContrastBorder); - if (activeBorder) { - collector.addRule(`.monaco-workbench .part.editor > .content .welcomePage .commands .item button:hover { outline-color: ${activeBorder}; }`); - } -}); diff --git a/vscode-web-gogs1s/src/vs/workbench/services/themes/common/themeConfiguration.ts b/vscode-web-gogs1s/src/vs/workbench/services/themes/common/themeConfiguration.ts deleted file mode 100644 index f681f76..0000000 --- a/vscode-web-gogs1s/src/vs/workbench/services/themes/common/themeConfiguration.ts +++ /dev/null @@ -1,351 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as nls from 'vs/nls'; -import * as types from 'vs/base/common/types'; -import { Registry } from 'vs/platform/registry/common/platform'; -import { IConfigurationRegistry, Extensions as ConfigurationExtensions, IConfigurationPropertySchema, IConfigurationNode, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; - -import { IJSONSchema } from 'vs/base/common/jsonSchema'; -import { textmateColorsSchemaId, textmateColorGroupSchemaId } from 'vs/workbench/services/themes/common/colorThemeSchema'; -import { workbenchColorsSchemaId } from 'vs/platform/theme/common/colorRegistry'; -import { tokenStylingSchemaId } from 'vs/platform/theme/common/tokenClassificationRegistry'; -import { ThemeSettings, IWorkbenchColorTheme, IWorkbenchFileIconTheme, IColorCustomizations, ITokenColorCustomizations, IWorkbenchProductIconTheme, ISemanticTokenColorCustomizations, IExperimentalSemanticTokenColorCustomizations } from 'vs/workbench/services/themes/common/workbenchThemeService'; -import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; -// modify-by-github1s, default dark theme -import { isMacintosh, isWindows } from 'vs/base/common/platform'; - -const DEFAULT_THEME_DARK_SETTING_VALUE = 'Default Dark+'; -const DEFAULT_THEME_LIGHT_SETTING_VALUE = 'Default Light+'; -const DEFAULT_THEME_HC_SETTING_VALUE = 'Default High Contrast'; - -const DEFAULT_FILE_ICON_THEME_SETTING_VALUE = 'vs-seti'; - -export const DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE = 'Default'; - -// Configuration: Themes -const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); - -const colorThemeSettingEnum: string[] = []; -const colorThemeSettingEnumItemLabels: string[] = []; -const colorThemeSettingEnumDescriptions: string[] = []; - -const colorThemeSettingSchema: IConfigurationPropertySchema = { - type: 'string', - description: nls.localize('colorTheme', "Specifies the color theme used in the workbench."), - // modify-by-github1s, default dark theme - default: DEFAULT_THEME_DARK_SETTING_VALUE, - enum: colorThemeSettingEnum, - enumDescriptions: colorThemeSettingEnumDescriptions, - enumItemLabels: colorThemeSettingEnumItemLabels, - errorMessage: nls.localize('colorThemeError', "Theme is unknown or not installed."), -}; -const preferredDarkThemeSettingSchema: IConfigurationPropertySchema = { - type: 'string', // - markdownDescription: nls.localize({ key: 'preferredDarkColorTheme', comment: ['`#{0}#` will become a link to an other setting. Do not remove backtick or #'] }, 'Specifies the preferred color theme for dark OS appearance when `#{0}#` is enabled.', ThemeSettings.DETECT_COLOR_SCHEME), - default: DEFAULT_THEME_DARK_SETTING_VALUE, - enum: colorThemeSettingEnum, - enumDescriptions: colorThemeSettingEnumDescriptions, - enumItemLabels: colorThemeSettingEnumItemLabels, - errorMessage: nls.localize('colorThemeError', "Theme is unknown or not installed."), -}; -const preferredLightThemeSettingSchema: IConfigurationPropertySchema = { - type: 'string', - markdownDescription: nls.localize({ key: 'preferredLightColorTheme', comment: ['`#{0}#` will become a link to an other setting. Do not remove backtick or #'] }, 'Specifies the preferred color theme for light OS appearance when `#{0}#` is enabled.', ThemeSettings.DETECT_COLOR_SCHEME), - default: DEFAULT_THEME_LIGHT_SETTING_VALUE, - enum: colorThemeSettingEnum, - enumDescriptions: colorThemeSettingEnumDescriptions, - enumItemLabels: colorThemeSettingEnumItemLabels, - errorMessage: nls.localize('colorThemeError', "Theme is unknown or not installed."), -}; -const preferredHCThemeSettingSchema: IConfigurationPropertySchema = { - type: 'string', - markdownDescription: nls.localize({ key: 'preferredHCColorTheme', comment: ['`#{0}#` will become a link to an other setting. Do not remove backtick or #'] }, 'Specifies the preferred color theme used in high contrast mode when `#{0}#` is enabled.', ThemeSettings.DETECT_HC), - default: DEFAULT_THEME_HC_SETTING_VALUE, - enum: colorThemeSettingEnum, - enumDescriptions: colorThemeSettingEnumDescriptions, - enumItemLabels: colorThemeSettingEnumItemLabels, - included: isWindows || isMacintosh, - errorMessage: nls.localize('colorThemeError', "Theme is unknown or not installed."), -}; -const detectColorSchemeSettingSchema: IConfigurationPropertySchema = { - type: 'boolean', - description: nls.localize('detectColorScheme', 'If set, automatically switch to the preferred color theme based on the OS appearance.'), - default: false -}; - -const colorCustomizationsSchema: IConfigurationPropertySchema = { - type: 'object', - description: nls.localize('workbenchColors', "Overrides colors from the currently selected color theme."), - allOf: [{ $ref: workbenchColorsSchemaId }], - default: {}, - defaultSnippets: [{ - body: { - } - }] -}; -const fileIconThemeSettingSchema: IConfigurationPropertySchema = { - type: ['string', 'null'], - default: DEFAULT_FILE_ICON_THEME_SETTING_VALUE, - description: nls.localize('iconTheme', "Specifies the file icon theme used in the workbench or 'null' to not show any file icons."), - enum: [null], - enumItemLabels: [nls.localize('noIconThemeLabel', 'None')], - enumDescriptions: [nls.localize('noIconThemeDesc', 'No file icons')], - errorMessage: nls.localize('iconThemeError', "File icon theme is unknown or not installed.") -}; -const productIconThemeSettingSchema: IConfigurationPropertySchema = { - type: ['string', 'null'], - default: DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE, - description: nls.localize('productIconTheme', "Specifies the product icon theme used."), - enum: [DEFAULT_PRODUCT_ICON_THEME_SETTING_VALUE], - enumItemLabels: [nls.localize('defaultProductIconThemeLabel', 'Default')], - enumDescriptions: [nls.localize('defaultProductIconThemeDesc', 'Default')], - errorMessage: nls.localize('productIconThemeError', "Product icon theme is unknown or not installed.") -}; - -const detectHCSchemeSettingSchema: IConfigurationPropertySchema = { - type: 'boolean', - default: true, - description: nls.localize('autoDetectHighContrast', "If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme."), - scope: ConfigurationScope.APPLICATION -}; - -const themeSettingsConfiguration: IConfigurationNode = { - id: 'workbench', - order: 7.1, - type: 'object', - properties: { - [ThemeSettings.COLOR_THEME]: colorThemeSettingSchema, - [ThemeSettings.PREFERRED_DARK_THEME]: preferredDarkThemeSettingSchema, - [ThemeSettings.PREFERRED_LIGHT_THEME]: preferredLightThemeSettingSchema, - [ThemeSettings.PREFERRED_HC_THEME]: preferredHCThemeSettingSchema, - [ThemeSettings.FILE_ICON_THEME]: fileIconThemeSettingSchema, - [ThemeSettings.COLOR_CUSTOMIZATIONS]: colorCustomizationsSchema, - [ThemeSettings.PRODUCT_ICON_THEME]: productIconThemeSettingSchema - } -}; -configurationRegistry.registerConfiguration(themeSettingsConfiguration); - -const themeSettingsWindowConfiguration: IConfigurationNode = { - id: 'window', - order: 8.1, - type: 'object', - properties: { - [ThemeSettings.DETECT_HC]: detectHCSchemeSettingSchema, - [ThemeSettings.DETECT_COLOR_SCHEME]: detectColorSchemeSettingSchema, - } -}; -configurationRegistry.registerConfiguration(themeSettingsWindowConfiguration); - -function tokenGroupSettings(description: string): IJSONSchema { - return { - description, - $ref: textmateColorGroupSchemaId - }; -} - -const tokenColorSchema: IJSONSchema = { - properties: { - comments: tokenGroupSettings(nls.localize('editorColors.comments', "Sets the colors and styles for comments")), - strings: tokenGroupSettings(nls.localize('editorColors.strings', "Sets the colors and styles for strings literals.")), - keywords: tokenGroupSettings(nls.localize('editorColors.keywords', "Sets the colors and styles for keywords.")), - numbers: tokenGroupSettings(nls.localize('editorColors.numbers', "Sets the colors and styles for number literals.")), - types: tokenGroupSettings(nls.localize('editorColors.types', "Sets the colors and styles for type declarations and references.")), - functions: tokenGroupSettings(nls.localize('editorColors.functions', "Sets the colors and styles for functions declarations and references.")), - variables: tokenGroupSettings(nls.localize('editorColors.variables', "Sets the colors and styles for variables declarations and references.")), - textMateRules: { - description: nls.localize('editorColors.textMateRules', 'Sets colors and styles using textmate theming rules (advanced).'), - $ref: textmateColorsSchemaId - }, - semanticHighlighting: { - description: nls.localize('editorColors.semanticHighlighting', 'Whether semantic highlighting should be enabled for this theme.'), - deprecationMessage: nls.localize('editorColors.semanticHighlighting.deprecationMessage', 'Use `enabled` in `editor.semanticTokenColorCustomizations` setting instead.'), - markdownDeprecationMessage: nls.localize('editorColors.semanticHighlighting.deprecationMessageMarkdown', 'Use `enabled` in `#editor.semanticTokenColorCustomizations#` setting instead.'), - type: 'boolean' - } - } -}; - -const tokenColorCustomizationSchema: IConfigurationPropertySchema = { - description: nls.localize('editorColors', "Overrides editor syntax colors and font style from the currently selected color theme."), - default: {}, - allOf: [tokenColorSchema] -}; - -const semanticTokenColorSchema: IJSONSchema = { - type: 'object', - properties: { - enabled: { - type: 'boolean', - description: nls.localize('editorColors.semanticHighlighting.enabled', 'Whether semantic highlighting is enabled or disabled for this theme'), - suggestSortText: '0_enabled' - }, - rules: { - $ref: tokenStylingSchemaId, - description: nls.localize('editorColors.semanticHighlighting.rules', 'Semantic token styling rules for this theme.'), - suggestSortText: '0_rules' - } - }, - additionalProperties: false -}; - -const semanticTokenColorCustomizationSchema: IConfigurationPropertySchema = { - description: nls.localize('semanticTokenColors', "Overrides editor semantic token color and styles from the currently selected color theme."), - default: {}, - allOf: [{ ...semanticTokenColorSchema, patternProperties: { '^\\[': {} } }] -}; - -const experimentalTokenStylingCustomizationSchema: IConfigurationPropertySchema = { - deprecationMessage: nls.localize('editorColors.experimentalTokenStyling.deprecationMessage', 'Use `editor.semanticTokenColorCustomizations` instead.'), - markdownDeprecationMessage: nls.localize('editorColors.experimentalTokenStyling.deprecationMessageMarkdown', 'Use `#editor.semanticTokenColorCustomizations#` instead.'), - default: {}, - allOf: [{ $ref: tokenStylingSchemaId }], -}; -const tokenColorCustomizationConfiguration: IConfigurationNode = { - id: 'editor', - order: 7.2, - type: 'object', - properties: { - [ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS]: tokenColorCustomizationSchema, - [ThemeSettings.SEMANTIC_TOKEN_COLOR_CUSTOMIZATIONS]: semanticTokenColorCustomizationSchema, - [ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS_EXPERIMENTAL]: experimentalTokenStylingCustomizationSchema - } -}; - -configurationRegistry.registerConfiguration(tokenColorCustomizationConfiguration); - -export function updateColorThemeConfigurationSchemas(themes: IWorkbenchColorTheme[]) { - // updates enum for the 'workbench.colorTheme` setting - colorThemeSettingEnum.splice(0, colorThemeSettingEnum.length, ...themes.map(t => t.settingsId)); - colorThemeSettingEnumDescriptions.splice(0, colorThemeSettingEnumDescriptions.length, ...themes.map(t => t.description || '')); - colorThemeSettingEnumItemLabels.splice(0, colorThemeSettingEnumItemLabels.length, ...themes.map(t => t.label || '')); - - const themeSpecificWorkbenchColors: IJSONSchema = { properties: {} }; - const themeSpecificTokenColors: IJSONSchema = { properties: {} }; - const themeSpecificSemanticTokenColors: IJSONSchema = { properties: {} }; - const experimentalThemeSpecificSemanticTokenColors: IJSONSchema = { properties: {} }; - - const workbenchColors = { $ref: workbenchColorsSchemaId, additionalProperties: false }; - const tokenColors = { properties: tokenColorSchema.properties, additionalProperties: false }; - for (let t of themes) { - // add theme specific color customization ("[Abyss]":{ ... }) - const themeId = `[${t.settingsId}]`; - themeSpecificWorkbenchColors.properties![themeId] = workbenchColors; - themeSpecificTokenColors.properties![themeId] = tokenColors; - themeSpecificSemanticTokenColors.properties![themeId] = semanticTokenColorSchema; - experimentalThemeSpecificSemanticTokenColors.properties![themeId] = { $ref: tokenStylingSchemaId, additionalProperties: false }; - } - - colorCustomizationsSchema.allOf![1] = themeSpecificWorkbenchColors; - tokenColorCustomizationSchema.allOf![1] = themeSpecificTokenColors; - semanticTokenColorCustomizationSchema.allOf![1] = themeSpecificSemanticTokenColors; - experimentalTokenStylingCustomizationSchema.allOf![1] = experimentalThemeSpecificSemanticTokenColors; - - configurationRegistry.notifyConfigurationSchemaUpdated(themeSettingsConfiguration, tokenColorCustomizationConfiguration); -} - -export function updateFileIconThemeConfigurationSchemas(themes: IWorkbenchFileIconTheme[]) { - fileIconThemeSettingSchema.enum!.splice(1, Number.MAX_VALUE, ...themes.map(t => t.settingsId)); - fileIconThemeSettingSchema.enumItemLabels!.splice(1, Number.MAX_VALUE, ...themes.map(t => t.label)); - fileIconThemeSettingSchema.enumDescriptions!.splice(1, Number.MAX_VALUE, ...themes.map(t => t.description || '')); - - configurationRegistry.notifyConfigurationSchemaUpdated(themeSettingsConfiguration); -} - -export function updateProductIconThemeConfigurationSchemas(themes: IWorkbenchProductIconTheme[]) { - productIconThemeSettingSchema.enum!.splice(1, Number.MAX_VALUE, ...themes.map(t => t.settingsId)); - productIconThemeSettingSchema.enumItemLabels!.splice(1, Number.MAX_VALUE, ...themes.map(t => t.label)); - productIconThemeSettingSchema.enumDescriptions!.splice(1, Number.MAX_VALUE, ...themes.map(t => t.description || '')); - - configurationRegistry.notifyConfigurationSchemaUpdated(themeSettingsConfiguration); -} - - -export class ThemeConfiguration { - constructor(private configurationService: IConfigurationService) { - } - - public get colorTheme(): string { - return this.configurationService.getValue(ThemeSettings.COLOR_THEME); - } - - public get fileIconTheme(): string | null { - return this.configurationService.getValue(ThemeSettings.FILE_ICON_THEME); - } - - public get productIconTheme(): string { - return this.configurationService.getValue(ThemeSettings.PRODUCT_ICON_THEME); - } - - public get colorCustomizations(): IColorCustomizations { - return this.configurationService.getValue(ThemeSettings.COLOR_CUSTOMIZATIONS) || {}; - } - - public get tokenColorCustomizations(): ITokenColorCustomizations { - return this.configurationService.getValue(ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS) || {}; - } - - public get semanticTokenColorCustomizations(): ISemanticTokenColorCustomizations | undefined { - return this.configurationService.getValue(ThemeSettings.SEMANTIC_TOKEN_COLOR_CUSTOMIZATIONS); - } - - public get experimentalSemanticTokenColorCustomizations(): IExperimentalSemanticTokenColorCustomizations | undefined { - return this.configurationService.getValue(ThemeSettings.TOKEN_COLOR_CUSTOMIZATIONS_EXPERIMENTAL); - } - - public async setColorTheme(theme: IWorkbenchColorTheme, settingsTarget: ConfigurationTarget | undefined | 'auto'): Promise { - await this.writeConfiguration(ThemeSettings.COLOR_THEME, theme.settingsId, settingsTarget); - return theme; - } - - public async setFileIconTheme(theme: IWorkbenchFileIconTheme, settingsTarget: ConfigurationTarget | undefined | 'auto'): Promise { - await this.writeConfiguration(ThemeSettings.FILE_ICON_THEME, theme.settingsId, settingsTarget); - return theme; - } - - public async setProductIconTheme(theme: IWorkbenchProductIconTheme, settingsTarget: ConfigurationTarget | undefined | 'auto'): Promise { - await this.writeConfiguration(ThemeSettings.PRODUCT_ICON_THEME, theme.settingsId, settingsTarget); - return theme; - } - - public findAutoConfigurationTarget(key: string) { - let settings = this.configurationService.inspect(key); - if (!types.isUndefined(settings.workspaceFolderValue)) { - return ConfigurationTarget.WORKSPACE_FOLDER; - } else if (!types.isUndefined(settings.workspaceValue)) { - return ConfigurationTarget.WORKSPACE; - } else if (!types.isUndefined(settings.userRemote)) { - return ConfigurationTarget.USER_REMOTE; - } - return ConfigurationTarget.USER; - } - - private async writeConfiguration(key: string, value: any, settingsTarget: ConfigurationTarget | 'auto' | undefined): Promise { - if (settingsTarget === undefined) { - return; - } - - let settings = this.configurationService.inspect(key); - if (settingsTarget === 'auto') { - return this.configurationService.updateValue(key, value); - } - - if (settingsTarget === ConfigurationTarget.USER) { - if (value === settings.userValue) { - return Promise.resolve(undefined); // nothing to do - } else if (value === settings.defaultValue) { - if (types.isUndefined(settings.userValue)) { - return Promise.resolve(undefined); // nothing to do - } - value = undefined; // remove configuration from user settings - } - } else if (settingsTarget === ConfigurationTarget.WORKSPACE || settingsTarget === ConfigurationTarget.WORKSPACE_FOLDER || settingsTarget === ConfigurationTarget.USER_REMOTE) { - if (value === settings.value) { - return Promise.resolve(undefined); // nothing to do - } - } - return this.configurationService.updateValue(key, value, settingsTarget); - } -} diff --git a/vscode-web-gogs1s/yarn.lock b/vscode-web-gogs1s/yarn.lock index 6094aa3..0366d18 100644 --- a/vscode-web-gogs1s/yarn.lock +++ b/vscode-web-gogs1s/yarn.lock @@ -2,560 +2,1186 @@ # yarn lockfile v1 +"@gar/promisify@^1.1.3": + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" + +"@npmcli/fs@^2.1.0": + "integrity" "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "@gar/promisify" "^1.1.3" + "semver" "^7.3.5" + +"@npmcli/move-file@^2.0.0": + "integrity" "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" + +"@tootallnate/once@2": + "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + "version" "2.0.0" + "@types/trusted-types@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.0.tgz#aee6e868fcef74f2b8c71614b6df81a601a42f17" - integrity sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -graceful-fs@^4.1.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -iconv-lite-umd@0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.8.tgz#5ad310ec126b260621471a2d586f7f37b9958ec0" - integrity sha512-zvXJ5gSwMC9JD3wDzH8CoZGc1pbiJn12Tqjk8BXYCnYz3hYL5GRjHW8LEykjXhV9WgNGI4rgpgHcbIiBfrRq6A== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== - -is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== - dependencies: - call-bind "^1.0.0" - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - -is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -jschardet@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-2.2.1.tgz#03b0264669a90c7a5c436a68c5a7d4e4cb0c9823" - integrity sha512-Ks2JNuUJoc7PGaZ7bVFtSEvOcr0rBq6Q1J5/7+zKWLT+g+4zziL63O0jg7y2jxhzIa1LVsHUbPXrbaWmz9iwDw== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" + "integrity" "sha512-I8MnZqNXsOLHsU111oHbn3khtvKMi5Bn4qVFsIWSJcCP1KKDiXX5AEw8UPk0nSopeC+Hvxt6yAy1/a5PailFqg==" + "resolved" "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.0.tgz" + "version" "2.0.0" + +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.2.1": + "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"aproba@^1.0.3 || ^2.0.0": + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + +"cacache@^16.1.0": + "integrity" "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + "version" "16.1.3" + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "infer-owner" "^1.0.4" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "mkdirp" "^1.0.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + "unique-filename" "^2.0.0" + +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"chalk@^2.4.1": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"console-control-strings@^1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"cross-spawn@^6.0.5": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"debug@^4.1.0", "debug@^4.3.3", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"define-properties@^1.1.3": + "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "object-keys" "^1.0.12" + +"delegates@^1.0.0": + "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"depd@^1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"encoding@^0.1.13": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-abstract@^1.18.0-next.2": + "integrity" "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz" + "version" "1.18.0" + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "get-intrinsic" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.2" + "is-callable" "^1.2.3" + "is-negative-zero" "^2.0.1" + "is-regex" "^1.1.2" + "is-string" "^1.0.5" + "object-inspect" "^1.9.0" + "object-keys" "^1.1.1" + "object.assign" "^4.1.2" + "string.prototype.trimend" "^1.0.4" + "string.prototype.trimstart" "^1.0.4" + "unbox-primitive" "^1.0.0" + +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "is-callable" "^1.1.4" + "is-date-object" "^1.0.1" + "is-symbol" "^1.0.2" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"fs-extra@^10.0.0": + "integrity" "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz" + "version" "10.0.0" + dependencies: + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^2.0.0", "fs-minipass@^2.1.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1": + "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.1" + +"glob@^7.1.3", "glob@^7.1.4": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^8.0.1": + "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + "version" "8.0.3" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"graceful-fs@^4.1.2": + "integrity" "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" + "version" "4.2.6" + +"graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.6": + "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" + "version" "4.2.8" + +"has-bigints@^1.0.1": + "integrity" "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" + "version" "1.0.1" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-symbols@^1.0.1", "has-symbols@^1.0.2": + "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" + "version" "1.0.2" + +"has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hosted-git-info@^2.1.4": + "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + "version" "2.8.9" + +"http-cache-semantics@^4.1.0": + "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + "version" "4.1.0" + +"http-proxy-agent@^5.0.0": + "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "@tootallnate/once" "2" + "agent-base" "6" + "debug" "4" + +"https-proxy-agent@^5.0.0": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"iconv-lite-umd@0.6.8": + "integrity" "sha512-zvXJ5gSwMC9JD3wDzH8CoZGc1pbiJn12Tqjk8BXYCnYz3hYL5GRjHW8LEykjXhV9WgNGI4rgpgHcbIiBfrRq6A==" + "resolved" "https://registry.npmjs.org/iconv-lite-umd/-/iconv-lite-umd-0.6.8.tgz" + "version" "0.6.8" + +"iconv-lite@^0.6.2": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@2": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-bigint@^1.0.1": + "integrity" "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz" + "version" "1.0.1" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "call-bind" "^1.0.0" + +"is-callable@^1.1.4", "is-callable@^1.2.3": + "integrity" "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" + "version" "1.2.3" + +"is-core-module@^2.2.0": + "integrity" "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "has" "^1.0.3" + +"is-date-object@^1.0.1": + "integrity" "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz" + "version" "1.0.2" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-negative-zero@^2.0.1": + "integrity" "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" + "version" "2.0.1" + +"is-number-object@^1.0.4": + "integrity" "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz" + "version" "1.0.4" + +"is-regex@^1.1.2": + "integrity" "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "call-bind" "^1.0.2" + "has-symbols" "^1.0.1" + +"is-string@^1.0.5": + "integrity" "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" + "version" "1.0.5" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "integrity" "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "has-symbols" "^1.0.1" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"jschardet@2.2.1": + "integrity" "sha512-Ks2JNuUJoc7PGaZ7bVFtSEvOcr0rBq6Q1J5/7+zKWLT+g+4zziL63O0jg7y2jxhzIa1LVsHUbPXrbaWmz9iwDw==" + "resolved" "https://registry.npmjs.org/jschardet/-/jschardet-2.2.1.tgz" + "version" "2.2.1" + +"json-parse-better-errors@^1.0.1": + "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + "version" "1.0.2" + +"jsonfile@^6.0.1": + "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "universalify" "^2.0.0" + optionalDependencies: + "graceful-fs" "^4.1.6" + +"load-json-file@^4.0.0": + "integrity" "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "graceful-fs" "^4.1.2" + "parse-json" "^4.0.0" + "pify" "^3.0.0" + "strip-bom" "^3.0.0" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@^7.7.1": + "integrity" "sha512-EIRtP1GrSJny0dqb50QXRUNBxHJhcpxHC++M5tD7RYbvLLn5KVWKsbyswSSqDuU15UFi3bgTQIY8nhDMeF6aDQ==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.0.tgz" + "version" "7.14.0" + +"make-fetch-happen@^10.0.3": + "integrity" "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + "version" "10.2.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^16.1.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^2.0.3" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^9.0.0" + +"memorystream@^0.3.1": + "integrity" "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" + "resolved" "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" + "version" "0.3.1" + +"minimatch@^3.0.4", "minimatch@^3.1.1": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "brace-expansion" "^2.0.1" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-fetch@^2.0.3": + "integrity" "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.1.6" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" optionalDependencies: - graceful-fs "^4.1.6" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -resolve@^1.10.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - -string.prototype.padend@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" - integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -tas-client-umd@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/tas-client-umd/-/tas-client-umd-0.1.2.tgz#fe93ae085f65424292ac79feff4f1add3e50e624" - integrity sha512-rT9BdDCejckqOTQL2ShX67QtTiAUGbmPm5ZTC8giXobBvZC6JuvBVy5G32hoGZ3Q0dpTvMfgpf3iVFNN2F7wzg== - -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -vscode-oniguruma@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.3.1.tgz#e2383879c3485b19f533ec34efea9d7a2b14be8f" - integrity sha512-gz6ZBofA7UXafVA+m2Yt2zHKgXC2qedArprIsHAPKByTkwq9l5y/izAGckqxYml7mSbYxTRTfdRwsFq3cwF4LQ== - -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -xterm-addon-search@0.8.0-beta.3: - version "0.8.0-beta.3" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.0-beta.3.tgz#c6c7e36a03706bd43d8bba383511acf9e435aed0" - integrity sha512-EZP97KJIJ4KGQaOPYiiOaRRJst6LOgeEFoQL46WcBl5EWH9pH8qfrv0BHAJ8+6nBV2B9u5M6rzxO1GvLLec19w== - -xterm-addon-unicode11@0.3.0-beta.3: - version "0.3.0-beta.3" - resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0-beta.3.tgz#70af2dfb67809258edb62c19e2861f7ce5ccf5cd" - integrity sha512-vaYopnOjn19wCLDCyIWPWLwKR7CvLPxB5YZ3CAxt9qL05o3symxIJJJC0DuCa4GaGKVjNc7EmjRCs5bsJ2O1tw== - -xterm-addon-webgl@0.10.0-beta.1: - version "0.10.0-beta.1" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.1.tgz#e0bf964945a9aa8fc18318ddbd32e56ec99c219e" - integrity sha512-XNZMrmiyFaz3XiPq+LqF0qn2QHpUEwuk+cG53JwpJHnWo3dd2jxoIgHFQUcrnvHIVPZMbTKySIwLCCC9uQVl7Q== - -xterm@4.10.0-beta.4: - version "4.10.0-beta.4" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.10.0-beta.4.tgz#95efce7a40ec582101ec9777f4ccc6e68e95185e" - integrity sha512-q/yRy2nn4mp1jWZe218TJwlKjXCIr6h28Kw0JMB+lcTeU+MebZ3TrHqlrNVnB+UJfFDOpkw0qfKYfRoV8G/hXA== + "encoding" "^0.1.13" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.1", "minipass@^3.1.6": + "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + "version" "3.3.4" + dependencies: + "yallist" "^4.0.0" + +"minizlib@^2.1.1", "minizlib@^2.1.2": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp@^1.0.3", "mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"ms@^2.0.0", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"negotiator@^0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"node-gyp@^9.1.0": + "integrity" "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^10.0.3" + "nopt" "^5.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "abbrev" "1" + +"normalize-package-data@^2.3.2": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"npm-run-all@^4.1.5": + "integrity" "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==" + "resolved" "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz" + "version" "4.1.5" + dependencies: + "ansi-styles" "^3.2.1" + "chalk" "^2.4.1" + "cross-spawn" "^6.0.5" + "memorystream" "^0.3.1" + "minimatch" "^3.0.4" + "pidtree" "^0.3.0" + "read-pkg" "^3.0.0" + "shell-quote" "^1.6.1" + "string.prototype.padend" "^3.0.0" + +"npmlog@^6.0.0": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"object-inspect@^1.9.0": + "integrity" "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz" + "version" "1.9.0" + +"object-keys@^1.0.12", "object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object.assign@^4.1.2": + "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "call-bind" "^1.0.0" + "define-properties" "^1.1.3" + "has-symbols" "^1.0.1" + "object-keys" "^1.1.1" + +"once@^1.3.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"parse-json@^4.0.0": + "integrity" "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "error-ex" "^1.3.1" + "json-parse-better-errors" "^1.0.1" + +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^2.0.1": + "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" + +"path-parse@^1.0.6": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-type@^3.0.0": + "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "pify" "^3.0.0" + +"pidtree@^0.3.0": + "integrity" "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==" + "resolved" "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz" + "version" "0.3.1" + +"pify@^3.0.0": + "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + "version" "3.0.0" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"read-pkg@^3.0.0": + "integrity" "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "load-json-file" "^4.0.0" + "normalize-package-data" "^2.3.2" + "path-type" "^3.0.0" + +"readable-stream@^3.6.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"resolve@^1.10.0": + "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + "version" "1.20.0" + dependencies: + "is-core-module" "^2.2.0" + "path-parse" "^1.0.6" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"safe-buffer@~5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safer-buffer@>= 2.1.2 < 3.0.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"semver@^5.5.0", "semver@2 || 3 || 4 || 5": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^7.3.5": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" + dependencies: + "lru-cache" "^6.0.0" + +"set-blocking@^2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"shebang-command@^1.2.0": + "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "shebang-regex" "^1.0.0" + +"shebang-regex@^1.0.0": + "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" + +"shell-quote@^1.6.1": + "integrity" "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz" + "version" "1.7.2" + +"signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^7.0.0": + "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz" + "version" "2.7.0" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"spdx-correct@^3.0.0": + "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "integrity" "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" + "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz" + "version" "3.0.7" + +"ssri@^9.0.0": + "integrity" "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + "version" "9.0.1" + dependencies: + "minipass" "^3.1.1" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string.prototype.padend@^3.0.0": + "integrity" "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==" + "resolved" "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + "es-abstract" "^1.18.0-next.2" + +"string.prototype.trimend@^1.0.4": + "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"string.prototype.trimstart@^1.0.4": + "integrity" "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-bom@^3.0.0": + "integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + "version" "6.1.11" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"tas-client-umd@0.1.2": + "integrity" "sha512-rT9BdDCejckqOTQL2ShX67QtTiAUGbmPm5ZTC8giXobBvZC6JuvBVy5G32hoGZ3Q0dpTvMfgpf3iVFNN2F7wzg==" + "resolved" "https://registry.npmjs.org/tas-client-umd/-/tas-client-umd-0.1.2.tgz" + "version" "0.1.2" + +"unbox-primitive@^1.0.0": + "integrity" "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "function-bind" "^1.1.1" + "has-bigints" "^1.0.1" + "has-symbols" "^1.0.2" + "which-boxed-primitive" "^1.0.2" + +"unique-filename@^2.0.0": + "integrity" "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "unique-slug" "^3.0.0" + +"unique-slug@^3.0.0": + "integrity" "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "imurmurhash" "^0.1.4" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"util-deprecate@^1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"validate-npm-package-license@^3.0.1": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" + +"vscode-oniguruma@1.3.1": + "integrity" "sha512-gz6ZBofA7UXafVA+m2Yt2zHKgXC2qedArprIsHAPKByTkwq9l5y/izAGckqxYml7mSbYxTRTfdRwsFq3cwF4LQ==" + "resolved" "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.3.1.tgz" + "version" "1.3.1" + +"vscode-textmate@5.2.0": + "integrity" "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==" + "resolved" "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz" + "version" "5.2.0" + +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-bigint" "^1.0.1" + "is-boolean-object" "^1.1.0" + "is-number-object" "^1.0.4" + "is-string" "^1.0.5" + "is-symbol" "^1.0.3" + +"which@^1.2.9": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"xterm-addon-search@0.8.0-beta.3": + "integrity" "sha512-EZP97KJIJ4KGQaOPYiiOaRRJst6LOgeEFoQL46WcBl5EWH9pH8qfrv0BHAJ8+6nBV2B9u5M6rzxO1GvLLec19w==" + "resolved" "https://registry.npmjs.org/xterm-addon-search/-/xterm-addon-search-0.8.0-beta.3.tgz" + "version" "0.8.0-beta.3" + +"xterm-addon-unicode11@0.3.0-beta.3": + "integrity" "sha512-vaYopnOjn19wCLDCyIWPWLwKR7CvLPxB5YZ3CAxt9qL05o3symxIJJJC0DuCa4GaGKVjNc7EmjRCs5bsJ2O1tw==" + "resolved" "https://registry.npmjs.org/xterm-addon-unicode11/-/xterm-addon-unicode11-0.3.0-beta.3.tgz" + "version" "0.3.0-beta.3" + +"xterm-addon-webgl@0.10.0-beta.1": + "integrity" "sha512-XNZMrmiyFaz3XiPq+LqF0qn2QHpUEwuk+cG53JwpJHnWo3dd2jxoIgHFQUcrnvHIVPZMbTKySIwLCCC9uQVl7Q==" + "resolved" "https://registry.npmjs.org/xterm-addon-webgl/-/xterm-addon-webgl-0.10.0-beta.1.tgz" + "version" "0.10.0-beta.1" + +"xterm@^4.0.0", "xterm@4.10.0-beta.4": + "integrity" "sha512-q/yRy2nn4mp1jWZe218TJwlKjXCIr6h28Kw0JMB+lcTeU+MebZ3TrHqlrNVnB+UJfFDOpkw0qfKYfRoV8G/hXA==" + "resolved" "https://registry.npmjs.org/xterm/-/xterm-4.10.0-beta.4.tgz" + "version" "4.10.0-beta.4" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" diff --git a/yarn.lock b/yarn.lock index 3bb0e48..8b26d6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -59,10 +59,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== -"@jianboy/vscode-web@1.5.10": - version "1.5.10" - resolved "https://registry.yarnpkg.com/@jianboy/vscode-web/-/vscode-web-1.5.10.tgz#58d3744d161e7d7607d4372d790d06da9acbf353" - integrity sha512-xuRRSEbuw3FPce7YbyLr0STWLCPhu7B71WdpXiQVPlZ6PmHa8zQPCaeIYR/cOZUqtWH3cKcciC9aGlA/AySphg== +"@jianboy/vscode-web@1.70.2": + version "1.70.2" + resolved "https://registry.yarnpkg.com/@jianboy/vscode-web/-/vscode-web-1.70.2.tgz#013cc7398159f47e942a768df131670a3fd64098" + integrity sha512-StMc6WBGLZiPF8XUkcERiv51PnTK0QmVuOfj4vyldbvFIQfzo0WtLCml1WGmgquFSF+nwyxIypkbj6KQHJ9+rQ== dependencies: iconv-lite-umd "0.6.8" jschardet "2.2.1"