diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 0000000000..d352b823d0
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,121 @@
+#-------------------------------------------------------------------------------------------------------------
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
+#-------------------------------------------------------------------------------------------------------------
+
+FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-10
+
+ARG TARGET_DISPLAY=":1"
+
+# VNC options
+ARG MAX_VNC_RESOLUTION=1920x1080x16
+ARG TARGET_VNC_RESOLUTION=1920x1080
+ARG TARGET_VNC_DPI=72
+ARG TARGET_VNC_PORT=5901
+ARG VNC_PASSWORD="vscode"
+
+# noVNC (VNC web client) options
+ARG INSTALL_NOVNC="true"
+ARG NOVNC_VERSION=1.1.0
+ARG TARGET_NOVNC_PORT=6080
+ARG WEBSOCKETIFY_VERSION=0.9.0
+
+# Firefox is useful for testing things like browser launch events, but optional
+ARG INSTALL_FIREFOX="false"
+
+# Expected non-root username from base image
+ARG USERNAME=node
+
+# Core environment variables for X11, VNC, and fluxbox
+ENV DBUS_SESSION_BUS_ADDRESS="autolaunch:" \
+ MAX_VNC_RESOLUTION="${MAX_VNC_RESOLUTION}" \
+ VNC_RESOLUTION="${TARGET_VNC_RESOLUTION}" \
+ VNC_DPI="${TARGET_VNC_DPI}" \
+ VNC_PORT="${TARGET_VNC_PORT}" \
+ NOVNC_PORT="${TARGET_NOVNC_PORT}" \
+ DISPLAY="${TARGET_DISPLAY}" \
+ LANG="en_US.UTF-8" \
+ LANGUAGE="en_US.UTF-8" \
+ VISUAL="nano" \
+ EDITOR="nano"
+
+# Configure apt and install packages
+RUN apt-get update \
+ && export DEBIAN_FRONTEND=noninteractive \
+ #
+ # Install the Cascadia Code fonts - https://github.com/microsoft/cascadia-code
+ && curl -sSL https://github.com/microsoft/cascadia-code/releases/download/v2004.30/CascadiaCode_2004.30.zip -o /tmp/cascadia-fonts.zip \
+ && unzip /tmp/cascadia-fonts.zip -d /tmp/cascadia-fonts \
+ && mkdir -p /usr/share/fonts/truetype/cascadia \
+ && mv /tmp/cascadia-fonts/ttf/* /usr/share/fonts/truetype/cascadia/ \
+ && rm -rf /tmp/cascadia-fonts.zip /tmp/cascadia-fonts \
+ #
+ # Install X11, fluxbox and VS Code dependencies
+ && apt-get -y install --no-install-recommends \
+ xvfb \
+ x11vnc \
+ fluxbox \
+ dbus-x11 \
+ x11-utils \
+ x11-xserver-utils \
+ xdg-utils \
+ fbautostart \
+ xterm \
+ eterm \
+ gnome-terminal \
+ gnome-keyring \
+ seahorse \
+ nautilus \
+ libx11-dev \
+ libxkbfile-dev \
+ libsecret-1-dev \
+ libnotify4 \
+ libnss3 \
+ libxss1 \
+ libasound2 \
+ xfonts-base \
+ xfonts-terminus \
+ fonts-noto \
+ fonts-wqy-microhei \
+ fonts-droid-fallback \
+ vim-tiny \
+ nano \
+ #
+ # [Optional] Install noVNC
+ && if [ "${INSTALL_NOVNC}" = "true" ]; then \
+ mkdir -p /usr/local/novnc \
+ && curl -sSL https://github.com/novnc/noVNC/archive/v${NOVNC_VERSION}.zip -o /tmp/novnc-install.zip \
+ && unzip /tmp/novnc-install.zip -d /usr/local/novnc \
+ && cp /usr/local/novnc/noVNC-${NOVNC_VERSION}/vnc_lite.html /usr/local/novnc/noVNC-${NOVNC_VERSION}/index.html \
+ && rm /tmp/novnc-install.zip \
+ && curl -sSL https://github.com/novnc/websockify/archive/v${WEBSOCKETIFY_VERSION}.zip -o /tmp/websockify-install.zip \
+ && unzip /tmp/websockify-install.zip -d /usr/local/novnc \
+ && apt-get -y install --no-install-recommends python-numpy \
+ && ln -s /usr/local/novnc/websockify-${WEBSOCKETIFY_VERSION} /usr/local/novnc/noVNC-${NOVNC_VERSION}/utils/websockify \
+ && rm /tmp/websockify-install.zip; \
+ fi \
+ #
+ # [Optional] Install Firefox
+ && if [ "${INSTALL_FIREFOX}" = "true" ]; then \
+ apt-get -y install --no-install-recommends firefox-esr; \
+ fi \
+ #
+ # Clean up
+ && apt-get autoremove -y \
+ && apt-get clean -y \
+ && rm -rf /var/lib/apt/lists/*
+
+COPY bin/init-dev-container.sh /usr/local/share/
+COPY bin/set-resolution /usr/local/bin/
+COPY fluxbox/* /root/.fluxbox/
+COPY fluxbox/* /home/${USERNAME}/.fluxbox/
+
+# Update privs, owners of config files
+RUN mkdir -p /var/run/dbus /root/.vnc /home/${USERNAME}/.vnc \
+ && touch /root/.Xmodmap /home/${USERNAME}/.Xmodmap \
+ && echo "${VNC_PASSWORD}" | tee /root/.vnc/passwd > /home/${USERNAME}/.vnc/passwd \
+ && chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.Xmodmap /home/${USERNAME}/.fluxbox /home/${USERNAME}/.vnc \
+ && chmod +x /usr/local/share/init-dev-container.sh /usr/local/bin/set-resolution
+
+ENTRYPOINT ["/usr/local/share/init-dev-container.sh"]
+CMD ["sleep", "infinity"]
diff --git a/.devcontainer/README.md b/.devcontainer/README.md
new file mode 100644
index 0000000000..79fdfb487a
--- /dev/null
+++ b/.devcontainer/README.md
@@ -0,0 +1,82 @@
+# Code - OSS Development Container
+
+This repository includes configuration for a development container for working with Code - OSS in an isolated local container or using [Visual Studio Codespaces](https://aka.ms/vso).
+
+> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` with a web client at `6080`. For better performance, we recommend using a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Applications like the macOS Screen Sharing app will not perform as well. [Chicken](https://sourceforge.net/projects/chicken/) is a good macOS alternative.
+
+## Quick start - local
+
+1. Install Docker Desktop or Docker on your local machine. (See [docs](https://aka.ms/vscode-remote/containers/getting-started) for additional details.)
+
+2. [Docker Desktop] If you are not using the new WSL2 Docker Desktop engine, increase the resources allocated to Docker Desktop to at least **4 Cores and 4 GB of RAM (8 GB recommended)**. Right-click on the Docker status bar item, go to **Preferences/Settings > Resources > Advanced** to do so.
+
+ > **Note:** The [Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor) extension is included in the container so you can keep an eye on CPU/Memory in the status bar.
+
+3. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Remote - Containers](https://aka.ms/vscode-remote/download/containers) extension.
+
+ 
+
+ > Note that the Remote - Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details.
+
+4. Press Ctrl/Cmd + Shift + P and select **Remote - Containers: Open Repository in Container...**.
+
+ > **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or using the Hyper-V engine on Windows. We recommend the "open repository" approach instead since it uses "named volume" rather than the local filesystem.
+
+5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press Enter.
+
+6. After the container is running, open a web browser and go to [http://localhost:6080](http://localhost:6080) or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
+
+Anything you start in VS Code or the integrated terminal will appear here.
+
+Next: **[Try it out!](#try-it)**
+
+## Quick start - Codespaces
+
+>Note that the Codespaces browser-based editor cannot currently access the desktop environment in this container (due to a [missing feature](https://github.com/MicrosoftDocs/vsonline/issues/117)). We recommend using Visual Studio Code from the desktop to connect instead in the near term.
+
+1. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Visual Studio Codespaces](https://aka.ms/vscs-ext-vscode) extension.
+
+ 
+
+ > Note that the Visual Studio Codespaces extension requires the Visual Studio Code distribution of Code - OSS.
+
+2. Sign in by pressing Ctrl/Cmd + Shift + P and selecting **Codespaces: Sign In**. You may also need to use the **Codespaces: Create Plan** if you do not have a plan. See the [Codespaces docs](https://aka.ms/vso-docs/vscode) for details.
+
+3. Press Ctrl/Cmd + Shift + P and select **Codespaces: Create New Codespace**.
+
+4. Use default settings, select a plan, and then enter the repository URL `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box when prompted.
+
+5. After the container is running, open a web browser and go to [http://localhost:6080](http://localhost:6080) or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
+
+6. Anything you start in VS Code or the integrated terminal will appear here.
+
+## Try it!
+
+This container uses the [Fluxbox](http://fluxbox.org/) window manager to keep things lean. **Right-click on the desktop** to see menu options. It works with GNOME and GTK applications, so other tools can be installed if needed.
+
+Note you can also set the resolution from the command line by typing `set-resolution`.
+
+To start working with Code - OSS, follow these steps:
+
+1. In your local VS Code, open a terminal (Ctrl/Cmd + Shift + \`) and type the following commands:
+
+ ```bash
+ yarn install
+ bash scripts/code.sh
+ ```
+
+2. After the build is complete, open a web browser and go to [http://localhost:6080](http://localhost:6080) or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
+
+3. You should now see Code - OSS!
+
+Next, let's try debugging.
+
+1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window through your browser or VNC viewer.
+
+2. Go to your local VS Code client, and use Run / Debug view to launch the **VS Code** configuration. (Typically the default, so you can likely just press F5).
+
+ > **Note:** If launching times out, you can increase the value of `timeout` in the "VS Code", "Attach Main Process", "Attach Extension Host", and "Attach to Shared Process" configurations in [launch.json](../.vscode/launch.json). However, running `scripts/code.sh` first will set up Electron which will usually solve timeout issues.
+
+3. After a bit, Code - OSS will appear with the debugger attached!
+
+Enjoy!
diff --git a/.devcontainer/bin/init-dev-container.sh b/.devcontainer/bin/init-dev-container.sh
new file mode 100644
index 0000000000..260cc27592
--- /dev/null
+++ b/.devcontainer/bin/init-dev-container.sh
@@ -0,0 +1,91 @@
+#!/bin/bash
+
+NONROOT_USER=node
+LOG=/tmp/container-init.log
+
+# Execute the command it not already running
+startInBackgroundIfNotRunning()
+{
+ log "Starting $1."
+ echo -e "\n** $(date) **" | sudoIf tee -a /tmp/$1.log > /dev/null
+ if ! pidof $1 > /dev/null; then
+ keepRunningInBackground "$@"
+ while ! pidof $1 > /dev/null; do
+ sleep 1
+ done
+ log "$1 started."
+ else
+ echo "$1 is already running." | sudoIf tee -a /tmp/$1.log > /dev/null
+ log "$1 is already running."
+ fi
+}
+
+# Keep command running in background
+keepRunningInBackground()
+{
+ ($2 sh -c "while :; do echo [\$(date)] Process started.; $3; echo [\$(date)] Process exited!; sleep 5; done 2>&1" | sudoIf tee -a /tmp/$1.log > /dev/null & echo "$!" | sudoIf tee /tmp/$1.pid > /dev/null)
+}
+
+# Use sudo to run as root when required
+sudoIf()
+{
+ if [ "$(id -u)" -ne 0 ]; then
+ sudo "$@"
+ else
+ "$@"
+ fi
+}
+
+# Use sudo to run as non-root user if not already running
+sudoUserIf()
+{
+ if [ "$(id -u)" -eq 0 ]; then
+ sudo -u ${NONROOT_USER} "$@"
+ else
+ "$@"
+ fi
+}
+
+# Log messages
+log()
+{
+ echo -e "[$(date)] $@" | sudoIf tee -a $LOG > /dev/null
+}
+
+log "** SCRIPT START **"
+
+# Start dbus.
+log 'Running "/etc/init.d/dbus start".'
+if [ -f "/var/run/dbus/pid" ] && ! pidof dbus-daemon > /dev/null; then
+ sudoIf rm -f /var/run/dbus/pid
+fi
+sudoIf /etc/init.d/dbus start 2>&1 | sudoIf tee -a /tmp/dbus-daemon-system.log > /dev/null
+while ! pidof dbus-daemon > /dev/null; do
+ sleep 1
+done
+
+# Set up Xvfb.
+startInBackgroundIfNotRunning "Xvfb" sudoIf "Xvfb ${DISPLAY:-:1} +extension RANDR -screen 0 ${MAX_VNC_RESOLUTION:-1920x1080x16}"
+
+# Start fluxbox as a light weight window manager.
+startInBackgroundIfNotRunning "fluxbox" sudoUserIf "dbus-launch startfluxbox"
+
+# Start x11vnc
+startInBackgroundIfNotRunning "x11vnc" sudoIf "x11vnc -display ${DISPLAY:-:1} -rfbport ${VNC_PORT:-5901} -localhost -no6 -xkb -shared -forever -passwdfile $HOME/.vnc/passwd"
+
+# Set resolution
+/usr/local/bin/set-resolution ${VNC_RESOLUTION:-1280x720} ${VNC_DPI:-72}
+
+
+# Spin up noVNC if installed and not runnning.
+if [ -d "/usr/local/novnc" ] && [ "$(ps -ef | grep /usr/local/novnc/noVNC*/utils/launch.sh | grep -v grep)" = "" ]; then
+ keepRunningInBackground "noVNC" sudoIf "/usr/local/novnc/noVNC*/utils/launch.sh --listen ${NOVNC_PORT:-6080} --vnc localhost:${VNC_PORT:-5901}"
+ log "noVNC started."
+else
+ log "noVNC is already running or not installed."
+fi
+
+# Run whatever was passed in
+log "Executing \"$@\"."
+"$@"
+log "** SCRIPT EXIT **"
diff --git a/.devcontainer/bin/set-resolution b/.devcontainer/bin/set-resolution
new file mode 100644
index 0000000000..5b4ca79f51
--- /dev/null
+++ b/.devcontainer/bin/set-resolution
@@ -0,0 +1,25 @@
+#!/bin/bash
+RESOLUTION=${1:-${VNC_RESOLUTION:-1920x1080}}
+DPI=${2:-${VNC_DPI:-72}}
+if [ -z "$1" ]; then
+ echo -e "**Current Settings **\n"
+ xrandr
+ echo -n -e "\nEnter new resolution (WIDTHxHEIGHT, blank for ${RESOLUTION}, Ctrl+C to abort).\n> "
+ read NEW_RES
+ if [ "${NEW_RES}" != "" ]; then
+ RESOLUTION=${NEW_RES}
+ fi
+ if [ -z "$2" ]; then
+ echo -n -e "\nEnter new DPI (blank for ${DPI}, Ctrl+C to abort).\n> "
+ read NEW_DPI
+ if [ "${NEW_DPI}" != "" ]; then
+ DPI=${NEW_DPI}
+ fi
+ fi
+fi
+
+xrandr --fb ${RESOLUTION} --dpi ${DPI} > /dev/null 2>&1
+
+echo -e "\n**New Settings **\n"
+xrandr
+echo
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 0000000000..b9f3e6d79b
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,41 @@
+{
+ "name": "Code - OSS",
+ "build": {
+ "dockerfile": "Dockerfile",
+ "args": {
+ "MAX_VNC_RESOLUTION": "1920x1080x16",
+ "TARGET_VNC_RESOLUTION": "1280x768",
+ "TARGET_VNC_PORT": "5901",
+ "TARGET_NOVNC_PORT": "6080",
+ "VNC_PASSWORD": "vscode",
+ "INSTALL_FIREFOX": "true"
+ }
+ },
+ "overrideCommand": false,
+ "runArgs": ["--init"],
+
+ "settings": {
+ // zsh is also available
+ "terminal.integrated.shell.linux": "/bin/bash",
+ "resmon.show.battery": false,
+ "resmon.show.cpufreq": false,
+ "remote.extensionKind": {
+ "ms-vscode.js-debug-nightly": "workspace",
+ "msjsdiag.debugger-for-chrome": "workspace"
+ },
+ "debug.chrome.useV3": true
+ },
+
+ // noVNC, VNC ports
+ "forwardPorts": [6080, 5901],
+
+ "extensions": [
+ "dbaeumer.vscode-eslint",
+ "EditorConfig.EditorConfig",
+ "msjsdiag.debugger-for-chrome",
+ "mutantdino.resourcemonitor",
+ "GitHub.vscode-pull-request-github"
+ ],
+
+ "remoteUser": "node"
+}
diff --git a/.devcontainer/fluxbox/apps b/.devcontainer/fluxbox/apps
new file mode 100644
index 0000000000..d43f05e9e2
--- /dev/null
+++ b/.devcontainer/fluxbox/apps
@@ -0,0 +1,9 @@
+[app] (name=code-oss-dev)
+ [Position] (CENTER) {0 0}
+ [Maximized] {yes}
+ [Dimensions] {100% 100%}
+[end]
+[transient] (role=GtkFileChooserDialog)
+ [Position] (CENTER) {0 0}
+ [Dimensions] {70% 70%}
+[end]
diff --git a/.devcontainer/fluxbox/init b/.devcontainer/fluxbox/init
new file mode 100644
index 0000000000..a6b8d73fa7
--- /dev/null
+++ b/.devcontainer/fluxbox/init
@@ -0,0 +1,9 @@
+session.menuFile: ~/.fluxbox/menu
+session.keyFile: ~/.fluxbox/keys
+session.styleFile: /usr/share/fluxbox/styles//Squared_for_Debian
+session.configVersion: 13
+session.screen0.workspaces: 1
+session.screen0.workspacewarping: false
+session.screen0.toolbar.widthPercent: 100
+session.screen0.strftimeFormat: %d %b, %a %02k:%M:%S
+session.screen0.toolbar.tools: prevworkspace, workspacename, nextworkspace, clock, prevwindow, nextwindow, iconbar, systemtray
diff --git a/.devcontainer/fluxbox/menu b/.devcontainer/fluxbox/menu
new file mode 100644
index 0000000000..ff5955a2fe
--- /dev/null
+++ b/.devcontainer/fluxbox/menu
@@ -0,0 +1,16 @@
+[begin] ( Code - OSS Development Container )
+ [exec] (File Manager) { nautilus ~ } <>
+ [exec] (Terminal) {/usr/bin/gnome-terminal --working-directory=~ } <>
+ [exec] (Start Code - OSS) { x-terminal-emulator -T "Code - OSS Build" -e bash /workspaces/vscode*/scripts/code.sh } <>
+ [submenu] (System >) {}
+ [exec] (Set Resolution) { x-terminal-emulator -T "Set Resolution" -e bash /usr/local/bin/set-resolution } <>
+ [exec] (Passwords and Keys) { seahorse } <>
+ [exec] (Top) { x-terminal-emulator -T "Top" -e /usr/bin/top } <>
+ [exec] (Editres) {editres} <>
+ [exec] (Xfontsel) {xfontsel} <>
+ [exec] (Xkill) {xkill} <>
+ [exec] (Xrefresh) {xrefresh} <>
+ [end]
+ [config] (Configuration >)
+ [workspaces] (Workspaces >)
+[end]
diff --git a/.eslintrc.json b/.eslintrc.json
index d0c68fddfa..c5034298ff 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -542,7 +542,9 @@
"**/{vs,sql}/workbench/api/**/common/**",
"vs/workbench/contrib/files/common/editors/fileEditorInput", // this should be fine, it only accesses constants from contrib
"vscode-textmate",
- "vscode-oniguruma"
+ "vscode-oniguruma",
+ "iconv-lite-umd",
+ "semver-umd"
]
},
{
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 0df90399ae..1a19bbf549 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -26,6 +26,7 @@
"type": "pwa-chrome",
"request": "attach",
"name": "Attach to Shared Process",
+ "timeout": 30000,
"port": 9222,
"urlFilter": "*sharedProcess.html*",
"presentation": {
@@ -57,6 +58,7 @@
"type": "node",
"request": "attach",
"name": "Attach to Main Process",
+ "timeout": 30000,
"port": 5875,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
diff --git a/.vscode/settings.json b/.vscode/settings.json
index fb0e408051..9239eae0d4 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -26,6 +26,7 @@
"test/automation/out/**": true,
"test/integration/browser/out/**": true,
"src/vs/base/test/node/uri.test.data.txt": true,
+ "src/vs/workbench/test/browser/api/extHostDocumentData.test.perf-data.ts": true,
"src/vs/server": false
},
"lcov.path": [
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 2a0a50fa29..076129b820 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -55,6 +55,43 @@
},
"problemMatcher": "$tsc"
},
+ {
+ "type": "npm",
+ "script": "watch-webd",
+ "label": "Build Web Extensions",
+ "group": "build",
+ "isBackground": true,
+ "presentation": {
+ "reveal": "never"
+ },
+ "problemMatcher": {
+ "owner": "typescript",
+ "applyTo": "closedDocuments",
+ "fileLocation": [
+ "absolute"
+ ],
+ "pattern": {
+ "regexp": "Error: ([^(]+)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\): (.*)$",
+ "file": 1,
+ "location": 2,
+ "message": 3
+ },
+ "background": {
+ "beginsPattern": "Starting compilation",
+ "endsPattern": "Finished compilation"
+ }
+ }
+ },
+ {
+ "type": "npm",
+ "script": "kill-watch-webd",
+ "label": "Kill Build Web Extensions",
+ "group": "build",
+ "presentation": {
+ "reveal": "never",
+ },
+ "problemMatcher": "$tsc"
+ },
{
"label": "Run tests",
"type": "shell",
diff --git a/.yarnrc b/.yarnrc
index 1406d749d7..135e10442a 100644
--- a/.yarnrc
+++ b/.yarnrc
@@ -1,3 +1,3 @@
disturl "https://atom.io/download/electron"
-target "7.3.1"
+target "7.3.2"
runtime "electron"
diff --git a/build/.webignore b/build/.webignore
new file mode 100644
index 0000000000..1035cb291c
--- /dev/null
+++ b/build/.webignore
@@ -0,0 +1,27 @@
+# cleanup rules for web node modules, .gitignore style
+
+**/*.txt
+**/*.json
+**/*.md
+**/*.d.ts
+**/*.js.map
+**/LICENSE
+**/CONTRIBUTORS
+
+jschardet/index.js
+jschardet/src/**
+jschardet/dist/jschardet.js
+
+vscode-textmate/webpack.config.js
+
+xterm/src/**
+
+xterm-addon-search/src/**
+xterm-addon-search/out/**
+xterm-addon-search/fixtures/**
+
+xterm-addon-unicode11/src/**
+xterm-addon-unicode11/out/**
+
+xterm-addon-webgl/src/**
+xterm-addon-webgl/out/**
diff --git a/build/azure-pipelines/common/extract-telemetry.sh b/build/azure-pipelines/common/extract-telemetry.sh
index 84bbd9c537..6436e93c8c 100755
--- a/build/azure-pipelines/common/extract-telemetry.sh
+++ b/build/azure-pipelines/common/extract-telemetry.sh
@@ -10,10 +10,10 @@ git clone --depth 1 https://github.com/Microsoft/vscode-node-debug2.git
git clone --depth 1 https://github.com/Microsoft/vscode-node-debug.git
git clone --depth 1 https://github.com/Microsoft/vscode-html-languageservice.git
git clone --depth 1 https://github.com/Microsoft/vscode-json-languageservice.git
-$BUILD_SOURCESDIRECTORY/build/node_modules/.bin/vscode-telemetry-extractor --sourceDir $BUILD_SOURCESDIRECTORY --excludedDir $BUILD_SOURCESDIRECTORY/extensions --outputDir . --applyEndpoints
-$BUILD_SOURCESDIRECTORY/build/node_modules/.bin/vscode-telemetry-extractor --config $BUILD_SOURCESDIRECTORY/build/azure-pipelines/common/telemetry-config.json -o .
+node $BUILD_SOURCESDIRECTORY/build/node_modules/.bin/vscode-telemetry-extractor --sourceDir $BUILD_SOURCESDIRECTORY --excludedDir $BUILD_SOURCESDIRECTORY/extensions --outputDir . --applyEndpoints
+node $BUILD_SOURCESDIRECTORY/build/node_modules/.bin/vscode-telemetry-extractor --config $BUILD_SOURCESDIRECTORY/build/azure-pipelines/common/telemetry-config.json -o .
mkdir -p $BUILD_SOURCESDIRECTORY/.build/telemetry
mv declarations-resolved.json $BUILD_SOURCESDIRECTORY/.build/telemetry/telemetry-core.json
mv config-resolved.json $BUILD_SOURCESDIRECTORY/.build/telemetry/telemetry-extensions.json
cd ..
-rm -rf extraction
\ No newline at end of file
+rm -rf extraction
diff --git a/build/azure-pipelines/exploration-build.yml b/build/azure-pipelines/exploration-build.yml
index 1a99ea5cab..ff2b7065cb 100644
--- a/build/azure-pipelines/exploration-build.yml
+++ b/build/azure-pipelines/exploration-build.yml
@@ -31,10 +31,10 @@ steps:
git config user.email "vscode@microsoft.com"
git config user.name "VSCode"
- git checkout origin/electron-8.0.x
- git merge origin/main
+ git checkout origin/electron-x.y.z
+ git merge origin/master
- # Push main branch into exploration branch
- git push origin HEAD:electron-8.0.x
+ # Push master branch into exploration branch
+ git push origin HEAD:electron-x.y.z
displayName: Sync & Merge Exploration
diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml
index 466d3dd332..fb4f305257 100644
--- a/build/azure-pipelines/win32/product-build-win32.yml
+++ b/build/azure-pipelines/win32/product-build-win32.yml
@@ -218,7 +218,7 @@ steps:
restoreSolution: 'build\azure-pipelines\win32\ESRPClient\packages.config'
feedsToUse: config
nugetConfigPath: 'build\azure-pipelines\win32\ESRPClient\NuGet.config'
- externalFeedCredentials: 3fc0b7f7-da09-4ae7-a9c8-d69824b1819b
+ externalFeedCredentials: 'ESRP Nuget'
restoreDirectory: packages
- task: ESRPImportCertTask@1
diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js
index 58ba63558d..74f95d1015 100644
--- a/build/gulpfile.extensions.js
+++ b/build/gulpfile.extensions.js
@@ -8,9 +8,11 @@ require('events').EventEmitter.defaultMaxListeners = 100;
const gulp = require('gulp');
const path = require('path');
+const nodeUtil = require('util');
const tsb = require('gulp-tsb');
const es = require('event-stream');
const filter = require('gulp-filter');
+const webpack = require('webpack');
const util = require('./lib/util');
const task = require('./lib/task');
const watcher = require('./lib/watch');
@@ -21,6 +23,8 @@ const nlsDev = require('vscode-nls-dev');
const root = path.dirname(__dirname);
const commit = util.getVersion(root);
const plumber = require('gulp-plumber');
+const fancyLog = require('fancy-log');
+const ansiColors = require('ansi-colors');
const ext = require('./lib/extensions');
const extensionsPath = path.join(path.dirname(__dirname), 'extensions');
@@ -173,3 +177,78 @@ const compileExtensionsBuildTask = task.define('compile-extensions-build', task.
gulp.task(compileExtensionsBuildTask);
exports.compileExtensionsBuildTask = compileExtensionsBuildTask;
+
+const compileWebExtensionsTask = task.define('compile-web', () => buildWebExtensions(false));
+gulp.task(compileWebExtensionsTask);
+exports.compileWebExtensionsTask = compileWebExtensionsTask;
+
+const watchWebExtensionsTask = task.define('watch-web', () => buildWebExtensions(true));
+gulp.task(watchWebExtensionsTask);
+exports.watchWebExtensionsTask = watchWebExtensionsTask;
+
+async function buildWebExtensions(isWatch) {
+
+ const webpackConfigLocations = await nodeUtil.promisify(glob)(
+ path.join(extensionsPath, '**', 'extension-browser.webpack.config.js'),
+ { ignore: ['**/node_modules'] }
+ );
+
+ const webpackConfigs = [];
+
+ for (const webpackConfigPath of webpackConfigLocations) {
+ const configOrFnOrArray = require(webpackConfigPath);
+ function addConfig(configOrFn) {
+ if (typeof configOrFn === 'function') {
+ webpackConfigs.push(configOrFn({}, {}));
+ } else {
+ webpackConfigs.push(configOrFn);
+ }
+ }
+ addConfig(configOrFnOrArray);
+ }
+ function reporter(fullStats) {
+ if (Array.isArray(fullStats.children)) {
+ for (const stats of fullStats.children) {
+ const outputPath = stats.outputPath;
+ if (outputPath) {
+ const relativePath = path.relative(extensionsPath, outputPath).replace(/\\/g, '/');
+ const match = relativePath.match(/[^\/]+(\/server|\/client)?/);
+ fancyLog(`Finished ${ansiColors.green('packaging web extension')} ${ansiColors.cyan(match[0])} with ${stats.errors.length} errors.`);
+ }
+ if (Array.isArray(stats.errors)) {
+ stats.errors.forEach(error => {
+ fancyLog.error(error);
+ });
+ }
+ if (Array.isArray(stats.warnings)) {
+ stats.warnings.forEach(warning => {
+ fancyLog.warn(warning);
+ });
+ }
+ }
+ }
+ }
+ return new Promise((resolve, reject) => {
+ if (isWatch) {
+ webpack(webpackConfigs).watch({}, (err, stats) => {
+ if (err) {
+ reject();
+ } else {
+ reporter(stats.toJson());
+ }
+ });
+ } else {
+ webpack(webpackConfigs).run((err, stats) => {
+ if (err) {
+ fancyLog.error(err);
+ reject();
+ } else {
+ reporter(stats.toJson());
+ resolve();
+ }
+ });
+ }
+ });
+}
+
+
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index 9dbf88a3ea..4c7e36bdc8 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -58,6 +58,7 @@ const nodeModules = [ // {{SQL CARBON EDIT}}
const vscodeEntryPoints = _.flatten([
buildfile.entrypoint('vs/workbench/workbench.desktop.main'),
buildfile.base,
+ buildfile.workerExtensionHost,
buildfile.workbenchDesktop,
buildfile.code
]);
@@ -69,6 +70,7 @@ const vscodeResources = [
'out-build/bootstrap.js',
'out-build/bootstrap-fork.js',
'out-build/bootstrap-amd.js',
+ 'out-build/bootstrap-node.js',
'out-build/bootstrap-window.js',
'out-build/paths.js',
'out-build/vs/**/*.{svg,png,html}',
@@ -83,6 +85,7 @@ const vscodeResources = [
'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
'out-build/vs/workbench/contrib/webview/browser/pre/*.js',
'out-build/vs/workbench/contrib/webview/electron-browser/pre/*.js',
+ 'out-build/vs/workbench/services/extensions/worker/extensionHostWorkerMain.js',
'out-build/vs/**/markdown.css',
'out-build/vs/workbench/contrib/tasks/**/*.json',
'out-build/vs/platform/files/**/*.exe',
diff --git a/build/lib/eslint/vscode-dts-literal-or-types.js b/build/lib/eslint/vscode-dts-literal-or-types.js
index b2aadf2bf9..a259a9c318 100644
--- a/build/lib/eslint/vscode-dts-literal-or-types.js
+++ b/build/lib/eslint/vscode-dts-literal-or-types.js
@@ -13,6 +13,10 @@ module.exports = new class ApiLiteralOrTypes {
create(context) {
return {
['TSTypeAnnotation TSUnionType TSLiteralType']: (node) => {
+ var _a;
+ if (((_a = node.literal) === null || _a === void 0 ? void 0 : _a.type) === 'TSNullKeyword') {
+ return;
+ }
context.report({
node: node,
messageId: 'useEnum'
diff --git a/build/lib/eslint/vscode-dts-literal-or-types.ts b/build/lib/eslint/vscode-dts-literal-or-types.ts
index 5258bfd455..0d7130aaa0 100644
--- a/build/lib/eslint/vscode-dts-literal-or-types.ts
+++ b/build/lib/eslint/vscode-dts-literal-or-types.ts
@@ -15,6 +15,9 @@ export = new class ApiLiteralOrTypes implements eslint.Rule.RuleModule {
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return {
['TSTypeAnnotation TSUnionType TSLiteralType']: (node: any) => {
+ if (node.literal?.type === 'TSNullKeyword') {
+ return;
+ }
context.report({
node: node,
messageId: 'useEnum'
diff --git a/build/lib/extensions.js b/build/lib/extensions.js
index 2e0a9e4fd8..2623b3cc4a 100644
--- a/build/lib/extensions.js
+++ b/build/lib/extensions.js
@@ -4,7 +4,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
-exports.packageRebuildExtensionsStream = exports.cleanRebuildExtensions = exports.packageExternalExtensionsStream = exports.packageMarketplaceWebExtensionsStream = exports.packageMarketplaceExtensionsStream = exports.packageLocalWebExtensionsStream = exports.packageLocalExtensionsStream = exports.fromMarketplace = void 0;
+exports.translatePackageJSON = exports.packageRebuildExtensionsStream = exports.cleanRebuildExtensions = exports.packageExternalExtensionsStream = exports.scanBuiltinExtensions = exports.packageMarketplaceWebExtensionsStream = exports.packageMarketplaceExtensionsStream = exports.packageLocalWebExtensionsStream = exports.packageLocalExtensionsStream = exports.fromMarketplace = void 0;
const es = require("event-stream");
const fs = require("fs");
const glob = require("glob");
@@ -291,6 +291,38 @@ function packageMarketplaceWebExtensionsStream(builtInExtensions) {
return es.merge(extensions);
}
exports.packageMarketplaceWebExtensionsStream = packageMarketplaceWebExtensionsStream;
+function scanBuiltinExtensions(extensionsRoot, forWeb) {
+ const scannedExtensions = [];
+ const extensionsFolders = fs.readdirSync(extensionsRoot);
+ for (const extensionFolder of extensionsFolders) {
+ const packageJSONPath = path.join(extensionsRoot, extensionFolder, 'package.json');
+ if (!fs.existsSync(packageJSONPath)) {
+ continue;
+ }
+ let packageJSON = JSON.parse(fs.readFileSync(packageJSONPath).toString('utf8'));
+ const extensionKind = packageJSON['extensionKind'] || [];
+ if (forWeb && extensionKind.indexOf('web') === -1) {
+ continue;
+ }
+ const children = fs.readdirSync(path.join(extensionsRoot, extensionFolder));
+ const packageNLS = children.filter(child => child === 'package.nls.json')[0];
+ const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0];
+ const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0];
+ if (packageNLS) {
+ // temporary
+ packageJSON = translatePackageJSON(packageJSON, path.join(extensionsRoot, extensionFolder, packageNLS));
+ }
+ scannedExtensions.push({
+ extensionPath: extensionFolder,
+ packageJSON,
+ packageNLSPath: packageNLS ? path.join(extensionFolder, packageNLS) : undefined,
+ readmePath: readme ? path.join(extensionFolder, readme) : undefined,
+ changelogPath: changelog ? path.join(extensionFolder, changelog) : undefined,
+ });
+ }
+ return scannedExtensions;
+}
+exports.scanBuiltinExtensions = scanBuiltinExtensions;
function packageExternalExtensionsStream() {
const extenalExtensionDescriptions = glob.sync('extensions/*/package.json')
.map(manifestPath => {
@@ -306,6 +338,7 @@ function packageExternalExtensionsStream() {
return es.merge(builtExtensions);
}
exports.packageExternalExtensionsStream = packageExternalExtensionsStream;
+// {{SQL CARBON EDIT}} start
function cleanRebuildExtensions(root) {
return Promise.all(rebuildExtensions.map(async (e) => {
await util2.rimraf(path.join(root, e))();
@@ -327,3 +360,28 @@ function packageRebuildExtensionsStream() {
return es.merge(builtExtensions);
}
exports.packageRebuildExtensionsStream = packageRebuildExtensionsStream;
+// {{SQL CARBON EDIT}} end
+function translatePackageJSON(packageJSON, packageNLSPath) {
+ const CharCode_PC = '%'.charCodeAt(0);
+ const packageNls = JSON.parse(fs.readFileSync(packageNLSPath).toString());
+ const translate = (obj) => {
+ for (let key in obj) {
+ const val = obj[key];
+ if (Array.isArray(val)) {
+ val.forEach(translate);
+ }
+ else if (val && typeof val === 'object') {
+ translate(val);
+ }
+ else if (typeof val === 'string' && val.charCodeAt(0) === CharCode_PC && val.charCodeAt(val.length - 1) === CharCode_PC) {
+ const translated = packageNls[val.substr(1, val.length - 2)];
+ if (translated) {
+ obj[key] = translated;
+ }
+ }
+ }
+ };
+ translate(packageJSON);
+ return packageJSON;
+}
+exports.translatePackageJSON = translatePackageJSON;
diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts
index 589b5a8e64..80ca127b34 100644
--- a/build/lib/extensions.ts
+++ b/build/lib/extensions.ts
@@ -340,6 +340,47 @@ export function packageMarketplaceWebExtensionsStream(builtInExtensions: IBuiltI
return es.merge(extensions);
}
+export interface IScannedBuiltinExtension {
+ extensionPath: string,
+ packageJSON: any,
+ packageNLSPath?: string,
+ readmePath?: string,
+ changelogPath?: string,
+}
+
+export function scanBuiltinExtensions(extensionsRoot: string, forWeb: boolean): IScannedBuiltinExtension[] {
+ const scannedExtensions: IScannedBuiltinExtension[] = [];
+ const extensionsFolders = fs.readdirSync(extensionsRoot);
+ for (const extensionFolder of extensionsFolders) {
+ const packageJSONPath = path.join(extensionsRoot, extensionFolder, 'package.json');
+ if (!fs.existsSync(packageJSONPath)) {
+ continue;
+ }
+ let packageJSON = JSON.parse(fs.readFileSync(packageJSONPath).toString('utf8'));
+ const extensionKind: string[] = packageJSON['extensionKind'] || [];
+ if (forWeb && extensionKind.indexOf('web') === -1) {
+ continue;
+ }
+ const children = fs.readdirSync(path.join(extensionsRoot, extensionFolder));
+ const packageNLS = children.filter(child => child === 'package.nls.json')[0];
+ const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0];
+ const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0];
+
+ if (packageNLS) {
+ // temporary
+ packageJSON = translatePackageJSON(packageJSON, path.join(extensionsRoot, extensionFolder, packageNLS));
+ }
+ scannedExtensions.push({
+ extensionPath: extensionFolder,
+ packageJSON,
+ packageNLSPath: packageNLS ? path.join(extensionFolder, packageNLS) : undefined,
+ readmePath: readme ? path.join(extensionFolder, readme) : undefined,
+ changelogPath: changelog ? path.join(extensionFolder, changelog) : undefined,
+ });
+ }
+ return scannedExtensions;
+}
+
export function packageExternalExtensionsStream(): NodeJS.ReadWriteStream {
const extenalExtensionDescriptions = (glob.sync('extensions/*/package.json'))
.map(manifestPath => {
@@ -357,6 +398,7 @@ export function packageExternalExtensionsStream(): NodeJS.ReadWriteStream {
return es.merge(builtExtensions);
}
+// {{SQL CARBON EDIT}} start
export function cleanRebuildExtensions(root: string): Promise {
return Promise.all(rebuildExtensions.map(async e => {
await util2.rimraf(path.join(root, e))();
@@ -379,3 +421,26 @@ export function packageRebuildExtensionsStream(): NodeJS.ReadWriteStream {
return es.merge(builtExtensions);
}
+// {{SQL CARBON EDIT}} end
+
+export function translatePackageJSON(packageJSON: string, packageNLSPath: string) {
+ const CharCode_PC = '%'.charCodeAt(0);
+ const packageNls = JSON.parse(fs.readFileSync(packageNLSPath).toString());
+ const translate = (obj: any) => {
+ for (let key in obj) {
+ const val = obj[key];
+ if (Array.isArray(val)) {
+ val.forEach(translate);
+ } else if (val && typeof val === 'object') {
+ translate(val);
+ } else if (typeof val === 'string' && val.charCodeAt(0) === CharCode_PC && val.charCodeAt(val.length - 1) === CharCode_PC) {
+ const translated = packageNls[val.substr(1, val.length - 2)];
+ if (translated) {
+ obj[key] = translated;
+ }
+ }
+ }
+ };
+ translate(packageJSON);
+ return packageJSON;
+}
diff --git a/build/lib/i18n.js b/build/lib/i18n.js
index 9906ed3bd3..904ef2ab75 100644
--- a/build/lib/i18n.js
+++ b/build/lib/i18n.js
@@ -16,7 +16,7 @@ const https = require("https");
const gulp = require("gulp");
const fancyLog = require("fancy-log");
const ansiColors = require("ansi-colors");
-const iconv = require("iconv-lite");
+const iconv = require("iconv-lite-umd");
const NUMBER_OF_CONCURRENT_DOWNLOADS = 4;
function log(message, ...rest) {
fancyLog(ansiColors.green('[i18n]'), message, ...rest);
@@ -1181,9 +1181,10 @@ function createIslFile(originalFilePath, messages, language, innoSetup) {
});
const basename = path.basename(originalFilePath);
const filePath = `${basename}.${language.id}.isl`;
+ const encoded = iconv.encode(Buffer.from(content.join('\r\n'), 'utf8').toString(), innoSetup.codePage);
return new File({
path: filePath,
- contents: iconv.encode(Buffer.from(content.join('\r\n'), 'utf8').toString(), innoSetup.codePage)
+ contents: Buffer.from(encoded),
});
}
function encodeEntities(value) {
diff --git a/build/lib/i18n.resources.json b/build/lib/i18n.resources.json
index 93a6992e41..9bba404c24 100644
--- a/build/lib/i18n.resources.json
+++ b/build/lib/i18n.resources.json
@@ -218,6 +218,10 @@
"name": "vs/workbench/contrib/userDataSync",
"project": "vscode-workbench"
},
+ {
+ "name": "vs/workbench/contrib/views",
+ "project": "vscode-workbench"
+ },
{
"name": "vs/workbench/services/actions",
"project": "vscode-workbench"
diff --git a/build/lib/i18n.ts b/build/lib/i18n.ts
index 856719574d..decc7dfd92 100644
--- a/build/lib/i18n.ts
+++ b/build/lib/i18n.ts
@@ -15,7 +15,7 @@ import * as https from 'https';
import * as gulp from 'gulp';
import * as fancyLog from 'fancy-log';
import * as ansiColors from 'ansi-colors';
-import * as iconv from 'iconv-lite';
+import * as iconv from 'iconv-lite-umd';
const NUMBER_OF_CONCURRENT_DOWNLOADS = 4;
@@ -1347,10 +1347,11 @@ function createIslFile(originalFilePath: string, messages: Map, language
const basename = path.basename(originalFilePath);
const filePath = `${basename}.${language.id}.isl`;
+ const encoded = iconv.encode(Buffer.from(content.join('\r\n'), 'utf8').toString(), innoSetup.codePage);
return new File({
path: filePath,
- contents: iconv.encode(Buffer.from(content.join('\r\n'), 'utf8').toString(), innoSetup.codePage)
+ contents: Buffer.from(encoded),
});
}
diff --git a/build/package.json b/build/package.json
index 1081867e6e..09863d4011 100644
--- a/build/package.json
+++ b/build/package.json
@@ -40,7 +40,7 @@
"gulp-bom": "^1.0.0",
"gulp-sourcemaps": "^1.11.0",
"gulp-uglify": "^3.0.0",
- "iconv-lite": "0.6.0",
+ "iconv-lite-umd": "0.6.5",
"mime": "^1.3.4",
"minimatch": "3.0.4",
"minimist": "^1.2.3",
@@ -49,9 +49,9 @@
"rollup-plugin-commonjs": "^10.1.0",
"rollup-plugin-node-resolve": "^5.2.0",
"terser": "4.3.8",
- "typescript": "^4.0.0-dev.20200615",
+ "typescript": "^4.0.0-dev.20200629",
"vsce": "1.48.0",
- "vscode-telemetry-extractor": "^1.5.4",
+ "vscode-telemetry-extractor": "^1.6.0",
"xml2js": "^0.4.17"
},
"scripts": {
diff --git a/build/win32/code.iss b/build/win32/code.iss
index ed22782db3..321f8be01b 100644
--- a/build/win32/code.iss
+++ b/build/win32/code.iss
@@ -265,7 +265,7 @@ begin
end;
end;
-// http://stackoverflow.com/a/23838239/261019
+// https://stackoverflow.com/a/23838239/261019
procedure Explode(var Dest: TArrayOfString; Text: String; Separator: String);
var
i, p: Integer;
diff --git a/build/yarn.lock b/build/yarn.lock
index 56b3835ef2..61f64b4f43 100644
--- a/build/yarn.lock
+++ b/build/yarn.lock
@@ -420,6 +420,11 @@ acorn@^7.0.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c"
integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==
+agent-base@5:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c"
+ integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==
+
ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
@@ -1043,7 +1048,7 @@ debug@2.X, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
dependencies:
ms "2.0.0"
-debug@^4.1.1:
+debug@4, debug@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
@@ -1804,12 +1809,18 @@ http-signature@~1.2.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
-iconv-lite@0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.0.tgz#66a93b80df0bd05d2a43a7426296b7f91073f125"
- integrity sha512-43ZpGYZ9QtuutX5l6WC1DSO8ane9N+Ct5qPLF2OV7vM9abM69gnAbVkh66ibaZd3aOGkoP1ZmringlKhLBkw2Q==
+https-proxy-agent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b"
+ integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==
dependencies:
- safer-buffer ">= 2.1.2 < 3"
+ agent-base "5"
+ debug "4"
+
+iconv-lite-umd@0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.5.tgz#6a1f621a3b4d125f72feff813a9839e1ebd6c722"
+ integrity sha512-WDegH4al+e3n3jTOStRvm+jzDA3JMUQGgzdAsMxAgcgB0Oi72HjfdsoX08ieKsy3rKexXVjWZr41aOIUaCZnMg==
iconv-lite@^0.4.4:
version "0.4.24"
@@ -2809,6 +2820,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
@@ -3523,10 +3539,10 @@ typescript@^3.0.1:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977"
integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==
-typescript@^4.0.0-dev.20200615:
- version "4.0.0-dev.20200615"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.0-dev.20200615.tgz#5c06a0d5f25a29a018767970c6531fbbed7240e3"
- integrity sha512-OD7KRTLimUwW5E1xHsAqXNjw0O0Krk9CgRVFYkqANv4fZisaN1LJI06u30D5QiNnHBzm2nBSzZIAhjj4MUqaRA==
+typescript@^4.0.0-dev.20200629:
+ version "4.0.0-dev.20200629"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.0-dev.20200629.tgz#4631667ebffe3a340beee885a4bebe3a73b6f18e"
+ integrity sha512-c4DUu7KvTcx4x7V8sBWexYNkCfioiH1huOJL6WFAA8Oot0Gr/+PlKKDBS9fYjsadEv1JI1qboJKobwLQn0kQXw==
typical@^4.0.0:
version "4.0.0"
@@ -3686,19 +3702,22 @@ vsce@1.48.0:
yauzl "^2.3.1"
yazl "^2.2.2"
-vscode-ripgrep@^1.5.6:
- version "1.5.7"
- resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.5.7.tgz#acb6b548af488a4bca5d0f1bb5faf761343289ce"
- integrity sha512-/Vsz/+k8kTvui0q3O74pif9FK0nKopgFTiGNVvxicZANxtSA8J8gUE9GQ/4dpi7D/2yI/YVORszwVskFbz46hQ==
+vscode-ripgrep@^1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.6.2.tgz#fb912c7465699f10ce0218a6676cc632c77369b4"
+ integrity sha512-jkZEWnQFcE+QuQFfxQXWcWtDafTmgkp3DjMKawDkajZwgnDlGKpFp15ybKrZNVTi1SLEF/12BzxYSZVVZ2XrkA==
+ dependencies:
+ https-proxy-agent "^4.0.0"
+ proxy-from-env "^1.1.0"
-vscode-telemetry-extractor@^1.5.4:
- version "1.5.4"
- resolved "https://registry.yarnpkg.com/vscode-telemetry-extractor/-/vscode-telemetry-extractor-1.5.4.tgz#bcb0d17667fa1b77715e3a3bf372ade18f846782"
- integrity sha512-MN9LNPo0Rc6cy3sIWTAG97PTWkEKdRnP0VeYoS8vjKSNtG9CAsrUxHgFfYoHm2vNK/ijd0a4NzETyVGO2kT6hw==
+vscode-telemetry-extractor@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/vscode-telemetry-extractor/-/vscode-telemetry-extractor-1.6.0.tgz#e9d9c1d24863cce8d3d715f0287de3b31eb90c56"
+ integrity sha512-zSxvkbyAMa1lTRGIHfGg7gW2e9Sey+2zGYD19uNWCsVEfoXAr2NB6uzb0sNHtbZ2SSqxSePmFXzBAavsudT5fw==
dependencies:
command-line-args "^5.1.1"
ts-morph "^3.1.3"
- vscode-ripgrep "^1.5.6"
+ vscode-ripgrep "^1.6.2"
vso-node-api@6.1.2-preview:
version "6.1.2-preview"
diff --git a/cglicenses.json b/cglicenses.json
index fcbac22e31..f2d5a39a2b 100644
--- a/cglicenses.json
+++ b/cglicenses.json
@@ -200,6 +200,135 @@
},
{
"name": "big-integer",
- "prependLicenseText": ["Copyright released to public domain"]
+ "prependLicenseText": [
+ "Copyright released to public domain"
+ ]
+ },
+ {
+ // Reason: The license at https://github.com/justmoon/node-extend/blob/main/LICENSE
+ // cannot be found by the OSS tool automatically.
+ "name": "extend",
+ "fullLicenseText": [
+ "The MIT License (MIT)",
+ "",
+ "Copyright (c) 2014 Stefan Thomas",
+ "",
+ "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."
+ ]
+ },
+ {
+ // Reason: The license at https://github.com/retep998/winapi-rs/blob/0.3/LICENSE-MIT
+ // cannot be found by the OSS tool automatically.
+ "name": "retep998/winapi-rs",
+ "fullLicenseText": [
+ "Copyright (c) 2015-2018 The winapi-rs Developers",
+ "",
+ "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."
+ ]
+ },
+ {
+ // Reason: The license at https://github.com/digitaldesignlabs/es6-promisify/blob/main/LICENSE
+ // cannot be found by the OSS tool automatically.
+ "name": "es6-promisify",
+ "fullLicenseText": [
+ "Copyright (c) 2014 Mike Hall / Digital Design Labs",
+ "",
+ "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."
+ ]
+ },
+ {
+ // Reason: The license at https://github.com/zkat/json-parse-better-errors/blob/latest/LICENSE.md
+ // cannot be found by the OSS tool automatically.
+ "name": "json-parse-better-errors",
+ "fullLicenseText": [
+ "Copyright 2017 Kat Marchán",
+ "",
+ "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."
+ ]
+ },
+ {
+ // Reason: The license at https://github.com/time-rs/time/blob/main/LICENSE-MIT
+ // cannot be found by the OSS tool automatically.
+ "name": "time-rs/time",
+ "fullLicenseText": [
+ "Copyright (c) 2019 Jacob Pratt",
+ "",
+ "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/cgmanifest.json b/cgmanifest.json
index b1fd733d7e..25178f2f20 100644
--- a/cgmanifest.json
+++ b/cgmanifest.json
@@ -60,12 +60,12 @@
"git": {
"name": "electron",
"repositoryUrl": "https://github.com/electron/electron",
- "commitHash": "bc8fc0d406d32e4c02f3ec9f161deaacbe4f5989"
+ "commitHash": "5f93e889020d279d5a9cd1ecab080ab467312447"
}
},
"isOnlyProductionDependency": true,
"license": "MIT",
- "version": "7.3.1"
+ "version": "7.3.2"
},
{
"component": {
@@ -77,6 +77,40 @@
}
},
"isOnlyProductionDependency": true,
+ "licenseDetail": [
+ "Inno Setup License",
+ "==================",
+ "",
+ "Except where otherwise noted, all of the documentation and software included in the Inno Setup",
+ "package is copyrighted by Jordan Russell.",
+ "",
+ "Copyright (C) 1997-2020 Jordan Russell. All rights reserved.",
+ "Portions Copyright (C) 2000-2020 Martijn Laan. All rights reserved.",
+ "",
+ "This software is provided \"as-is,\" without any express or implied warranty. In no event shall the",
+ "author be held liable for any damages arising from the use of this software.",
+ "",
+ "Permission is granted to anyone to use this software for any purpose, including commercial",
+ "applications, and to alter and redistribute it, provided that the following conditions are met:",
+ "",
+ "1. All redistributions of source code files must retain all copyright notices that are currently in",
+ " place, and this list of conditions without modification.",
+ "",
+ "2. All redistributions in binary form must retain all occurrences of the above copyright notice and",
+ " web site addresses that are currently in place (for example, in the About boxes).",
+ "",
+ "3. The origin of this software must not be misrepresented; you must not claim that you wrote the",
+ " original software. If you use this software to distribute a product, an acknowledgment in the",
+ " product documentation would be appreciated but is not required.",
+ "",
+ "4. Modified versions in source or binary form must be plainly marked as such, and must not be",
+ " misrepresented as being the original software.",
+ "",
+ "",
+ "Jordan Russell",
+ "jr-2010 AT jrsoftware.org",
+ "https://jrsoftware.org/"
+ ],
"version": "5.5.6"
},
{
diff --git a/extensions/configuration-editing/extension-browser.webpack.config.js b/extensions/configuration-editing/extension-browser.webpack.config.js
index cd76f68c8c..8c21467f46 100644
--- a/extensions/configuration-editing/extension-browser.webpack.config.js
+++ b/extensions/configuration-editing/extension-browser.webpack.config.js
@@ -7,27 +7,15 @@
'use strict';
-const withDefaults = require('../shared.webpack.config');
-const path = require('path');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-const clientConfig = withDefaults({
- target: 'webworker',
+module.exports = withBrowserDefaults({
context: __dirname,
entry: {
extension: './src/configurationEditingMain.ts'
},
output: {
filename: 'configurationEditingMain.js'
- },
- performance: {
- hints: false
- },
- resolve: {
- alias: {
- 'vscode-nls': path.resolve(__dirname, '../../build/polyfills/vscode-nls.js')
- }
}
});
-clientConfig.module.rules[0].use.shift(); // remove nls loader
-module.exports = clientConfig;
diff --git a/extensions/configuration-editing/package.json b/extensions/configuration-editing/package.json
index 023745d0c2..477d530a0e 100644
--- a/extensions/configuration-editing/package.json
+++ b/extensions/configuration-editing/package.json
@@ -13,7 +13,7 @@
"onLanguage:jsonc"
],
"main": "./out/configurationEditingMain",
- "browser": "./dist/configurationEditingMain",
+ "browser": "./dist/browser/configurationEditingMain",
"scripts": {
"compile": "gulp compile-extension:configuration-editing",
"watch": "gulp watch-extension:configuration-editing"
@@ -117,6 +117,10 @@
"fileMatch": "/.devcontainer.json",
"url": "./schemas/devContainer.schema.json"
},
+ {
+ "fileMatch": "%APP_SETTINGS_HOME%/globalStorage/ms-vscode-remote.remote-containers/nameConfigs/*.json",
+ "url": "./schemas/attachContainer.schema.json"
+ },
{
"fileMatch": "%APP_SETTINGS_HOME%/globalStorage/ms-vscode-remote.remote-containers/imageConfigs/*.json",
"url": "./schemas/attachContainer.schema.json"
diff --git a/extensions/configuration-editing/schemas/attachContainer.schema.json b/extensions/configuration-editing/schemas/attachContainer.schema.json
index c5d46bb836..da06cb1c9f 100644
--- a/extensions/configuration-editing/schemas/attachContainer.schema.json
+++ b/extensions/configuration-editing/schemas/attachContainer.schema.json
@@ -42,8 +42,8 @@
"description": "An array of extensions that should be installed into the container.",
"items": {
"type": "string",
- "pattern": "^([a-z0-9A-Z][a-z0-9\\-A-Z]*)\\.([a-z0-9A-Z][a-z0-9\\-A-Z]*)$",
- "errorMessage": "Expected format '${publisher}.${name}'. Example: 'vscode.csharp'."
+ "pattern": "^([a-z0-9A-Z][a-z0-9\\-A-Z]*)\\.([a-z0-9A-Z][a-z0-9\\-A-Z]*)(@(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?$",
+ "errorMessage": "Expected format: '${publisher}.${name}' or '${publisher}.${name}@${version}'. Example: 'ms-dotnettools.csharp'."
}
},
"postAttachCommand": {
diff --git a/extensions/configuration-editing/schemas/devContainer.schema.json b/extensions/configuration-editing/schemas/devContainer.schema.json
index abf7469d35..596672dede 100644
--- a/extensions/configuration-editing/schemas/devContainer.schema.json
+++ b/extensions/configuration-editing/schemas/devContainer.schema.json
@@ -17,8 +17,8 @@
"description": "An array of extensions that should be installed into the container.",
"items": {
"type": "string",
- "pattern": "^([a-z0-9A-Z][a-z0-9\\-A-Z]*)\\.([a-z0-9A-Z][a-z0-9\\-A-Z]*)$",
- "errorMessage": "Expected format '${publisher}.${name}'. Example: 'vscode.csharp'."
+ "pattern": "^([a-z0-9A-Z][a-z0-9\\-A-Z]*)\\.([a-z0-9A-Z][a-z0-9\\-A-Z]*)(@(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?)?$",
+ "errorMessage": "Expected format: '${publisher}.${name}' or '${publisher}.${name}@${version}'. Example: 'ms-dotnettools.csharp'."
}
},
"settings": {
diff --git a/extensions/git/package.json b/extensions/git/package.json
index 318c6e733c..e5e78fd3d8 100644
--- a/extensions/git/package.json
+++ b/extensions/git/package.json
@@ -432,8 +432,8 @@
},
{
"command": "git.unstageSelectedRanges",
- "key": "ctrl+k ctrl+u",
- "mac": "cmd+k cmd+u",
+ "key": "ctrl+k ctrl+n",
+ "mac": "cmd+k cmd+n",
"when": "isInDiffEditor"
},
{
@@ -1878,7 +1878,7 @@
"dependencies": {
"byline": "^5.0.0",
"file-type": "^7.2.0",
- "iconv-lite": "0.6.0",
+ "iconv-lite-umd": "0.6.5",
"jschardet": "2.1.1",
"vscode-extension-telemetry": "0.1.1",
"vscode-nls": "^4.0.0",
diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts
index d3ee8bb27b..8239627b87 100644
--- a/extensions/git/src/decorationProvider.ts
+++ b/extensions/git/src/decorationProvider.ts
@@ -8,15 +8,15 @@ import * as path from 'path';
import { Repository, GitResourceGroup } from './repository';
import { Model } from './model';
import { debounce } from './decorators';
-import { filterEvent, dispose, anyEvent, fireEvent } from './util';
+import { filterEvent, dispose, anyEvent, fireEvent, PromiseSource } from './util';
import { GitErrorCodes, Status } from './api/git';
-type Callback = { resolve: (status: boolean) => void, reject: (err: any) => void };
-
class GitIgnoreDecorationProvider implements DecorationProvider {
+ private static Decoration: Decoration = { priority: 3, color: new ThemeColor('gitDecoration.ignoredResourceForeground') };
+
readonly onDidChangeDecorations: Event;
- private queue = new Map; }>();
+ private queue = new Map>; }>();
private disposables: Disposable[] = [];
constructor(private model: Model) {
@@ -29,32 +29,29 @@ class GitIgnoreDecorationProvider implements DecorationProvider {
this.disposables.push(window.registerDecorationProvider(this));
}
- provideDecoration(uri: Uri): Promise {
+ async provideDecoration(uri: Uri): Promise {
const repository = this.model.getRepository(uri);
if (!repository) {
- return Promise.resolve(undefined);
+ return;
}
let queueItem = this.queue.get(repository.root);
if (!queueItem) {
- queueItem = { repository, queue: new Map() };
+ queueItem = { repository, queue: new Map>() };
this.queue.set(repository.root, queueItem);
}
- return new Promise((resolve, reject) => {
- queueItem!.queue.set(uri.fsPath, { resolve, reject });
+ let promiseSource = queueItem.queue.get(uri.fsPath);
+
+ if (!promiseSource) {
+ promiseSource = new PromiseSource();
+ queueItem!.queue.set(uri.fsPath, promiseSource);
this.checkIgnoreSoon();
- }).then(ignored => {
- if (ignored) {
- return {
- priority: 3,
- color: new ThemeColor('gitDecoration.ignoredResourceForeground')
- };
- }
- return undefined;
- });
+ }
+
+ return await promiseSource.promise;
}
@debounce(500)
@@ -66,16 +63,16 @@ class GitIgnoreDecorationProvider implements DecorationProvider {
const paths = [...item.queue.keys()];
item.repository.checkIgnore(paths).then(ignoreSet => {
- for (const [key, value] of item.queue.entries()) {
- value.resolve(ignoreSet.has(key));
+ for (const [path, promiseSource] of item.queue.entries()) {
+ promiseSource.resolve(ignoreSet.has(path) ? GitIgnoreDecorationProvider.Decoration : undefined);
}
}, err => {
if (err.gitErrorCode !== GitErrorCodes.IsInSubmodule) {
console.error(err);
}
- for (const [, value] of item.queue.entries()) {
- value.reject(err);
+ for (const [, promiseSource] of item.queue.entries()) {
+ promiseSource.reject(err);
}
});
}
diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts
index 55d9d12b50..326bc19e4e 100644
--- a/extensions/git/src/git.ts
+++ b/extensions/git/src/git.ts
@@ -9,7 +9,7 @@ import * as os from 'os';
import * as cp from 'child_process';
import * as which from 'which';
import { EventEmitter } from 'events';
-import iconv = require('iconv-lite');
+import * as iconv from 'iconv-lite-umd';
import * as filetype from 'file-type';
import { assign, groupBy, IDisposable, toDisposable, dispose, mkdirp, readBytes, detectUnicodeEncoding, Encoding, onceEvent, splitInChunks, Limiter } from './util';
import { CancellationToken, Progress, Uri } from 'vscode';
@@ -1939,6 +1939,17 @@ export class Repository {
return message.replace(/^\s*#.*$\n?/gm, '').trim();
}
+ async getSquashMessage(): Promise {
+ const squashMsgPath = path.join(this.repositoryRoot, '.git', 'SQUASH_MSG');
+
+ try {
+ const raw = await fs.readFile(squashMsgPath, 'utf8');
+ return this.stripCommitMessageComments(raw);
+ } catch {
+ return undefined;
+ }
+ }
+
async getMergeMessage(): Promise {
const mergeMsgPath = path.join(this.repositoryRoot, '.git', 'MERGE_MSG');
diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts
index e7c162dd9a..ea3feabd01 100644
--- a/extensions/git/src/repository.ts
+++ b/extensions/git/src/repository.ts
@@ -537,7 +537,7 @@ class DotGitWatcher implements IFileWatcher {
upstreamWatcher.event(this.emitter.fire, this.emitter, this.transientDisposables);
} catch (err) {
if (Log.logLevel <= LogLevel.Error) {
- this.outputChannel.appendLine(`Failed to watch ref '${upstreamPath}', is most likely packed.\n${err.stack || err}`);
+ this.outputChannel.appendLine(`Warning: Failed to watch ref '${upstreamPath}', is most likely packed.`);
}
}
}
@@ -729,10 +729,10 @@ export class Repository implements Disposable {
this.updateInputBoxPlaceholder();
this.disposables.push(this.onDidRunGitStatus(() => this.updateInputBoxPlaceholder()));
- this._mergeGroup = this._sourceControl.createResourceGroup('merge', localize('merge changes', "MERGE CHANGES"));
- this._indexGroup = this._sourceControl.createResourceGroup('index', localize('staged changes', "STAGED CHANGES"));
- this._workingTreeGroup = this._sourceControl.createResourceGroup('workingTree', localize('changes', "CHANGES"));
- this._untrackedGroup = this._sourceControl.createResourceGroup('untracked', localize('untracked changes', "UNTRACKED CHANGES"));
+ this._mergeGroup = this._sourceControl.createResourceGroup('merge', localize('merge changes', "Merge Changes"));
+ this._indexGroup = this._sourceControl.createResourceGroup('index', localize('staged changes', "Staged Changes"));
+ this._workingTreeGroup = this._sourceControl.createResourceGroup('workingTree', localize('changes', "Changes"));
+ this._untrackedGroup = this._sourceControl.createResourceGroup('untracked', localize('untracked changes', "Untracked Changes"));
const updateIndexGroupVisibility = () => {
const config = workspace.getConfiguration('git', root);
@@ -865,10 +865,10 @@ export class Repository implements Disposable {
}
async getInputTemplate(): Promise {
- const mergeMessage = await this.repository.getMergeMessage();
+ const commitMessage = (await Promise.all([this.repository.getMergeMessage(), this.repository.getSquashMessage()])).find(msg => msg !== undefined);
- if (mergeMessage) {
- return mergeMessage;
+ if (commitMessage) {
+ return commitMessage;
}
return await this.repository.getCommitTemplate();
diff --git a/extensions/git/src/util.ts b/extensions/git/src/util.ts
index 2d3a764f80..221f2a65a2 100644
--- a/extensions/git/src/util.ts
+++ b/extensions/git/src/util.ts
@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { Event, Disposable } from 'vscode';
+import { Event, Disposable, EventEmitter } from 'vscode';
import { dirname, sep } from 'path';
import { Readable } from 'stream';
import { promises as fs, createReadStream } from 'fs';
@@ -400,3 +400,39 @@ export class Limiter {
}
}
}
+
+type Completion = { success: true, value: T } | { success: false, err: any };
+
+export class PromiseSource {
+
+ private _onDidComplete = new EventEmitter>();
+
+ private _promise: Promise | undefined;
+ get promise(): Promise {
+ if (this._promise) {
+ return this._promise;
+ }
+
+ return eventToPromise(this._onDidComplete.event).then(completion => {
+ if (completion.success) {
+ return completion.value;
+ } else {
+ throw completion.err;
+ }
+ });
+ }
+
+ resolve(value: T): void {
+ if (!this._promise) {
+ this._promise = Promise.resolve(value);
+ this._onDidComplete.fire({ success: true, value });
+ }
+ }
+
+ reject(err: any): void {
+ if (!this._promise) {
+ this._promise = Promise.reject(err);
+ this._onDidComplete.fire({ success: false, err });
+ }
+ }
+}
diff --git a/extensions/git/yarn.lock b/extensions/git/yarn.lock
index f03bee0ad5..35277c4713 100644
--- a/extensions/git/yarn.lock
+++ b/extensions/git/yarn.lock
@@ -425,12 +425,10 @@ https-proxy-agent@^2.2.1:
agent-base "^4.3.0"
debug "^3.1.0"
-iconv-lite@0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.0.tgz#66a93b80df0bd05d2a43a7426296b7f91073f125"
- integrity sha512-43ZpGYZ9QtuutX5l6WC1DSO8ane9N+Ct5qPLF2OV7vM9abM69gnAbVkh66ibaZd3aOGkoP1ZmringlKhLBkw2Q==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
+iconv-lite-umd@0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.5.tgz#6a1f621a3b4d125f72feff813a9839e1ebd6c722"
+ integrity sha512-WDegH4al+e3n3jTOStRvm+jzDA3JMUQGgzdAsMxAgcgB0Oi72HjfdsoX08ieKsy3rKexXVjWZr41aOIUaCZnMg==
inflight@^1.0.4:
version "1.0.6"
@@ -748,7 +746,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
-"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
diff --git a/extensions/github-authentication/extension-browser.webpack.config.js b/extensions/github-authentication/extension-browser.webpack.config.js
index 9c37802ab9..46b8c2257a 100644
--- a/extensions/github-authentication/extension-browser.webpack.config.js
+++ b/extensions/github-authentication/extension-browser.webpack.config.js
@@ -8,11 +8,10 @@
'use strict';
const path = require('path');
-const withDefaults = require('../shared.webpack.config');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-module.exports = withDefaults({
+module.exports = withBrowserDefaults({
context: __dirname,
- target: 'webworker',
node: false,
entry: {
extension: './src/extension.ts',
@@ -20,30 +19,10 @@ module.exports = withDefaults({
externals: {
'keytar': 'commonjs keytar',
},
- // TODO@eamodio Deal with nls properly for the browser
- // Specify module here, so we can stop the vscode-nls-dev loader from overwriting nls calls
- module: {
- rules: [{
- test: /\.ts$/,
- exclude: /node_modules/,
- use: [{
- // configure TypeScript loader:
- // * enable sources maps for end-to-end source maps
- loader: 'ts-loader',
- options: {
- compilerOptions: {
- 'sourceMap': true,
- }
- }
- }]
- }]
- },
resolve: {
alias: {
'node-fetch': path.resolve(__dirname, 'node_modules/node-fetch/browser.js'),
- 'vscode-extension-telemetry': path.resolve(__dirname, '../../build/polyfills/vscode-extension-telemetry.js'),
- 'vscode-nls': path.resolve(__dirname, '../../build/polyfills/vscode-nls.js'),
'uuid': path.resolve(__dirname, 'node_modules/uuid/dist/esm-browser/index.js')
- },
+ }
}
});
diff --git a/extensions/github-authentication/package.json b/extensions/github-authentication/package.json
index b526e92146..0a4c850d7a 100644
--- a/extensions/github-authentication/package.json
+++ b/extensions/github-authentication/package.json
@@ -32,7 +32,7 @@
},
"aiKey": "AIF-d9b70cd4-b9f9-4d70-929b-a071c400b217",
"main": "./out/extension.js",
- "browser": "./dist/extension.js",
+ "browser": "./dist/browser/extension.js",
"scripts": {
"compile": "gulp compile-extension:github-authentication",
"compile-web": "npx webpack-cli --config extension-browser.webpack.config --mode none",
diff --git a/extensions/github-authentication/src/github.ts b/extensions/github-authentication/src/github.ts
index 252ac0aaf4..f86092fbd0 100644
--- a/extensions/github-authentication/src/github.ts
+++ b/extensions/github-authentication/src/github.ts
@@ -22,7 +22,7 @@ interface SessionData {
}
export class GitHubAuthenticationProvider {
- private _sessions: vscode.AuthenticationSession2[] = [];
+ private _sessions: vscode.AuthenticationSession[] = [];
private _githubServer = new GitHubServer();
public async initialize(): Promise {
@@ -37,7 +37,7 @@ export class GitHubAuthenticationProvider {
private pollForChange() {
setTimeout(async () => {
- let storedSessions: vscode.AuthenticationSession2[];
+ let storedSessions: vscode.AuthenticationSession[];
try {
storedSessions = await this.readSessions();
} catch (e) {
@@ -80,12 +80,12 @@ export class GitHubAuthenticationProvider {
}, 1000 * 30);
}
- private async readSessions(): Promise {
+ private async readSessions(): Promise {
const storedSessions = await keychain.getToken();
if (storedSessions) {
try {
const sessionData: SessionData[] = JSON.parse(storedSessions);
- const sessionPromises = sessionData.map(async (session: SessionData): Promise => {
+ const sessionPromises = sessionData.map(async (session: SessionData): Promise => {
const needsUserInfo = !session.account;
let userInfo: { id: string, accountName: string };
if (needsUserInfo) {
@@ -121,11 +121,11 @@ export class GitHubAuthenticationProvider {
await keychain.setToken(JSON.stringify(this._sessions));
}
- get sessions(): vscode.AuthenticationSession2[] {
+ get sessions(): vscode.AuthenticationSession[] {
return this._sessions;
}
- public async login(scopes: string): Promise {
+ public async login(scopes: string): Promise {
const token = await this._githubServer.login(scopes);
const session = await this.tokenToSession(token, scopes.split(' '));
await this.setToken(session);
@@ -136,12 +136,12 @@ export class GitHubAuthenticationProvider {
this._githubServer.manuallyProvideToken();
}
- private async tokenToSession(token: string, scopes: string[]): Promise {
+ private async tokenToSession(token: string, scopes: string[]): Promise {
const userInfo = await this._githubServer.getUserInfo(token);
- return new vscode.AuthenticationSession2(uuid(), token, { displayName: userInfo.accountName, id: userInfo.id }, scopes);
+ return new vscode.AuthenticationSession(uuid(), token, { displayName: userInfo.accountName, id: userInfo.id }, scopes);
}
- private async setToken(session: vscode.AuthenticationSession2): Promise {
+ private async setToken(session: vscode.AuthenticationSession): Promise {
const sessionIndex = this._sessions.findIndex(s => s.id === session.id);
if (sessionIndex > -1) {
this._sessions.splice(sessionIndex, 1, session);
diff --git a/extensions/github-browser/extension-browser.webpack.config.js b/extensions/github-browser/extension-browser.webpack.config.js
index f60d4b688f..c6d40d066e 100644
--- a/extensions/github-browser/extension-browser.webpack.config.js
+++ b/extensions/github-browser/extension-browser.webpack.config.js
@@ -7,18 +7,19 @@
'use strict';
const path = require('path');
-const withDefaults = require('../shared.webpack.config');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-module.exports = withDefaults({
+const config = withBrowserDefaults({
context: __dirname,
- target: 'webworker',
node: false,
entry: {
- extension: './src/extension.ts',
+ extension: './src/extension.ts'
},
resolve: {
alias: {
- 'node-fetch': path.resolve(__dirname, 'node_modules/node-fetch/browser.js'),
- },
+ 'node-fetch': path.resolve(__dirname, 'node_modules/node-fetch/browser.js')
+ }
}
});
+
+module.exports = config;
diff --git a/extensions/github-browser/package.json b/extensions/github-browser/package.json
index c5228c0a17..6e3c071b70 100644
--- a/extensions/github-browser/package.json
+++ b/extensions/github-browser/package.json
@@ -13,11 +13,93 @@
"Other"
],
"activationEvents": [
- "onFileSystem:github"
+ "onFileSystem:codespace",
+ "onFileSystem:github",
+ "onCommand:githubBrowser.openRepository"
],
- "browser": "./dist/extension.js",
+ "browser": "./dist/browser/extension.js",
"main": "./out/extension.js",
"contributes": {
+ "commands": [
+ {
+ "command": "githubBrowser.commit",
+ "title": "Commit",
+ "icon": "$(check)",
+ "category": "GitHub Browser"
+ },
+ {
+ "command": "githubBrowser.discardChanges",
+ "title": "Discard Changes",
+ "icon": "$(discard)",
+ "category": "GitHub Browser"
+ },
+ {
+ "command": "githubBrowser.openChanges",
+ "title": "Open Changes",
+ "icon": "$(git-compare)",
+ "category": "GitHub Browser"
+ },
+ {
+ "command": "githubBrowser.openFile",
+ "title": "Open File",
+ "icon": "$(go-to-file)",
+ "category": "GitHub Browser"
+ }
+ ],
+ "menus": {
+ "commandPalette": [
+ {
+ "command": "githubBrowser.commit",
+ "when": "false"
+ },
+ {
+ "command": "githubBrowser.discardChanges",
+ "when": "false"
+ },
+ {
+ "command": "githubBrowser.openChanges",
+ "when": "false"
+ },
+ {
+ "command": "githubBrowser.openFile",
+ "when": "false"
+ }
+ ],
+ "scm/title": [
+ {
+ "command": "githubBrowser.commit",
+ "group": "navigation",
+ "when": "scmProvider == github"
+ }
+ ],
+ "scm/resourceState/context": [
+ {
+ "command": "githubBrowser.openFile",
+ "when": "scmProvider == github && scmResourceGroup == github.changes",
+ "group": "inline@0"
+ },
+ {
+ "command": "githubBrowser.discardChanges",
+ "when": "scmProvider == github && scmResourceGroup == github.changes",
+ "group": "inline@1"
+ },
+ {
+ "command": "githubBrowser.openChanges",
+ "when": "scmProvider == github && scmResourceGroup == github.changes",
+ "group": "navigation@0"
+ },
+ {
+ "command": "githubBrowser.openFile",
+ "when": "scmProvider == github && scmResourceGroup == github.changes",
+ "group": "navigation@1"
+ },
+ {
+ "command": "githubBrowser.discardChanges",
+ "when": "scmProvider == github && scmResourceGroup == github.changes",
+ "group": "1_modification@0"
+ }
+ ]
+ },
"resourceLabelFormatters": [
{
"scheme": "github",
@@ -36,6 +118,24 @@
"separator": "/",
"workspaceSuffix": "GitHub"
}
+ },
+ {
+ "scheme": "codespace",
+ "authority": "HEAD",
+ "formatting": {
+ "label": "github.com${path}",
+ "separator": "/",
+ "workspaceSuffix": "GitHub"
+ }
+ },
+ {
+ "scheme": "codespace",
+ "authority": "*",
+ "formatting": {
+ "label": "github.com${path} (${authority})",
+ "separator": "/",
+ "workspaceSuffix": "GitHub"
+ }
}
]
},
@@ -47,14 +147,13 @@
"vscode:prepublish": "npm run compile"
},
"dependencies": {
- "@octokit/graphql": "4.5.0",
- "@octokit/rest": "17.11.0",
+ "@octokit/graphql": "4.5.1",
+ "@octokit/rest": "18.0.0",
"fuzzysort": "1.1.4",
- "node-fetch": "2.6.0"
+ "node-fetch": "2.6.0",
+ "vscode-nls": "4.1.2"
},
"devDependencies": {
- "@types/node-fetch": "2.5.7",
- "webpack": "4.43.0",
- "webpack-cli": "3.3.11"
+ "@types/node-fetch": "2.5.7"
}
}
diff --git a/extensions/github-browser/src/changeStore.ts b/extensions/github-browser/src/changeStore.ts
new file mode 100644
index 0000000000..26ba7f1071
--- /dev/null
+++ b/extensions/github-browser/src/changeStore.ts
@@ -0,0 +1,380 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+import { commands, Event, EventEmitter, FileStat, FileType, Memento, TextDocumentShowOptions, Uri, ViewColumn } from 'vscode';
+import { getRootUri, getRelativePath, isChild } from './extension';
+import { sha1 } from './sha1';
+
+const textDecoder = new TextDecoder();
+
+interface CreateOperation {
+ type: 'created';
+ size: number;
+ timestamp: number;
+ uri: T;
+ hash: string;
+ originalHash: string;
+}
+
+interface ChangeOperation {
+ type: 'changed';
+ size: number;
+ timestamp: number;
+ uri: T;
+ hash: string;
+ originalHash: string;
+}
+
+interface DeleteOperation {
+ type: 'deleted';
+ size: undefined;
+ timestamp: number;
+ uri: T;
+ hash: undefined;
+ originalHash: undefined;
+}
+
+export type Operation = CreateOperation | ChangeOperation | DeleteOperation;
+type StoredOperation = CreateOperation | ChangeOperation | DeleteOperation;
+
+const workingOperationsKeyPrefix = 'github.working.changes|';
+const workingFileKeyPrefix = 'github.working|';
+
+function fromSerialized(operations: StoredOperation): Operation {
+ return { ...operations, uri: Uri.parse(operations.uri) };
+}
+
+interface CreatedFileChangeStoreEvent {
+ type: 'created';
+ rootUri: Uri;
+ uri: Uri;
+}
+
+interface ChangedFileChangeStoreEvent {
+ type: 'changed';
+ rootUri: Uri;
+ uri: Uri;
+}
+
+interface DeletedFileChangeStoreEvent {
+ type: 'deleted';
+ rootUri: Uri;
+ uri: Uri;
+}
+
+type ChangeStoreEvent = CreatedFileChangeStoreEvent | ChangedFileChangeStoreEvent | DeletedFileChangeStoreEvent;
+
+function toChangeStoreEvent(operation: Operation | StoredOperation, rootUri: Uri, uri?: Uri): ChangeStoreEvent {
+ return {
+ type: operation.type,
+ rootUri: rootUri,
+ uri: uri ?? (typeof operation.uri === 'string' ? Uri.parse(operation.uri) : operation.uri)
+ };
+}
+
+export interface IChangeStore {
+ onDidChange: Event;
+
+ acceptAll(rootUri: Uri): Promise;
+ discard(uri: Uri): Promise;
+ discardAll(rootUri: Uri): Promise;
+
+ getChanges(rootUri: Uri): Operation[];
+ getContent(uri: Uri): string | undefined;
+
+ openChanges(uri: Uri, original: Uri): void;
+ openFile(uri: Uri): void;
+}
+
+export interface IWritableChangeStore {
+ onDidChange: Event;
+
+ hasChanges(rootUri: Uri): boolean;
+
+ getContent(uri: Uri): string | undefined;
+ getStat(uri: Uri): FileStat | undefined;
+ updateDirectoryEntries(uri: Uri, entries: [string, FileType][]): [string, FileType][];
+
+ onFileChanged(uri: Uri, content: Uint8Array, originalContent: () => Uint8Array | Thenable): Promise;
+ onFileCreated(uri: Uri, content: Uint8Array): Promise;
+ onFileDeleted(uri: Uri): Promise;
+}
+
+export class ChangeStore implements IChangeStore, IWritableChangeStore {
+ private _onDidChange = new EventEmitter();
+ get onDidChange(): Event {
+ return this._onDidChange.event;
+ }
+
+ constructor(private readonly memento: Memento) { }
+
+ async acceptAll(rootUri: Uri): Promise {
+ const operations = this.getChanges(rootUri);
+
+ await this.saveWorkingOperations(rootUri, undefined);
+
+ for (const operation of operations) {
+ await this.discardWorkingContent(operation.uri);
+ this._onDidChange.fire(toChangeStoreEvent(operation, rootUri));
+ }
+ }
+
+ async discard(uri: Uri): Promise {
+ const rootUri = getRootUri(uri);
+ if (rootUri === undefined) {
+ return;
+ }
+
+ const key = uri.toString();
+
+ const operations = this.getWorkingOperations(rootUri);
+ const index = operations.findIndex(c => c.uri === key);
+ if (index === -1) {
+ return;
+ }
+
+ const [operation] = operations.splice(index, 1);
+ await this.saveWorkingOperations(rootUri, operations);
+ await this.discardWorkingContent(uri);
+
+ this._onDidChange.fire({
+ type: operation.type === 'created' ? 'deleted' : operation.type === 'deleted' ? 'created' : 'changed',
+ rootUri: rootUri,
+ uri: uri
+ });
+ }
+
+ async discardAll(rootUri: Uri): Promise {
+ const operations = this.getChanges(rootUri);
+
+ await this.saveWorkingOperations(rootUri, undefined);
+
+ for (const operation of operations) {
+ await this.discardWorkingContent(operation.uri);
+ this._onDidChange.fire(toChangeStoreEvent(operation, rootUri));
+ }
+ }
+
+ getChanges(rootUri: Uri) {
+ return this.getWorkingOperations(rootUri).map(c => fromSerialized(c));
+ }
+
+ getContent(uri: Uri): string | undefined {
+ return this.memento.get(`${workingFileKeyPrefix}${uri.toString()}`);
+ }
+
+ getStat(uri: Uri): FileStat | undefined {
+ const key = uri.toString();
+ const operation = this.getChanges(getRootUri(uri)!).find(c => c.uri.toString() === key);
+ if (operation === undefined) {
+ return undefined;
+ }
+
+ return {
+ type: FileType.File,
+ size: operation.size ?? 0,
+ ctime: 0,
+ mtime: operation.timestamp
+ };
+ }
+
+ hasChanges(rootUri: Uri): boolean {
+ return this.getWorkingOperations(rootUri).length !== 0;
+ }
+
+ updateDirectoryEntries(uri: Uri, entries: [string, FileType][]): [string, FileType][] {
+ const rootUri = getRootUri(uri);
+ if (rootUri === undefined) {
+ return entries;
+ }
+
+ const folderPath = getRelativePath(rootUri, uri);
+
+ const operations = this.getChanges(rootUri);
+ for (const operation of operations) {
+ switch (operation.type) {
+ case 'changed':
+ continue;
+
+ case 'created': {
+ const filePath = getRelativePath(rootUri, operation.uri);
+ if (isChild(folderPath, filePath)) {
+ entries.push([filePath, FileType.File]);
+ }
+ break;
+ }
+
+ case 'deleted': {
+ const filePath = getRelativePath(rootUri, operation.uri);
+ if (isChild(folderPath, filePath)) {
+ const index = entries.findIndex(([path]) => path === filePath);
+ if (index !== -1) {
+ entries.splice(index, 1);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ return entries;
+ }
+
+ async onFileChanged(uri: Uri, content: Uint8Array, originalContent: () => Uint8Array | Thenable): Promise {
+ const rootUri = getRootUri(uri);
+ if (rootUri === undefined) {
+ return;
+ }
+
+ const key = uri.toString();
+
+ const operations = this.getWorkingOperations(rootUri);
+
+ const hash = await sha1(content);
+
+ let operation = operations.find(c => c.uri === key);
+ if (operation === undefined) {
+ const originalHash = await sha1(await originalContent!());
+ if (hash === originalHash) {
+ return;
+ }
+
+ operation = {
+ type: 'changed',
+ size: content.byteLength,
+ timestamp: Date.now(),
+ uri: key,
+ hash: hash!,
+ originalHash: originalHash
+ } as ChangeOperation;
+ operations.push(operation);
+
+ await this.saveWorkingOperations(rootUri, operations);
+ await this.saveWorkingContent(uri, textDecoder.decode(content));
+ } else if (hash! === operation.originalHash) {
+ operations.splice(operations.indexOf(operation), 1);
+
+ await this.saveWorkingOperations(rootUri, operations);
+ await this.discardWorkingContent(uri);
+ } else if (operation.hash !== hash) {
+ operation.hash = hash!;
+ operation.timestamp = Date.now();
+
+ await this.saveWorkingOperations(rootUri, operations);
+ await this.saveWorkingContent(uri, textDecoder.decode(content));
+ }
+
+ this._onDidChange.fire(toChangeStoreEvent(operation, rootUri, uri));
+ }
+
+ async onFileCreated(uri: Uri, content: Uint8Array): Promise {
+ const rootUri = getRootUri(uri);
+ if (rootUri === undefined) {
+ return;
+ }
+
+ const key = uri.toString();
+
+ const operations = this.getWorkingOperations(rootUri);
+
+ const hash = await sha1(content);
+
+ let operation = operations.find(c => c.uri === key);
+ if (operation === undefined) {
+ operation = {
+ type: 'created',
+ size: content.byteLength,
+ timestamp: Date.now(),
+ uri: key,
+ hash: hash!,
+ originalHash: hash!
+ } as CreateOperation;
+ operations.push(operation);
+
+ await this.saveWorkingOperations(rootUri, operations);
+ await this.saveWorkingContent(uri, textDecoder.decode(content));
+ } else {
+ // Shouldn't happen, but if it does just update the contents
+ operation.hash = hash!;
+ operation.timestamp = Date.now();
+
+ await this.saveWorkingOperations(rootUri, operations);
+ await this.saveWorkingContent(uri, textDecoder.decode(content));
+ }
+
+ this._onDidChange.fire(toChangeStoreEvent(operation, rootUri, uri));
+ }
+
+ async onFileDeleted(uri: Uri): Promise {
+ const rootUri = getRootUri(uri);
+ if (rootUri === undefined) {
+ return;
+ }
+
+ const key = uri.toString();
+
+ const operations = this.getWorkingOperations(rootUri);
+
+ let operation = operations.find(c => c.uri === key);
+ if (operation !== undefined) {
+ operations.splice(operations.indexOf(operation), 1);
+ }
+
+ const wasCreated = operation?.type === 'created';
+
+ operation = {
+ type: 'deleted',
+ timestamp: Date.now(),
+ uri: key,
+ } as DeleteOperation;
+
+ // Only track the delete, if we weren't tracking the create
+ if (!wasCreated) {
+ operations.push(operation);
+ }
+
+ await this.saveWorkingOperations(rootUri, operations);
+ await this.discardWorkingContent(uri);
+
+ this._onDidChange.fire(toChangeStoreEvent(operation, rootUri, uri));
+ }
+
+ async openChanges(uri: Uri, original: Uri) {
+ const opts: TextDocumentShowOptions = {
+ preserveFocus: false,
+ preview: true,
+ viewColumn: ViewColumn.Active
+ };
+
+ await commands.executeCommand('vscode.diff', original, uri, `${uri.fsPath} (Working Tree)`, opts);
+ }
+
+ async openFile(uri: Uri) {
+ const opts: TextDocumentShowOptions = {
+ preserveFocus: false,
+ preview: false,
+ viewColumn: ViewColumn.Active
+ };
+
+ await commands.executeCommand('vscode.open', uri, opts);
+ }
+
+ private getWorkingOperations(rootUri: Uri): StoredOperation[] {
+ return this.memento.get(`${workingOperationsKeyPrefix}${rootUri.toString()}`, []);
+ }
+
+ private async saveWorkingOperations(rootUri: Uri, operations: StoredOperation[] | undefined): Promise {
+ await this.memento.update(`${workingOperationsKeyPrefix}${rootUri.toString()}`, operations);
+ }
+
+ private async saveWorkingContent(uri: Uri, content: string): Promise {
+ await this.memento.update(`${workingFileKeyPrefix}${uri.toString()}`, content);
+ }
+
+ private async discardWorkingContent(uri: Uri): Promise {
+ await this.memento.update(`${workingFileKeyPrefix}${uri.toString()}`, undefined);
+ }
+}
diff --git a/extensions/github-browser/src/contextStore.ts b/extensions/github-browser/src/contextStore.ts
new file mode 100644
index 0000000000..f0f418da36
--- /dev/null
+++ b/extensions/github-browser/src/contextStore.ts
@@ -0,0 +1,36 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+import { Event, EventEmitter, Memento, Uri } from 'vscode';
+
+export const contextKeyPrefix = 'github.context|';
+
+export class ContextStore {
+ private _onDidChange = new EventEmitter();
+ get onDidChange(): Event {
+ return this._onDidChange.event;
+ }
+
+ constructor(private readonly memento: Memento, private readonly scheme: string) { }
+
+ delete(uri: Uri) {
+ return this.set(uri, undefined);
+ }
+
+ get(uri: Uri): T | undefined {
+ return this.memento.get(`${contextKeyPrefix}${uri.toString()}`);
+ }
+
+
+ async set(uri: Uri, context: T | undefined) {
+ if (uri.scheme !== this.scheme) {
+ throw new Error(`Invalid context scheme: ${uri.scheme}`);
+ }
+
+ await this.memento.update(`${contextKeyPrefix}${uri.toString()}`, context);
+ this._onDidChange.fire(uri);
+ }
+}
diff --git a/extensions/github-browser/src/extension.ts b/extensions/github-browser/src/extension.ts
index d50d04c19c..d0df7d647a 100644
--- a/extensions/github-browser/src/extension.ts
+++ b/extensions/github-browser/src/extension.ts
@@ -3,9 +3,71 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import * as vscode from 'vscode';
-import { GitHubFS } from './githubfs';
+import { ExtensionContext, Uri, workspace } from 'vscode';
+import { ChangeStore } from './changeStore';
+import { ContextStore } from './contextStore';
+import { VirtualFS } from './fs';
+import { GitHubApiContext, GitHubApi } from './github/api';
+import { GitHubFS } from './github/fs';
+import { VirtualSCM } from './scm';
-export function activate(context: vscode.ExtensionContext) {
- context.subscriptions.push(new GitHubFS());
+// const repositoryRegex = /^(?:(?:https:\/\/)?github.com\/)?([^\/]+)\/([^\/]+?)(?:\/|.git|$)/i;
+
+export function activate(context: ExtensionContext) {
+ const contextStore = new ContextStore(context.workspaceState, GitHubFS.scheme);
+ const changeStore = new ChangeStore(context.workspaceState);
+
+ const githubApi = new GitHubApi(contextStore);
+ const gitHubFS = new GitHubFS(githubApi);
+ const virtualFS = new VirtualFS('codespace', GitHubFS.scheme, contextStore, changeStore, gitHubFS);
+
+ context.subscriptions.push(
+ githubApi,
+ gitHubFS,
+ virtualFS,
+ new VirtualSCM(GitHubFS.scheme, githubApi, changeStore)
+ );
+
+ // commands.registerCommand('githubBrowser.openRepository', async () => {
+ // const value = await window.showInputBox({
+ // placeHolder: 'e.g. https://github.com/microsoft/vscode',
+ // prompt: 'Enter a GitHub repository url',
+ // validateInput: value => repositoryRegex.test(value) ? undefined : 'Invalid repository url'
+ // });
+
+ // if (value) {
+ // const match = repositoryRegex.exec(value);
+ // if (match) {
+ // const [, owner, repo] = match;
+
+ // const uri = Uri.parse(`codespace://HEAD/${owner}/${repo}`);
+ // openWorkspace(uri, repo, 'currentWindow');
+ // }
+ // }
+ // });
}
+
+export function getRelativePath(rootUri: Uri, uri: Uri) {
+ return uri.path.substr(rootUri.path.length + 1);
+}
+
+export function getRootUri(uri: Uri) {
+ return workspace.getWorkspaceFolder(uri)?.uri;
+}
+
+export function isChild(folderPath: string, filePath: string) {
+ return isDescendent(folderPath, filePath) && filePath.substr(folderPath.length + (folderPath.endsWith('/') ? 0 : 1)).split('/').length === 1;
+}
+
+export function isDescendent(folderPath: string, filePath: string) {
+ return folderPath.length === 0 || filePath.startsWith(folderPath.endsWith('/') ? folderPath : `${folderPath}/`);
+}
+
+// function openWorkspace(uri: Uri, name: string, location: 'currentWindow' | 'newWindow' | 'addToCurrentWorkspace') {
+// if (location === 'addToCurrentWorkspace') {
+// const count = (workspace.workspaceFolders && workspace.workspaceFolders.length) || 0;
+// return workspace.updateWorkspaceFolders(count, 0, { uri: uri, name: name });
+// }
+
+// return commands.executeCommand('vscode.openFolder', uri, location === 'newWindow');
+// }
diff --git a/extensions/github-browser/src/fs.ts b/extensions/github-browser/src/fs.ts
new file mode 100644
index 0000000000..cb163c85b2
--- /dev/null
+++ b/extensions/github-browser/src/fs.ts
@@ -0,0 +1,220 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+import {
+ CancellationToken,
+ Disposable,
+ Event,
+ EventEmitter,
+ FileChangeEvent,
+ FileChangeType,
+ FileSearchOptions,
+ FileSearchProvider,
+ FileSearchQuery,
+ FileStat,
+ FileSystemError,
+ FileSystemProvider,
+ FileType,
+ Progress,
+ TextSearchOptions,
+ TextSearchProvider,
+ TextSearchQuery,
+ TextSearchResult,
+ Uri,
+ workspace,
+} from 'vscode';
+import { IWritableChangeStore } from './changeStore';
+import { ContextStore } from './contextStore';
+import { GitHubApiContext } from './github/api';
+
+const emptyDisposable = { dispose: () => { /* noop */ } };
+const textEncoder = new TextEncoder();
+
+export class VirtualFS implements FileSystemProvider, FileSearchProvider, TextSearchProvider, Disposable {
+ private _onDidChangeFile = new EventEmitter();
+ get onDidChangeFile(): Event {
+ return this._onDidChangeFile.event;
+ }
+
+ private readonly disposable: Disposable;
+
+ constructor(
+ readonly scheme: string,
+ private readonly originalScheme: string,
+ contextStore: ContextStore,
+ private readonly changeStore: IWritableChangeStore,
+ private readonly fs: FileSystemProvider & FileSearchProvider & TextSearchProvider
+ ) {
+ // TODO@eamodio listen for workspace folder changes
+ for (const folder of workspace.workspaceFolders ?? []) {
+ const uri = this.getOriginalResource(folder.uri);
+
+ // If we have a saved context, but no longer have any changes, reset the context
+ // We only do this on startup/reload to keep things consistent
+ if (contextStore.get(uri) !== undefined && !changeStore.hasChanges(folder.uri)) {
+ contextStore.delete(uri);
+ }
+ }
+
+ this.disposable = Disposable.from(
+ workspace.registerFileSystemProvider(scheme, this, {
+ isCaseSensitive: true,
+ }),
+ workspace.registerFileSearchProvider(scheme, this),
+ workspace.registerTextSearchProvider(scheme, this),
+ changeStore.onDidChange(e => {
+ switch (e.type) {
+ case 'created':
+ this._onDidChangeFile.fire([{ type: FileChangeType.Created, uri: e.uri }]);
+ break;
+ case 'changed':
+ this._onDidChangeFile.fire([{ type: FileChangeType.Changed, uri: e.uri }]);
+ break;
+ case 'deleted':
+ this._onDidChangeFile.fire([{ type: FileChangeType.Deleted, uri: e.uri }]);
+ break;
+ }
+ }),
+ );
+ }
+
+ dispose() {
+ this.disposable?.dispose();
+ }
+
+ private getOriginalResource(uri: Uri): Uri {
+ return uri.with({ scheme: this.originalScheme });
+ }
+
+ private getVirtualResource(uri: Uri): Uri {
+ return uri.with({ scheme: this.scheme });
+ }
+
+ //#region FileSystemProvider
+
+ watch(): Disposable {
+ return emptyDisposable;
+ }
+
+ async stat(uri: Uri): Promise {
+ let stat = this.changeStore.getStat(uri);
+ if (stat !== undefined) {
+ return stat;
+ }
+
+ stat = await this.fs.stat(this.getOriginalResource(uri));
+ return stat;
+ }
+
+ async readDirectory(uri: Uri): Promise<[string, FileType][]> {
+ let entries = await this.fs.readDirectory(this.getOriginalResource(uri));
+ entries = this.changeStore.updateDirectoryEntries(uri, entries);
+ return entries;
+ }
+
+ createDirectory(_uri: Uri): void | Thenable {
+ // TODO@eamodio only support files for now
+ throw FileSystemError.NoPermissions();
+ }
+
+ async readFile(uri: Uri): Promise {
+ const content = this.changeStore.getContent(uri);
+ if (content !== undefined) {
+ return textEncoder.encode(content);
+ }
+
+ const data = await this.fs.readFile(this.getOriginalResource(uri));
+ return data;
+ }
+
+ async writeFile(uri: Uri, content: Uint8Array, options: { create: boolean, overwrite: boolean }): Promise {
+ let stat;
+ try {
+ stat = await this.stat(uri);
+ if (!options.overwrite) {
+ throw FileSystemError.FileExists();
+ }
+ } catch (ex) {
+ if (ex instanceof FileSystemError && ex.code === 'FileNotFound') {
+ if (!options.create) {
+ throw FileSystemError.FileNotFound();
+ }
+ } else {
+ throw ex;
+ }
+ }
+
+ if (stat === undefined) {
+ await this.changeStore.onFileCreated(uri, content);
+ } else {
+ await this.changeStore.onFileChanged(uri, content, () => this.fs.readFile(this.getOriginalResource(uri)));
+ }
+ }
+
+ async delete(uri: Uri, _options: { recursive: boolean }): Promise {
+ const stat = await this.stat(uri);
+ if (stat.type !== FileType.File) {
+ throw FileSystemError.NoPermissions();
+ }
+
+ await this.changeStore.onFileDeleted(uri);
+ }
+
+ async rename(oldUri: Uri, newUri: Uri, options: { overwrite: boolean }): Promise {
+ const stat = await this.stat(oldUri);
+ // TODO@eamodio only support files for now
+ if (stat.type !== FileType.File) {
+ throw FileSystemError.NoPermissions();
+ }
+
+ const content = await this.readFile(oldUri);
+ await this.writeFile(newUri, content, { create: true, overwrite: options.overwrite });
+ await this.delete(oldUri, { recursive: false });
+ }
+
+ async copy(source: Uri, destination: Uri, options: { overwrite: boolean }): Promise {
+ const stat = await this.stat(source);
+ // TODO@eamodio only support files for now
+ if (stat.type !== FileType.File) {
+ throw FileSystemError.NoPermissions();
+ }
+
+ const content = await this.readFile(source);
+ await this.writeFile(destination, content, { create: true, overwrite: options.overwrite });
+ }
+
+ //#endregion
+
+ //#region FileSearchProvider
+
+ provideFileSearchResults(
+ query: FileSearchQuery,
+ options: FileSearchOptions,
+ token: CancellationToken,
+ ) {
+ return this.fs.provideFileSearchResults(query, { ...options, folder: this.getOriginalResource(options.folder) }, token);
+ }
+
+ //#endregion
+
+ //#region TextSearchProvider
+
+ provideTextSearchResults(
+ query: TextSearchQuery,
+ options: TextSearchOptions,
+ progress: Progress,
+ token: CancellationToken,
+ ) {
+ return this.fs.provideTextSearchResults(
+ query,
+ { ...options, folder: this.getOriginalResource(options.folder) },
+ { report: (result: TextSearchResult) => progress.report({ ...result, uri: this.getVirtualResource(result.uri) }) },
+ token
+ );
+ }
+
+ //#endregion
+}
diff --git a/extensions/github-browser/src/gate.ts b/extensions/github-browser/src/gate.ts
new file mode 100644
index 0000000000..86f8c6dd52
--- /dev/null
+++ b/extensions/github-browser/src/gate.ts
@@ -0,0 +1,87 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+const emptyStr = '';
+
+function defaultResolver(...args: any[]): string {
+ if (args.length === 1) {
+ const arg0 = args[0];
+ if (arg0 === undefined || arg0 === null) {
+ return emptyStr;
+ }
+ if (typeof arg0 === 'string') {
+ return arg0;
+ }
+ if (typeof arg0 === 'number' || typeof arg0 === 'boolean') {
+ return String(arg0);
+ }
+
+ return JSON.stringify(arg0);
+ }
+
+ return JSON.stringify(args);
+}
+
+function iPromise(obj: T | Promise): obj is Promise {
+ return typeof (obj as Promise)?.then === 'function';
+}
+
+export function gate any>(resolver?: (...args: Parameters) => string) {
+ return (_target: any, key: string, descriptor: PropertyDescriptor) => {
+ let fn: Function | undefined;
+ if (typeof descriptor.value === 'function') {
+ fn = descriptor.value;
+ } else if (typeof descriptor.get === 'function') {
+ fn = descriptor.get;
+ }
+ if (fn === undefined || fn === null) {
+ throw new Error('Not supported');
+ }
+
+ const gateKey = `$gate$${key}`;
+
+ descriptor.value = function (this: any, ...args: any[]) {
+ const prop =
+ args.length === 0 ? gateKey : `${gateKey}$${(resolver ?? defaultResolver)(...(args as Parameters))}`;
+
+ if (!Object.prototype.hasOwnProperty.call(this, prop)) {
+ Object.defineProperty(this, prop, {
+ configurable: false,
+ enumerable: false,
+ writable: true,
+ value: undefined,
+ });
+ }
+
+ let promise = this[prop];
+ if (promise === undefined) {
+ let result;
+ try {
+ result = fn!.apply(this, args);
+ if (result === undefined || fn === null || !iPromise(result)) {
+ return result;
+ }
+
+ this[prop] = promise = result
+ .then((r: any) => {
+ this[prop] = undefined;
+ return r;
+ })
+ .catch(ex => {
+ this[prop] = undefined;
+ throw ex;
+ });
+ } catch (ex) {
+ this[prop] = undefined;
+ throw ex;
+ }
+ }
+
+ return promise;
+ };
+ };
+}
diff --git a/extensions/github-browser/src/github/api.ts b/extensions/github-browser/src/github/api.ts
new file mode 100644
index 0000000000..7fffb4a6b7
--- /dev/null
+++ b/extensions/github-browser/src/github/api.ts
@@ -0,0 +1,491 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import { authentication, AuthenticationSession, Disposable, Event, EventEmitter, Range, Uri } from 'vscode';
+import { graphql } from '@octokit/graphql';
+import { Octokit } from '@octokit/rest';
+import { fromGitHubUri } from './fs';
+import { ContextStore } from '../contextStore';
+import { Iterables } from '../iterables';
+
+export const shaRegex = /^[0-9a-f]{40}$/;
+
+export interface GitHubApiContext {
+ sha: string;
+ timestamp: number;
+}
+
+interface CreateCommitOperation {
+ type: 'created';
+ path: string;
+ content: string
+}
+
+interface ChangeCommitOperation {
+ type: 'changed';
+ path: string;
+ content: string
+}
+
+interface DeleteCommitOperation {
+ type: 'deleted';
+ path: string;
+ content: undefined
+}
+
+export type CommitOperation = CreateCommitOperation | ChangeCommitOperation | DeleteCommitOperation;
+
+type ArrayElement> = T extends (infer U)[] ? U : never;
+type GitCreateTreeParamsTree = ArrayElement[0]>['tree']>;
+
+function getGitHubRootUri(uri: Uri) {
+ const rootIndex = uri.path.indexOf('/', uri.path.indexOf('/', 1) + 1);
+ return uri.with({
+ path: uri.path.substring(0, rootIndex === -1 ? undefined : rootIndex),
+ query: ''
+ });
+}
+
+export class GitHubApi implements Disposable {
+ private _onDidChangeContext = new EventEmitter();
+ get onDidChangeContext(): Event {
+ return this._onDidChangeContext.event;
+ }
+
+ private readonly disposable: Disposable;
+
+ constructor(private readonly context: ContextStore) {
+ this.disposable = Disposable.from(
+ context.onDidChange(e => this._onDidChangeContext.fire(e))
+ );
+ }
+
+ dispose() {
+ this.disposable.dispose();
+ }
+
+ private _session: AuthenticationSession | undefined;
+ async ensureAuthenticated() {
+ if (this._session === undefined) {
+ const providers = await authentication.getProviderIds();
+ if (!providers.includes('github')) {
+ await new Promise(resolve => {
+ authentication.onDidChangeAuthenticationProviders(e => {
+ if (e.added.includes('github')) {
+ resolve();
+ }
+ });
+ });
+ }
+
+ this._session = await authentication.getSession('github', ['repo'], { createIfNone: true });
+ }
+
+ return this._session;
+ }
+
+ private _graphql: typeof graphql | undefined;
+ private async graphql() {
+ if (this._graphql === undefined) {
+ const session = await this.ensureAuthenticated();
+ this._graphql = graphql.defaults({
+ headers: {
+ Authorization: `Bearer ${session.accessToken}`,
+ }
+ });
+ }
+
+ return this._graphql;
+ }
+
+ private _octokit: typeof Octokit | undefined;
+ private async octokit(options?: ConstructorParameters[0]) {
+ if (this._octokit === undefined) {
+ const session = await this.ensureAuthenticated();
+ this._octokit = Octokit.defaults({ auth: `token ${session.accessToken}` });
+ }
+ return new this._octokit(options);
+ }
+
+ async commit(rootUri: Uri, message: string, operations: CommitOperation[]): Promise {
+ let { owner, repo, ref } = fromGitHubUri(rootUri);
+
+ try {
+ if (ref === undefined || ref === 'HEAD') {
+ ref = await this.defaultBranchQuery(rootUri);
+ if (ref === undefined) {
+ throw new Error('Cannot commit — invalid ref');
+ }
+ }
+
+ const context = await this.getContext(rootUri);
+ if (context.sha === undefined) {
+ throw new Error('Cannot commit — invalid context');
+ }
+
+ const hasDeletes = operations.some(op => op.type === 'deleted');
+
+ const github = await this.octokit();
+ const treeResp = await github.git.getTree({
+ owner: owner,
+ repo: repo,
+ tree_sha: context.sha,
+ recursive: hasDeletes ? 'true' : undefined,
+ });
+
+ // 0100000000000000 (040000): Directory
+ // 1000000110100100 (100644): Regular non-executable file
+ // 1000000110110100 (100664): Regular non-executable group-writeable file
+ // 1000000111101101 (100755): Regular executable file
+ // 1010000000000000 (120000): Symbolic link
+ // 1110000000000000 (160000): Gitlink
+ let updatedTree: GitCreateTreeParamsTree[];
+
+ if (hasDeletes) {
+ updatedTree = treeResp.data.tree as GitCreateTreeParamsTree[];
+
+ for (const operation of operations) {
+ switch (operation.type) {
+ case 'created':
+ updatedTree.push({ path: operation.path, mode: '100644', type: 'blob', content: operation.content });
+ break;
+
+ case 'changed': {
+ const index = updatedTree.findIndex(item => item.path === operation.path);
+ if (index !== -1) {
+ const { path, mode, type } = updatedTree[index];
+ updatedTree.splice(index, 1, { path: path, mode: mode, type: type, content: operation.content });
+ }
+ break;
+ }
+ case 'deleted': {
+ const index = updatedTree.findIndex(item => item.path === operation.path);
+ if (index !== -1) {
+ updatedTree.splice(index, 1);
+ }
+ break;
+ }
+ }
+ }
+ } else {
+ updatedTree = [];
+
+ for (const operation of operations) {
+ switch (operation.type) {
+ case 'created':
+ updatedTree.push({ path: operation.path, mode: '100644', type: 'blob', content: operation.content });
+ break;
+
+ case 'changed':
+ const item = treeResp.data.tree.find(item => item.path === operation.path) as GitCreateTreeParamsTree;
+ if (item !== undefined) {
+ const { path, mode, type } = item;
+ updatedTree.push({ path: path, mode: mode, type: type, content: operation.content });
+ }
+ break;
+ }
+ }
+ }
+
+ const updatedTreeResp = await github.git.createTree({
+ owner: owner,
+ repo: repo,
+ base_tree: hasDeletes ? undefined : treeResp.data.sha,
+ tree: updatedTree
+ });
+
+ const resp = await github.git.createCommit({
+ owner: owner,
+ repo: repo,
+ message: message,
+ tree: updatedTreeResp.data.sha,
+ parents: [context.sha]
+ });
+
+ this.updateContext(rootUri, { sha: resp.data.sha, timestamp: Date.now() });
+
+ // TODO@eamodio need to send a file change for any open files
+
+ await github.git.updateRef({
+ owner: owner,
+ repo: repo,
+ ref: `heads/${ref}`,
+ sha: resp.data.sha
+ });
+
+ return resp.data.sha;
+ } catch (ex) {
+ console.log(ex);
+ throw ex;
+ }
+ }
+
+ async defaultBranchQuery(uri: Uri) {
+ const { owner, repo } = fromGitHubUri(uri);
+
+ try {
+ const query = `query defaultBranch($owner: String!, $repo: String!) {
+ repository(owner: $owner, name: $repo) {
+ defaultBranchRef {
+ name
+ }
+ }
+}`;
+
+ const rsp = await this.gqlQuery<{
+ repository: { defaultBranchRef: { name: string; target: { oid: string } } | null | undefined };
+ }>(query, {
+ owner: owner,
+ repo: repo,
+ });
+ return rsp?.repository?.defaultBranchRef?.name ?? undefined;
+ } catch (ex) {
+ return undefined;
+ }
+ }
+
+ async filesQuery(uri: Uri) {
+ const { owner, repo, ref } = fromGitHubUri(uri);
+
+ try {
+ const context = await this.getContext(uri);
+
+ const resp = await (await this.octokit()).git.getTree({
+ owner: owner,
+ repo: repo,
+ recursive: '1',
+ tree_sha: context?.sha ?? ref ?? 'HEAD',
+ });
+ return Iterables.filterMap(resp.data.tree, p => p.type === 'blob' ? p.path : undefined);
+ } catch (ex) {
+ return [];
+ }
+ }
+
+ async fsQuery(uri: Uri, innerQuery: string): Promise {
+ const { owner, repo, path, ref } = fromGitHubUri(uri);
+
+ try {
+ const context = await this.getContext(uri);
+
+ const query = `query fs($owner: String!, $repo: String!, $path: String) {
+ repository(owner: $owner, name: $repo) {
+ object(expression: $path) {
+ ${innerQuery}
+ }
+ }
+}`;
+
+ const rsp = await this.gqlQuery<{
+ repository: { object: T | null | undefined };
+ }>(query, {
+ owner: owner,
+ repo: repo,
+ path: `${context.sha ?? ref ?? 'HEAD'}:${path}`,
+ });
+ return rsp?.repository?.object ?? undefined;
+ } catch (ex) {
+ return undefined;
+ }
+ }
+
+ async latestCommitQuery(uri: Uri) {
+ const { owner, repo, ref } = fromGitHubUri(uri);
+
+ try {
+ if (ref === undefined || ref === 'HEAD') {
+ const query = `query latest($owner: String!, $repo: String!) {
+ repository(owner: $owner, name: $repo) {
+ defaultBranchRef {
+ target {
+ oid
+ }
+ }
+ }
+}`;
+
+ const rsp = await this.gqlQuery<{
+ repository: { defaultBranchRef: { name: string; target: { oid: string } } | null | undefined };
+ }>(query, {
+ owner: owner,
+ repo: repo,
+ });
+ return rsp?.repository?.defaultBranchRef?.target.oid ?? undefined;
+ }
+
+ const query = `query latest($owner: String!, $repo: String!, $ref: String!) {
+ repository(owner: $owner, name: $repo) {
+ ref(qualifiedName: $ref) {
+ target {
+ oid
+ }
+ }
+}`;
+
+ const rsp = await this.gqlQuery<{
+ repository: { ref: { target: { oid: string } } | null | undefined };
+ }>(query, {
+ owner: owner,
+ repo: repo,
+ ref: ref ?? 'HEAD',
+ });
+ return rsp?.repository?.ref?.target.oid ?? undefined;
+ } catch (ex) {
+ return undefined;
+ }
+ }
+
+ async searchQuery(
+ query: string,
+ uri: Uri,
+ options: { maxResults?: number; context?: { before?: number; after?: number } },
+ ): Promise {
+ const { owner, repo, ref } = fromGitHubUri(uri);
+
+ // If we have a specific ref, don't try to search, because GitHub search only works against the default branch
+ if (ref === undefined) {
+ return { matches: [], limitHit: true };
+ }
+
+ try {
+ const resp = await (await this.octokit({
+ request: {
+ headers: {
+ accept: 'application/vnd.github.v3.text-match+json',
+ },
+ }
+ })).search.code({
+ q: `${query} repo:${owner}/${repo}`,
+ });
+
+ // Since GitHub doesn't return ANY line numbers just fake it at the top of the file 😢
+ const range = new Range(0, 0, 0, 0);
+
+ const matches: SearchQueryMatch[] = [];
+
+ let counter = 0;
+ let match: SearchQueryMatch;
+ for (const item of resp.data.items) {
+ for (const m of (item as typeof item & { text_matches: GitHubSearchTextMatch[] }).text_matches) {
+ counter++;
+ if (options.maxResults !== undefined && counter > options.maxResults) {
+ return { matches: matches, limitHit: true };
+ }
+
+ match = {
+ path: item.path,
+ ranges: [],
+ preview: m.fragment,
+ matches: [],
+ };
+
+ for (const lm of m.matches) {
+ let line = 0;
+ let shartChar = 0;
+ let endChar = 0;
+ for (let i = 0; i < lm.indices[1]; i++) {
+ if (i === lm.indices[0]) {
+ shartChar = endChar;
+ }
+
+ if (m.fragment[i] === '\n') {
+ line++;
+ endChar = 0;
+ } else {
+ endChar++;
+ }
+ }
+
+ match.ranges.push(range);
+ match.matches.push(new Range(line, shartChar, line, endChar));
+ }
+
+ matches.push(match);
+ }
+ }
+
+ return { matches: matches, limitHit: false };
+ } catch (ex) {
+ return { matches: [], limitHit: true };
+ }
+ }
+
+ private async gqlQuery(query: string, variables: { [key: string]: string | number }): Promise {
+ return (await this.graphql())(query, variables);
+ }
+
+ private readonly pendingContextRequests = new Map>();
+ async getContext(uri: Uri): Promise {
+ const rootUri = getGitHubRootUri(uri);
+
+ let pending = this.pendingContextRequests.get(rootUri.toString());
+ if (pending === undefined) {
+ pending = this.getContextCore(rootUri);
+ this.pendingContextRequests.set(rootUri.toString(), pending);
+ }
+
+ try {
+ return await pending;
+ } finally {
+ this.pendingContextRequests.delete(rootUri.toString());
+ }
+ }
+
+ private readonly rootUriToContextMap = new Map();
+
+ private async getContextCore(rootUri: Uri): Promise {
+ let context = this.rootUriToContextMap.get(rootUri.toString());
+ if (context === undefined) {
+ const { ref } = fromGitHubUri(rootUri);
+ if (ref !== undefined && shaRegex.test(ref)) {
+ context = { sha: ref, timestamp: Date.now() };
+ } else {
+ context = this.context.get(rootUri);
+ if (context?.sha === undefined) {
+ const sha = await this.latestCommitQuery(rootUri);
+ if (sha !== undefined) {
+ context = { sha: sha, timestamp: Date.now() };
+ } else {
+ context = undefined;
+ }
+ }
+ }
+
+ if (context !== undefined) {
+ this.updateContext(rootUri, context);
+ }
+ }
+
+ return context ?? { sha: rootUri.authority, timestamp: Date.now() };
+ }
+
+ private updateContext(rootUri: Uri, context: GitHubApiContext) {
+ this.rootUriToContextMap.set(rootUri.toString(), context);
+ this.context.set(rootUri, context);
+ }
+}
+
+interface GitHubSearchTextMatch {
+ object_url: string;
+ object_type: string;
+ property: string;
+ fragment: string;
+ matches: {
+ text: string;
+ indices: number[];
+ }[];
+}
+
+interface SearchQueryMatch {
+ path: string;
+ ranges: Range[];
+ preview: string;
+ matches: Range[];
+}
+
+interface SearchQueryResults {
+ matches: SearchQueryMatch[];
+ limitHit: boolean;
+}
diff --git a/extensions/github-browser/src/githubfs.ts b/extensions/github-browser/src/github/fs.ts
similarity index 53%
rename from extensions/github-browser/src/githubfs.ts
rename to extensions/github-browser/src/github/fs.ts
index f35fde146e..9149a69b3a 100644
--- a/extensions/github-browser/src/githubfs.ts
+++ b/extensions/github-browser/src/github/fs.ts
@@ -5,8 +5,6 @@
'use strict';
import {
- authentication,
- AuthenticationSession2,
CancellationToken,
Disposable,
Event,
@@ -20,7 +18,6 @@ import {
FileSystemProvider,
FileType,
Progress,
- Range,
TextSearchComplete,
TextSearchOptions,
TextSearchProvider,
@@ -29,11 +26,11 @@ import {
Uri,
workspace,
} from 'vscode';
-import { Octokit } from '@octokit/rest';
-import { graphql } from '@octokit/graphql/';
import * as fuzzySort from 'fuzzysort';
import fetch from 'node-fetch';
-import { Iterables } from './iterables';
+import { GitHubApi } from './api';
+import { Iterables } from '../iterables';
+import { getRootUri } from '../extension';
const emptyDisposable = { dispose: () => { /* noop */ } };
const replaceBackslashRegex = /(\/|\\)/g;
@@ -53,16 +50,17 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
}
private readonly disposable: Disposable;
- private fsCache = new Map();
+ private fsCache = new Map>();
- constructor() {
+ constructor(private readonly github: GitHubApi) {
this.disposable = Disposable.from(
workspace.registerFileSystemProvider(GitHubFS.scheme, this, {
isCaseSensitive: true,
- isReadonly: true,
+ isReadonly: true
}),
workspace.registerFileSearchProvider(GitHubFS.scheme, this),
workspace.registerTextSearchProvider(GitHubFS.scheme, this),
+ github.onDidChangeContext(e => this.fsCache.delete(e.toString()))
);
}
@@ -70,22 +68,18 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
this.disposable?.dispose();
}
- private _github: Promise | undefined;
- get github(): Promise {
- if (this._github === undefined) {
- this._github = this.getGitHubApi();
+ private getCache(uri: Uri) {
+ const rootUri = getRootUri(uri);
+ if (rootUri === undefined) {
+ return undefined;
}
- return this._github;
- }
- private async getGitHubApi(): Promise {
- try {
- const session = await authentication.getSession('github', ['repo'], { createIfNone: true });
- return new GitHubApi(session);
- } catch (ex) {
- this._github = undefined;
- throw ex;
+ let cache = this.fsCache.get(rootUri.toString());
+ if (cache === undefined) {
+ cache = new Map();
+ this.fsCache.set(rootUri.toString(), cache);
}
+ return cache;
}
//#region FileSystemProvider
@@ -96,7 +90,8 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
async stat(uri: Uri): Promise {
if (uri.path === '' || uri.path.lastIndexOf('/') === 0) {
- return { type: FileType.Directory, size: 0, ctime: 0, mtime: 0 };
+ const context = await this.github.getContext(uri);
+ return { type: FileType.Directory, size: 0, ctime: 0, mtime: context?.timestamp };
}
const data = await this.fsQuery<{
@@ -108,14 +103,20 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
...on Blob {
byteSize
}`,
- this.fsCache,
+ this.getCache(uri),
);
+ if (data === undefined) {
+ throw FileSystemError.FileNotFound();
+ }
+
+ const context = await this.github.getContext(uri);
+
return {
- type: typenameToFileType(data?.__typename),
- size: data?.byteSize ?? 0,
+ type: typenameToFileType(data.__typename),
+ size: data.byteSize ?? 0,
ctime: 0,
- mtime: 0,
+ mtime: context?.timestamp,
};
}
@@ -130,7 +131,7 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
type
}
}`,
- this.fsCache,
+ this.getCache(uri),
);
return (data?.entries ?? []).map<[string, FileType]>(e => [
@@ -139,8 +140,8 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
]);
}
- createDirectory(): void | Thenable {
- throw FileSystemError.NoPermissions;
+ createDirectory(_uri: Uri): void | Thenable {
+ throw FileSystemError.NoPermissions();
}
async readFile(uri: Uri): Promise {
@@ -172,20 +173,20 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
return textEncoder.encode(data?.text ?? '');
}
- writeFile(): void | Thenable {
- throw FileSystemError.NoPermissions;
+ async writeFile(_uri: Uri, _content: Uint8Array, _options: { create: boolean, overwrite: boolean }): Promise {
+ throw FileSystemError.NoPermissions();
}
- delete(): void | Thenable {
- throw FileSystemError.NoPermissions;
+ delete(_uri: Uri, _options: { recursive: boolean }): void | Thenable {
+ throw FileSystemError.NoPermissions();
}
- rename(): void | Thenable {
- throw FileSystemError.NoPermissions;
+ rename(_oldUri: Uri, _newUri: Uri, _options: { overwrite: boolean }): void | Thenable {
+ throw FileSystemError.NoPermissions();
}
- copy?(): void | Thenable {
- throw FileSystemError.NoPermissions;
+ copy(_source: Uri, _destination: Uri, _options: { overwrite: boolean }): void | Thenable {
+ throw FileSystemError.NoPermissions();
}
//#endregion
@@ -201,8 +202,10 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
): Promise {
let searchable = this.fileSearchCache.get(options.folder.toString(true));
if (searchable === undefined) {
- const matches = await (await this.github)?.filesQuery(options.folder);
- if (matches === undefined || token.isCancellationRequested) { return []; }
+ const matches = await this.github.filesQuery(options.folder);
+ if (matches === undefined || token.isCancellationRequested) {
+ return [];
+ }
searchable = [...Iterables.map(matches, m => (fuzzySort as Fuzzysort).prepareSlow(m))];
this.fileSearchCache.set(options.folder.toString(true), searchable);
@@ -233,13 +236,12 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
query: TextSearchQuery,
options: TextSearchOptions,
progress: Progress,
- token: CancellationToken,
+ _token: CancellationToken,
): Promise {
- const results = await (await this.github)?.searchQuery(
+ const results = await this.github.searchQuery(
query.pattern,
options.folder,
{ maxResults: options.maxResults, context: { before: options.beforeContext, after: options.afterContext } },
- token,
);
if (results === undefined) { return { limitHit: true }; }
@@ -266,9 +268,11 @@ export class GitHubFS implements FileSystemProvider, FileSearchProvider, TextSea
const key = `${uri.toString()}:${getHashCode(query)}`;
let data = cache?.get(key);
- if (data !== undefined) { return data as T; }
+ if (data !== undefined) {
+ return data as T;
+ }
- data = await (await this.github)?.fsQuery(uri, query);
+ data = await this.github.fsQuery(uri, query);
cache?.set(key, data);
return data;
}
@@ -296,12 +300,16 @@ function typenameToFileType(typename: string | undefined | null) {
}
type RepoInfo = { owner: string; repo: string; path: string | undefined; ref?: string };
-function fromGitHubUri(uri: Uri): RepoInfo {
+export function fromGitHubUri(uri: Uri): RepoInfo {
const [, owner, repo, ...rest] = uri.path.split('/');
let ref;
if (uri.authority) {
ref = uri.authority;
+ // The casing of HEAD is important for the GitHub api to work
+ if (/HEAD/i.test(ref)) {
+ ref = 'HEAD';
+ }
}
return { owner: owner, repo: repo, path: rest.join('/'), ref: ref };
}
@@ -322,175 +330,3 @@ function getHashCode(s: string): number {
}
return hash;
}
-
-interface SearchQueryMatch {
- path: string;
- ranges: Range[];
- preview: string;
- matches: Range[];
-}
-
-interface SearchQueryResults {
- matches: SearchQueryMatch[];
- limitHit: boolean;
-}
-
-class GitHubApi {
- constructor(private readonly session: AuthenticationSession2) { }
-
- private _graphql: typeof graphql | undefined;
- private get graphql() {
- if (this._graphql === undefined) {
- this._graphql = graphql.defaults({
- headers: {
- Authorization: `Bearer ${this.token}`,
- }
- });
- }
-
- return this._graphql;
- }
-
- get token() {
- return this.session.accessToken;
- }
-
- async filesQuery(uri: Uri) {
- const { owner, repo, ref } = fromGitHubUri(uri);
- try {
- const resp = await new Octokit({
- auth: `token ${this.token}`,
- }).git.getTree({
- owner: owner,
- repo: repo,
- recursive: '1',
- tree_sha: ref ?? 'HEAD',
- });
- return Iterables.filterMap(resp.data.tree, p => p.type === 'blob' ? p.path : undefined);
- } catch (ex) {
- return [];
- }
- }
-
- async searchQuery(
- query: string,
- uri: Uri,
- options: { maxResults?: number; context?: { before?: number; after?: number } },
- _token: CancellationToken,
- ): Promise {
- const { owner, repo, ref } = fromGitHubUri(uri);
-
- // If we have a specific ref, don't try to search, because GitHub search only works against the default branch
- if (ref === undefined) {
- return { matches: [], limitHit: true };
- }
-
- try {
- const resp = await new Octokit({
- auth: `token ${this.token}`,
- request: {
- headers: {
- accept: 'application/vnd.github.v3.text-match+json',
- },
- }
- }).search.code({
- q: `${query} repo:${owner}/${repo}`,
- });
-
- // Since GitHub doesn't return ANY line numbers just fake it at the top of the file 😢
- const range = new Range(0, 0, 0, 0);
-
- const matches: SearchQueryMatch[] = [];
-
- console.log(resp.data.items.length, resp.data.items);
-
- let counter = 0;
- let match: SearchQueryMatch;
- for (const item of resp.data.items) {
- for (const m of (item as typeof item & { text_matches: GitHubSearchTextMatch[] }).text_matches) {
- counter++;
- if (options.maxResults !== undefined && counter > options.maxResults) {
- return { matches: matches, limitHit: true };
- }
-
- match = {
- path: item.path,
- ranges: [],
- preview: m.fragment,
- matches: [],
- };
-
- for (const lm of m.matches) {
- let line = 0;
- let shartChar = 0;
- let endChar = 0;
- for (let i = 0; i < lm.indices[1]; i++) {
- if (i === lm.indices[0]) {
- shartChar = endChar;
- }
-
- if (m.fragment[i] === '\n') {
- line++;
- endChar = 0;
- } else {
- endChar++;
- }
- }
-
- match.ranges.push(range);
- match.matches.push(new Range(line, shartChar, line, endChar));
- }
-
- matches.push(match);
- }
- }
-
- return { matches: matches, limitHit: false };
- } catch (ex) {
- return { matches: [], limitHit: true };
- }
- }
-
- async fsQuery(uri: Uri, innerQuery: string): Promise {
- try {
- const query = `query fs($owner: String!, $repo: String!, $path: String) {
- repository(owner: $owner, name: $repo) {
- object(expression: $path) {
- ${innerQuery}
- }
- }
-}`;
-
- const { owner, repo, path, ref } = fromGitHubUri(uri);
- const variables = {
- owner: owner,
- repo: repo,
- path: `${ref ?? 'HEAD'}:${path}`,
- };
-
- const rsp = await this.query<{
- repository: { object: T | null | undefined };
- }>(query, variables);
- return rsp?.repository?.object ?? undefined;
- } catch (ex) {
- return undefined;
- }
- }
-
- query(query: string, variables: { [key: string]: string | number }): Promise {
- return this.graphql(query, variables) as Promise;
- }
-}
-
-interface GitHubSearchTextMatch {
- object_url: string;
- object_type: string;
- property: string;
- fragment: string;
- matches: GitHubSearchMatch[];
-}
-
-interface GitHubSearchMatch {
- text: string;
- indices: number[];
-}
diff --git a/extensions/github-browser/src/scm.ts b/extensions/github-browser/src/scm.ts
new file mode 100644
index 0000000000..f1e039dc2c
--- /dev/null
+++ b/extensions/github-browser/src/scm.ts
@@ -0,0 +1,168 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+import { CancellationToken, commands, Disposable, scm, SourceControl, SourceControlResourceGroup, SourceControlResourceState, Uri, window, workspace } from 'vscode';
+import * as nls from 'vscode-nls';
+import { IChangeStore } from './changeStore';
+import { GitHubApi, CommitOperation } from './github/api';
+import { getRelativePath } from './extension';
+
+const localize = nls.loadMessageBundle();
+
+interface ScmProvider {
+ sourceControl: SourceControl,
+ groups: SourceControlResourceGroup[]
+}
+
+export class VirtualSCM implements Disposable {
+ private readonly providers: ScmProvider[] = [];
+
+ private disposable: Disposable;
+
+ constructor(
+ private readonly originalScheme: string,
+ private readonly github: GitHubApi,
+ private readonly changeStore: IChangeStore,
+ ) {
+ this.registerCommands();
+
+ // TODO@eamodio listen for workspace folder changes
+ for (const folder of workspace.workspaceFolders ?? []) {
+ this.createScmProvider(folder.uri, folder.name);
+ }
+
+ this.disposable = Disposable.from(
+ changeStore.onDidChange(e => this.update(e.rootUri, e.uri)),
+ );
+
+ for (const { uri } of workspace.workspaceFolders ?? []) {
+ for (const operation of changeStore.getChanges(uri)) {
+ this.update(uri, operation.uri);
+ }
+ }
+ }
+
+ dispose() {
+ this.disposable.dispose();
+ }
+
+ private registerCommands() {
+ commands.registerCommand('githubBrowser.commit', (...args: any[]) => this.commitChanges(args[0]));
+
+ commands.registerCommand('githubBrowser.discardChanges', (resourceState: SourceControlResourceState) =>
+ this.discardChanges(resourceState.resourceUri)
+ );
+
+ commands.registerCommand('githubBrowser.openChanges', (resourceState: SourceControlResourceState) =>
+ this.openChanges(resourceState.resourceUri)
+ );
+
+ commands.registerCommand('githubBrowser.openFile', (resourceState: SourceControlResourceState) =>
+ this.openFile(resourceState.resourceUri)
+ );
+ }
+
+ async commitChanges(sourceControl: SourceControl): Promise {
+ const operations = this.changeStore
+ .getChanges(sourceControl.rootUri!)
+ .map(operation => {
+ const path = getRelativePath(sourceControl.rootUri!, operation.uri);
+ switch (operation.type) {
+ case 'created':
+ return { type: operation.type, path: path, content: this.changeStore.getContent(operation.uri)! };
+ case 'changed':
+ return { type: operation.type, path: path, content: this.changeStore.getContent(operation.uri)! };
+ case 'deleted':
+ return { type: operation.type, path: path };
+ }
+ });
+ if (!operations.length) {
+ window.showInformationMessage(localize('no changes', "There are no changes to commit."));
+
+ return;
+ }
+
+ const message = sourceControl.inputBox.value;
+ if (message) {
+ const sha = await this.github.commit(this.getOriginalResource(sourceControl.rootUri!), message, operations);
+ if (sha !== undefined) {
+ this.changeStore.acceptAll(sourceControl.rootUri!);
+ sourceControl.inputBox.value = '';
+ }
+ }
+ }
+
+ discardChanges(uri: Uri): Promise {
+ return this.changeStore.discard(uri);
+ }
+
+ openChanges(uri: Uri) {
+ return this.changeStore.openChanges(uri, this.getOriginalResource(uri));
+ }
+
+ openFile(uri: Uri) {
+ return this.changeStore.openFile(uri);
+ }
+
+ private update(rootUri: Uri, uri: Uri) {
+ const folder = workspace.getWorkspaceFolder(uri);
+ if (folder === undefined) {
+ return;
+ }
+
+ const provider = this.createScmProvider(rootUri, folder.name);
+ const group = this.createChangesGroup(provider);
+ group.resourceStates = this.changeStore.getChanges(rootUri).map(op => {
+ const rs: SourceControlResourceState = {
+ decorations: {
+ strikeThrough: op.type === 'deleted'
+ },
+ resourceUri: op.uri,
+ command: {
+ command: 'githubBrowser.openChanges',
+ title: 'Open Changes',
+ }
+ };
+ rs.command!.arguments = [rs];
+ return rs;
+ });
+ }
+
+ private createScmProvider(rootUri: Uri, name: string) {
+ let provider = this.providers.find(sc => sc.sourceControl.rootUri?.toString() === rootUri.toString());
+ if (provider === undefined) {
+ const sourceControl = scm.createSourceControl('github', name, rootUri);
+ sourceControl.quickDiffProvider = { provideOriginalResource: uri => this.getOriginalResource(uri) };
+ sourceControl.acceptInputCommand = {
+ command: 'githubBrowser.commit',
+ title: 'Commit',
+ arguments: [sourceControl]
+ };
+ sourceControl.inputBox.placeholder = `Message (Ctrl+Enter to commit '${name}')`;
+ // sourceControl.inputBox.validateInput = value => value ? undefined : 'Invalid commit message';
+
+ provider = { sourceControl: sourceControl, groups: [] };
+ this.createChangesGroup(provider);
+ this.providers.push(provider);
+ }
+
+ return provider;
+ }
+
+ private createChangesGroup(provider: ScmProvider) {
+ let group = provider.groups.find(g => g.id === 'github.changes');
+ if (group === undefined) {
+ group = provider.sourceControl.createResourceGroup('github.changes', 'Changes');
+ provider.groups.push(group);
+ }
+
+ return group;
+ }
+
+ private getOriginalResource(uri: Uri, _token?: CancellationToken): Uri {
+ return uri.with({ scheme: this.originalScheme });
+ }
+}
diff --git a/extensions/github-browser/src/sha1.ts b/extensions/github-browser/src/sha1.ts
new file mode 100644
index 0000000000..a786fcf24d
--- /dev/null
+++ b/extensions/github-browser/src/sha1.ts
@@ -0,0 +1,29 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+const textDecoder = new TextDecoder();
+const textEncoder = new TextEncoder();
+
+declare let WEBWORKER: boolean;
+
+export async function sha1(s: string | Uint8Array): Promise {
+ while (true) {
+ try {
+ if (WEBWORKER) {
+ const hash = await globalThis.crypto.subtle.digest({ name: 'sha-1' }, typeof s === 'string' ? textEncoder.encode(s) : s);
+ // Use encodeURIComponent to avoid issues with btoa and Latin-1 characters
+ return globalThis.btoa(encodeURIComponent(textDecoder.decode(hash)));
+ } else {
+ return (await import('crypto')).createHash('sha1').update(s).digest('base64');
+ }
+ } catch (ex) {
+ if (ex instanceof ReferenceError) {
+ (global as any).WEBWORKER = false;
+ }
+ }
+ }
+}
diff --git a/extensions/github-browser/tsconfig.json b/extensions/github-browser/tsconfig.json
index c88427aef8..eb413a1260 100644
--- a/extensions/github-browser/tsconfig.json
+++ b/extensions/github-browser/tsconfig.json
@@ -1,11 +1,12 @@
{
"extends": "../shared.tsconfig.json",
"compilerOptions": {
- "outDir": "./out",
- // "experimentalDecorators": true,
- // "typeRoots": [
- // "./node_modules/@types"
- // ]
+ "experimentalDecorators": true,
+ "lib": [
+ "es2018",
+ "dom"
+ ],
+ "outDir": "./out"
},
"include": [
"src/**/*"
diff --git a/extensions/github-browser/yarn.lock b/extensions/github-browser/yarn.lock
index bda914f9b1..2c8f1ad965 100644
--- a/extensions/github-browser/yarn.lock
+++ b/extensions/github-browser/yarn.lock
@@ -3,99 +3,99 @@
"@octokit/auth-token@^2.4.0":
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.1.tgz#375d79eebd03750e6a9b0299e80b8167c7c85655"
- integrity sha512-NB81O5h39KfHYGtgfWr2booRxp2bWOJoqbWwbyUg2hw6h35ArWYlAST5B3XwAkbdcx13yt84hFXyFP5X0QToWA==
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a"
+ integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ==
dependencies:
- "@octokit/types" "^4.0.1"
+ "@octokit/types" "^5.0.0"
-"@octokit/core@^2.4.3":
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/@octokit/core/-/core-2.5.3.tgz#dd754e6f5ad9b15631e9b276ae4f00ac2ea2cf9b"
- integrity sha512-23AHK9xBW0v79Ck8h5U+5iA4MW7aosqv+Yr6uZXolVGNzzHwryNH5wM386/6+etiKUTwLFZTqyMU9oQpIBZcFA==
+"@octokit/core@^3.0.0":
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.1.0.tgz#9c3c9b23f7504668cfa057f143ccbf0c645a0ac9"
+ integrity sha512-yPyQSmxIXLieEIRikk2w8AEtWkFdfG/LXcw1KvEtK3iP0ENZLW/WYQmdzOKqfSaLhooz4CJ9D+WY79C8ZliACw==
dependencies:
"@octokit/auth-token" "^2.4.0"
"@octokit/graphql" "^4.3.1"
"@octokit/request" "^5.4.0"
- "@octokit/types" "^4.0.1"
+ "@octokit/types" "^5.0.0"
before-after-hook "^2.1.0"
universal-user-agent "^5.0.0"
"@octokit/endpoint@^6.0.1":
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.2.tgz#e876aafe68d7f9b6c6d80bf29458403f9afe7b2b"
- integrity sha512-xs1mmCEZ2y4shXCpFjNq3UbmNR+bLzxtZim2L0zfEtj9R6O6kc4qLDvYw66hvO6lUsYzPTM5hMkltbuNAbRAcQ==
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.3.tgz#dd09b599662d7e1b66374a177ab620d8cdf73487"
+ integrity sha512-Y900+r0gIz+cWp6ytnkibbD95ucEzDSKzlEnaWS52hbCDNcCJYO5mRmWW7HRAnDc7am+N/5Lnd8MppSaTYx1Yg==
dependencies:
- "@octokit/types" "^4.0.1"
+ "@octokit/types" "^5.0.0"
is-plain-object "^3.0.0"
universal-user-agent "^5.0.0"
-"@octokit/graphql@4.5.0", "@octokit/graphql@^4.3.1":
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.5.0.tgz#e111f841bc15722b1e9887f447fccab700cacdad"
- integrity sha512-StJWfn0M1QfhL3NKBz31e1TdDNZrHLLS57J2hin92SIfzlOVBuUaRkp31AGkGOAFOAVtyEX6ZiZcsjcJDjeb5g==
+"@octokit/graphql@4.5.1", "@octokit/graphql@^4.3.1":
+ version "4.5.1"
+ resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.5.1.tgz#162aed1490320b88ce34775b3f6b8de945529fa9"
+ integrity sha512-qgMsROG9K2KxDs12CO3bySJaYoUu2aic90qpFrv7A8sEBzZ7UFGvdgPKiLw5gOPYEYbS0Xf8Tvf84tJutHPulQ==
dependencies:
"@octokit/request" "^5.3.0"
- "@octokit/types" "^4.0.1"
+ "@octokit/types" "^5.0.0"
universal-user-agent "^5.0.0"
"@octokit/plugin-paginate-rest@^2.2.0":
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.2.1.tgz#b95ec46c841d51e5e625f383c579d132ab216d05"
- integrity sha512-/tHpIF2XpN40AyhIq295YRjb4g7Q5eKob0qM3thYJ0Z+CgmNsWKM/fWse/SUR8+LdprP1O4ZzSKQE+71TCwK+w==
+ version "2.2.3"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.2.3.tgz#a6ad4377e7e7832fb4bdd9d421e600cb7640ac27"
+ integrity sha512-eKTs91wXnJH8Yicwa30jz6DF50kAh7vkcqCQ9D7/tvBAP5KKkg6I2nNof8Mp/65G0Arjsb4QcOJcIEQY+rK1Rg==
dependencies:
- "@octokit/types" "^4.0.1"
+ "@octokit/types" "^5.0.0"
"@octokit/plugin-request-log@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e"
integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw==
-"@octokit/plugin-rest-endpoint-methods@3.17.0":
- version "3.17.0"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-3.17.0.tgz#d8ba04eb883849dd98666c55bf49d8c9fe7be055"
- integrity sha512-NFV3vq7GgoO2TrkyBRUOwflkfTYkFKS0tLAPym7RNpkwLCttqShaEGjthOsPEEL+7LFcYv3mU24+F2yVd3npmg==
+"@octokit/plugin-rest-endpoint-methods@4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.0.0.tgz#b02a2006dda8e908c3f8ab381dd5475ef5a810a8"
+ integrity sha512-emS6gysz4E9BNi9IrCl7Pm4kR+Az3MmVB0/DoDCmF4U48NbYG3weKyDlgkrz6Jbl4Mu4nDx8YWZwC4HjoTdcCA==
dependencies:
- "@octokit/types" "^4.1.6"
+ "@octokit/types" "^5.0.0"
deprecation "^2.3.1"
"@octokit/request-error@^2.0.0":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.1.tgz#49bd71e811daffd5bdd06ef514ca47b5039682d1"
- integrity sha512-5lqBDJ9/TOehK82VvomQ6zFiZjPeSom8fLkFVLuYL3sKiIb5RB8iN/lenLkY7oBmyQcGP7FBMGiIZTO8jufaRQ==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0"
+ integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==
dependencies:
- "@octokit/types" "^4.0.1"
+ "@octokit/types" "^5.0.1"
deprecation "^2.0.0"
once "^1.4.0"
"@octokit/request@^5.3.0", "@octokit/request@^5.4.0":
- version "5.4.4"
- resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.4.tgz#dc57e85e86284fa016d0c1a2701a70a10cec4ff2"
- integrity sha512-vqv1lz41c6VTxUvF9nM+a6U+vvP3vGk7drDpr0DVQg4zyqlOiKVrY17DLD6de5okj+YLHKcoqaUZTBtlNZ1BtQ==
+ version "5.4.5"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.5.tgz#8df65bd812047521f7e9db6ff118c06ba84ac10b"
+ integrity sha512-atAs5GAGbZedvJXXdjtKljin+e2SltEs48B3naJjqWupYl2IUBbB/CJisyjbNHcKpHzb3E+OYEZ46G8eakXgQg==
dependencies:
"@octokit/endpoint" "^6.0.1"
"@octokit/request-error" "^2.0.0"
- "@octokit/types" "^4.0.1"
+ "@octokit/types" "^5.0.0"
deprecation "^2.0.0"
is-plain-object "^3.0.0"
node-fetch "^2.3.0"
once "^1.4.0"
universal-user-agent "^5.0.0"
-"@octokit/rest@17.11.0":
- version "17.11.0"
- resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-17.11.0.tgz#80db76d7d3442c998de5483575975f5591da84b8"
- integrity sha512-WqXmm37uCGP1NxYxSc27hd5pYNLdksuUsjR8vaNS8fCy6kyxZFy+Dbh/AzqKGj2mOdbnt7dILoGHfzsA4IIm4A==
+"@octokit/rest@18.0.0":
+ version "18.0.0"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.0.0.tgz#7f401d9ce13530ad743dfd519ae62ce49bcc0358"
+ integrity sha512-4G/a42lry9NFGuuECnua1R1eoKkdBYJap97jYbWDNYBOUboWcM75GJ1VIcfvwDV/pW0lMPs7CEmhHoVrSV5shg==
dependencies:
- "@octokit/core" "^2.4.3"
+ "@octokit/core" "^3.0.0"
"@octokit/plugin-paginate-rest" "^2.2.0"
"@octokit/plugin-request-log" "^1.0.0"
- "@octokit/plugin-rest-endpoint-methods" "3.17.0"
+ "@octokit/plugin-rest-endpoint-methods" "4.0.0"
-"@octokit/types@^4.0.1", "@octokit/types@^4.1.6":
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-4.1.9.tgz#a3e1ff1a15637ab830fbab0268c2d7ca824bc969"
- integrity sha512-hinM/BA2c1vebN2HSR3JtVdYtrSbmvn/doUBZXXuQuh/9o60hYwitQQAGTpJu+k6pjtjURskDHQxUFvqLvYCeA==
+"@octokit/types@^5.0.0", "@octokit/types@^5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.0.1.tgz#5459e9a5e9df8565dcc62c17a34491904d71971e"
+ integrity sha512-GorvORVwp244fGKEt3cgt/P+M0MGy4xEDbckw+K5ojEezxyMDgCaYPKVct+/eWQfZXOT7uq0xRpmrl/+hliabA==
dependencies:
"@types/node" ">= 8"
@@ -108,609 +108,20 @@
form-data "^3.0.0"
"@types/node@*", "@types/node@>= 8":
- version "14.0.12"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.12.tgz#9c1d8ffb8084e8936603a6122a7649e40e68e04b"
- integrity sha512-/sjzehvjkkpvLpYtN6/2dv5kg41otMGuHQUt9T2aiAuIfleCQRQHXXzF1eAw/qkZTj5Kcf4JSTf7EIizHocy6Q==
-
-"@webassemblyjs/ast@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
- integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==
- dependencies:
- "@webassemblyjs/helper-module-context" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/wast-parser" "1.9.0"
-
-"@webassemblyjs/floating-point-hex-parser@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4"
- integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==
-
-"@webassemblyjs/helper-api-error@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2"
- integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==
-
-"@webassemblyjs/helper-buffer@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00"
- integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==
-
-"@webassemblyjs/helper-code-frame@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27"
- integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==
- dependencies:
- "@webassemblyjs/wast-printer" "1.9.0"
-
-"@webassemblyjs/helper-fsm@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8"
- integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==
-
-"@webassemblyjs/helper-module-context@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07"
- integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
-
-"@webassemblyjs/helper-wasm-bytecode@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790"
- integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==
-
-"@webassemblyjs/helper-wasm-section@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346"
- integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-buffer" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/wasm-gen" "1.9.0"
-
-"@webassemblyjs/ieee754@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4"
- integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==
- dependencies:
- "@xtuc/ieee754" "^1.2.0"
-
-"@webassemblyjs/leb128@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95"
- integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==
- dependencies:
- "@xtuc/long" "4.2.2"
-
-"@webassemblyjs/utf8@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab"
- integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==
-
-"@webassemblyjs/wasm-edit@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf"
- integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-buffer" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/helper-wasm-section" "1.9.0"
- "@webassemblyjs/wasm-gen" "1.9.0"
- "@webassemblyjs/wasm-opt" "1.9.0"
- "@webassemblyjs/wasm-parser" "1.9.0"
- "@webassemblyjs/wast-printer" "1.9.0"
-
-"@webassemblyjs/wasm-gen@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c"
- integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/ieee754" "1.9.0"
- "@webassemblyjs/leb128" "1.9.0"
- "@webassemblyjs/utf8" "1.9.0"
-
-"@webassemblyjs/wasm-opt@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61"
- integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-buffer" "1.9.0"
- "@webassemblyjs/wasm-gen" "1.9.0"
- "@webassemblyjs/wasm-parser" "1.9.0"
-
-"@webassemblyjs/wasm-parser@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e"
- integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-api-error" "1.9.0"
- "@webassemblyjs/helper-wasm-bytecode" "1.9.0"
- "@webassemblyjs/ieee754" "1.9.0"
- "@webassemblyjs/leb128" "1.9.0"
- "@webassemblyjs/utf8" "1.9.0"
-
-"@webassemblyjs/wast-parser@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914"
- integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/floating-point-hex-parser" "1.9.0"
- "@webassemblyjs/helper-api-error" "1.9.0"
- "@webassemblyjs/helper-code-frame" "1.9.0"
- "@webassemblyjs/helper-fsm" "1.9.0"
- "@xtuc/long" "4.2.2"
-
-"@webassemblyjs/wast-printer@1.9.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899"
- integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/wast-parser" "1.9.0"
- "@xtuc/long" "4.2.2"
-
-"@xtuc/ieee754@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
- integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
-
-"@xtuc/long@4.2.2":
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
- integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
-
-acorn@^6.4.1:
- version "6.4.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
- integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
-
-ajv-errors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
- integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
-
-ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
- integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
-
-ajv@^6.1.0, ajv@^6.10.2:
- version "6.12.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
- integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
- dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
-ansi-regex@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
- integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
-
-ansi-styles@^3.2.0, 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"
-
-anymatch@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
- integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
- dependencies:
- micromatch "^3.1.4"
- normalize-path "^2.1.1"
-
-anymatch@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
- integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-aproba@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
- integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
- integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-flatten@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
- integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
- integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-array-unique@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
- integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
-
-asn1.js@^4.0.0:
- version "4.10.1"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
- integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
- dependencies:
- bn.js "^4.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-assert@^1.1.1:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
- integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
- dependencies:
- object-assign "^4.1.1"
- util "0.10.3"
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
- integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
-async-each@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
- integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+ version "14.0.14"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce"
+ integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-atob@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
- integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-
-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=
-
-base64-js@^1.0.2:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
- integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
-
-base@^0.11.1:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
- dependencies:
- cache-base "^1.0.1"
- class-utils "^0.3.5"
- component-emitter "^1.2.1"
- define-property "^1.0.0"
- isobject "^3.0.1"
- mixin-deep "^1.2.0"
- pascalcase "^0.1.1"
-
before-after-hook@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635"
integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==
-big.js@^5.2.2:
- version "5.2.2"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
- integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
-
-binary-extensions@^1.0.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
- integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
-
-binary-extensions@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
- integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
-
-bindings@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
- integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
- dependencies:
- file-uri-to-path "1.0.0"
-
-bluebird@^3.5.5:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
- integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
- version "4.11.9"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828"
- integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==
-
-bn.js@^5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0"
- integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==
-
-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"
-
-braces@^2.3.1, braces@^2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
- integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
- dependencies:
- arr-flatten "^1.1.0"
- array-unique "^0.3.2"
- extend-shallow "^2.0.1"
- fill-range "^4.0.0"
- isobject "^3.0.1"
- repeat-element "^1.1.2"
- snapdragon "^0.8.1"
- snapdragon-node "^2.0.1"
- split-string "^3.0.2"
- to-regex "^3.0.1"
-
-braces@~3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
- integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
- dependencies:
- fill-range "^7.0.1"
-
-brorand@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
- integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
- integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-browserify-cipher@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
- integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
- dependencies:
- browserify-aes "^1.0.4"
- browserify-des "^1.0.0"
- evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
- integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
- dependencies:
- cipher-base "^1.0.1"
- des.js "^1.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
- integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
- dependencies:
- bn.js "^4.1.0"
- randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"
- integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==
- dependencies:
- bn.js "^5.1.1"
- browserify-rsa "^4.0.1"
- create-hash "^1.2.0"
- create-hmac "^1.1.7"
- elliptic "^6.5.2"
- inherits "^2.0.4"
- parse-asn1 "^5.1.5"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-browserify-zlib@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
- integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
- dependencies:
- pako "~1.0.5"
-
-buffer-from@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
- integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
- integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
-
-buffer@^4.3.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
- integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
-builtin-status-codes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
- integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
-
-cacache@^12.0.2:
- version "12.0.4"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c"
- integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==
- dependencies:
- bluebird "^3.5.5"
- chownr "^1.1.1"
- figgy-pudding "^3.5.1"
- glob "^7.1.4"
- graceful-fs "^4.1.15"
- infer-owner "^1.0.3"
- lru-cache "^5.1.1"
- mississippi "^3.0.0"
- mkdirp "^0.5.1"
- move-concurrently "^1.0.1"
- promise-inflight "^1.0.1"
- rimraf "^2.6.3"
- ssri "^6.0.1"
- unique-filename "^1.1.1"
- y18n "^4.0.0"
-
-cache-base@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
- dependencies:
- collection-visit "^1.0.0"
- component-emitter "^1.2.1"
- get-value "^2.0.6"
- has-value "^1.0.0"
- isobject "^3.0.1"
- set-value "^2.0.0"
- to-object-path "^0.3.0"
- union-value "^1.0.0"
- unset-value "^1.0.0"
-
-camelcase@^5.0.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
- integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
-
-chalk@2.4.2:
- 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"
-
-chokidar@^2.1.8:
- version "2.1.8"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
- integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
- dependencies:
- anymatch "^2.0.0"
- async-each "^1.0.1"
- braces "^2.3.2"
- glob-parent "^3.1.0"
- inherits "^2.0.3"
- is-binary-path "^1.0.0"
- is-glob "^4.0.0"
- normalize-path "^3.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.2.1"
- upath "^1.1.1"
- optionalDependencies:
- fsevents "^1.2.7"
-
-chokidar@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
- integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==
- dependencies:
- anymatch "~3.1.1"
- braces "~3.0.2"
- glob-parent "~5.1.0"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.4.0"
- optionalDependencies:
- fsevents "~2.1.2"
-
-chownr@^1.1.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
- integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-
-chrome-trace-event@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
- integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
- dependencies:
- tslib "^1.9.0"
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-class-utils@^0.3.5:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
- dependencies:
- arr-union "^3.1.0"
- define-property "^0.2.5"
- isobject "^3.0.0"
- static-extend "^0.1.1"
-
-cliui@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
- integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
- dependencies:
- string-width "^3.1.0"
- strip-ansi "^5.2.0"
- wrap-ansi "^5.1.0"
-
-collection-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
- integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
- dependencies:
- map-visit "^1.0.0"
- object-visit "^1.0.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=
-
combined-stream@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
@@ -718,100 +129,7 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
-commander@^2.20.0:
- version "2.20.3"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
- integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
- integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
-
-component-emitter@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
- integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
-
-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=
-
-concat-stream@^1.5.0:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
- integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
- dependencies:
- buffer-from "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-console-browserify@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
- integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
-
-constants-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
- integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
-
-copy-concurrently@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
- integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
- dependencies:
- aproba "^1.1.1"
- fs-write-stream-atomic "^1.0.8"
- iferr "^0.1.5"
- mkdirp "^0.5.1"
- rimraf "^2.5.4"
- run-queue "^1.0.0"
-
-copy-descriptor@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
- integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-create-ecdh@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
- integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
- dependencies:
- bn.js "^4.1.0"
- elliptic "^6.0.0"
-
-create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
- integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- md5.js "^1.3.4"
- ripemd160 "^2.0.1"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
- integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-cross-spawn@6.0.5, cross-spawn@^6.0.0:
+cross-spawn@^6.0.0:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
@@ -822,67 +140,6 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0:
shebang-command "^1.2.0"
which "^1.2.9"
-crypto-browserify@^3.11.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
- integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
- dependencies:
- browserify-cipher "^1.0.0"
- browserify-sign "^4.0.0"
- create-ecdh "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.0"
- diffie-hellman "^5.0.0"
- inherits "^2.0.1"
- pbkdf2 "^3.0.3"
- public-encrypt "^4.0.0"
- randombytes "^2.0.0"
- randomfill "^1.0.3"
-
-cyclist@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
- integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
-
-debug@^2.2.0, debug@^2.3.3:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-decamelize@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
- integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
-
-decode-uri-component@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
- integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
-
-define-property@^0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
- integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
- dependencies:
- is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
- integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
- dependencies:
- is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
- integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
- dependencies:
- is-descriptor "^1.0.2"
- isobject "^3.0.1"
-
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -893,141 +150,13 @@ deprecation@^2.0.0, deprecation@^2.3.1:
resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
-des.js@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
- integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
- dependencies:
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-detect-file@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
- integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
-
-diffie-hellman@^5.0.0:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
- integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
- dependencies:
- bn.js "^4.1.0"
- miller-rabin "^4.0.0"
- randombytes "^2.0.0"
-
-domain-browser@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
- integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
-
-duplexify@^3.4.2, duplexify@^3.6.0:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
- integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
- dependencies:
- end-of-stream "^1.0.0"
- inherits "^2.0.1"
- readable-stream "^2.0.0"
- stream-shift "^1.0.0"
-
-elliptic@^6.0.0, elliptic@^6.5.2:
- version "6.5.2"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
- integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
- dependencies:
- bn.js "^4.4.0"
- brorand "^1.0.1"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.0"
-
-emoji-regex@^7.0.1:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
- integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
- integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-
-emojis-list@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
- integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
-
-end-of-stream@^1.0.0, end-of-stream@^1.1.0:
+end-of-stream@^1.1.0:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
dependencies:
once "^1.4.0"
-enhanced-resolve@4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
- integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.4.0"
- tapable "^1.0.0"
-
-enhanced-resolve@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
- integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.5.0"
- tapable "^1.0.0"
-
-errno@^0.1.3, errno@~0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
- integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
- dependencies:
- prr "~1.0.1"
-
-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=
-
-eslint-scope@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
- integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
- dependencies:
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-esrecurse@^4.1.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
- integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
- dependencies:
- estraverse "^4.1.0"
-
-estraverse@^4.1.0, estraverse@^4.1.1:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
- integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-
-events@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
- integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
execa@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
@@ -1041,131 +170,6 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
-expand-brackets@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
- integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
- dependencies:
- debug "^2.3.3"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- posix-character-classes "^0.1.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-expand-tilde@^2.0.0, expand-tilde@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
- integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
- dependencies:
- homedir-polyfill "^1.0.1"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
- dependencies:
- is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extglob@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
- dependencies:
- array-unique "^0.3.2"
- define-property "^1.0.0"
- expand-brackets "^2.1.4"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-fast-deep-equal@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
- integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-
-fast-json-stable-stringify@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-figgy-pudding@^3.5.1:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e"
- integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==
-
-file-uri-to-path@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
- integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
-
-fill-range@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
- integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
- dependencies:
- extend-shallow "^2.0.1"
- is-number "^3.0.0"
- repeat-string "^1.6.1"
- to-regex-range "^2.1.0"
-
-fill-range@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
- integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
- dependencies:
- to-regex-range "^5.0.1"
-
-find-cache-dir@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
- integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
- dependencies:
- commondir "^1.0.1"
- make-dir "^2.0.0"
- pkg-dir "^3.0.0"
-
-find-up@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
- integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
- dependencies:
- locate-path "^3.0.0"
-
-findup-sync@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
- integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
- dependencies:
- detect-file "^1.0.0"
- is-glob "^4.0.0"
- micromatch "^3.0.4"
- resolve-dir "^1.0.1"
-
-flush-write-stream@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
- integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
- dependencies:
- inherits "^2.0.3"
- readable-stream "^2.3.6"
-
-for-in@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
- integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
-
form-data@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
@@ -1175,59 +179,11 @@ form-data@^3.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
-fragment-cache@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
- integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
- dependencies:
- map-cache "^0.2.2"
-
-from2@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
- integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
- dependencies:
- inherits "^2.0.1"
- readable-stream "^2.0.0"
-
-fs-write-stream-atomic@^1.0.8:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
- integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
- dependencies:
- graceful-fs "^4.1.2"
- iferr "^0.1.5"
- imurmurhash "^0.1.4"
- readable-stream "1 || 2"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@^1.2.7:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
- integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
- dependencies:
- bindings "^1.5.0"
- nan "^2.12.1"
-
-fsevents@~2.1.2:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
- integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
-
fuzzysort@1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/fuzzysort/-/fuzzysort-1.1.4.tgz#a0510206ed44532cbb52cf797bf5a3cb12acd4ba"
integrity sha512-JzK/lHjVZ6joAg3OnCjylwYXYVjRiwTY6Yb25LvfpJHK8bjisfnZJ5bY8aVWwTwCXgxPNgLAtmHL+Hs5q1ddLQ==
-get-caller-file@^2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
- integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-
get-stream@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
@@ -1235,567 +191,26 @@ get-stream@^4.0.0:
dependencies:
pump "^3.0.0"
-get-value@^2.0.3, get-value@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
- integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
-
-glob-parent@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
- integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
- dependencies:
- is-glob "^3.1.0"
- path-dirname "^1.0.0"
-
-glob-parent@~5.1.0:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
- integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
- dependencies:
- is-glob "^4.0.1"
-
-glob@^7.1.3, glob@^7.1.4:
- version "7.1.6"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
- integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-global-modules@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
- integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
- dependencies:
- global-prefix "^3.0.0"
-
-global-modules@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
- integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
- dependencies:
- global-prefix "^1.0.1"
- is-windows "^1.0.1"
- resolve-dir "^1.0.0"
-
-global-prefix@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
- integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
- dependencies:
- expand-tilde "^2.0.2"
- homedir-polyfill "^1.0.1"
- ini "^1.3.4"
- is-windows "^1.0.1"
- which "^1.2.14"
-
-global-prefix@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
- integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
- dependencies:
- ini "^1.3.5"
- kind-of "^6.0.2"
- which "^1.3.1"
-
-graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
- integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
-
-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-value@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
- integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
- dependencies:
- get-value "^2.0.3"
- has-values "^0.1.4"
- isobject "^2.0.0"
-
-has-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
- integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
- dependencies:
- get-value "^2.0.6"
- has-values "^1.0.0"
- isobject "^3.0.0"
-
-has-values@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
- integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
-
-has-values@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
- integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-hash-base@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
- integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
- dependencies:
- inherits "^2.0.4"
- readable-stream "^3.6.0"
- safe-buffer "^5.2.0"
-
-hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
- integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.1"
-
-hmac-drbg@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-homedir-polyfill@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
- integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
- dependencies:
- parse-passwd "^1.0.0"
-
-https-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
- integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
-
-ieee754@^1.1.4:
- version "1.1.13"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
- integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
-
-iferr@^0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
- integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
-
-import-local@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
- integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
- dependencies:
- pkg-dir "^3.0.0"
- resolve-cwd "^2.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
-
-infer-owner@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
- integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
- integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
-
-inherits@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-
-ini@^1.3.4, ini@^1.3.5:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
- integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
-
-interpret@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
- integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
-
-invert-kv@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
- integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
-
-is-accessor-descriptor@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
- integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
- dependencies:
- kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
- integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
- dependencies:
- binary-extensions "^1.0.0"
-
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
- integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-
-is-data-descriptor@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
- integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
- dependencies:
- kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
- integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
- dependencies:
- kind-of "^6.0.0"
-
-is-descriptor@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
- integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
- dependencies:
- is-accessor-descriptor "^0.1.6"
- is-data-descriptor "^0.1.4"
- kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
- integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
- dependencies:
- is-accessor-descriptor "^1.0.0"
- is-data-descriptor "^1.0.0"
- kind-of "^6.0.2"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
- integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
- dependencies:
- is-plain-object "^2.0.4"
-
-is-extglob@^2.1.0, is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
- integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
-
-is-glob@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
- integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
- dependencies:
- is-extglob "^2.1.0"
-
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-plain-object@^2.0.3, is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
is-plain-object@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928"
- integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==
- dependencies:
- isobject "^4.0.0"
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
+ integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
-is-windows@^1.0.1, is-windows@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
- integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-
-is-wsl@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
- integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
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=
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-
-isobject@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0"
- integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==
-
-json-parse-better-errors@^1.0.2:
- 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==
-
-json-schema-traverse@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
- integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-
-json5@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
- integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
- dependencies:
- minimist "^1.2.0"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
- integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-
-kind-of@^6.0.0, kind-of@^6.0.2:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
- integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-
-lcid@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
- integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
- dependencies:
- invert-kv "^2.0.0"
-
-loader-runner@^2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
- integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
-
-loader-utils@1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
- integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
- dependencies:
- big.js "^5.2.2"
- emojis-list "^2.0.0"
- json5 "^1.0.1"
-
-loader-utils@^1.2.3:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
- integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
- dependencies:
- big.js "^5.2.2"
- emojis-list "^3.0.0"
- json5 "^1.0.1"
-
-locate-path@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
- integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
- dependencies:
- p-locate "^3.0.0"
- path-exists "^3.0.0"
-
-lru-cache@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
- integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
- dependencies:
- yallist "^3.0.2"
-
macos-release@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==
-make-dir@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
- integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
- dependencies:
- pify "^4.0.1"
- semver "^5.6.0"
-
-map-age-cleaner@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
- integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
- dependencies:
- p-defer "^1.0.0"
-
-map-cache@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
- integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
-
-map-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
- integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
- dependencies:
- object-visit "^1.0.0"
-
-md5.js@^1.3.4:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
- integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
- safe-buffer "^5.1.2"
-
-mem@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
- integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
- dependencies:
- map-age-cleaner "^0.1.1"
- mimic-fn "^2.0.0"
- p-is-promise "^2.0.0"
-
-memory-fs@^0.4.0, memory-fs@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
- integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-memory-fs@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
- integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
- version "3.1.10"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
- integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- braces "^2.3.1"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- extglob "^2.0.4"
- fragment-cache "^0.2.1"
- kind-of "^6.0.2"
- nanomatch "^1.2.9"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.2"
-
-miller-rabin@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
- integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
- dependencies:
- bn.js "^4.0.0"
- brorand "^1.0.1"
-
mime-db@1.44.0:
version "1.44.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
@@ -1808,108 +223,6 @@ mime-types@^2.1.12:
dependencies:
mime-db "1.44.0"
-mimic-fn@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
- integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-
-minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
- integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-
-minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
- integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
-
-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"
-
-minimist@^1.2.0, minimist@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
- integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
-
-mississippi@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
- integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
- dependencies:
- concat-stream "^1.5.0"
- duplexify "^3.4.2"
- end-of-stream "^1.1.0"
- flush-write-stream "^1.0.0"
- from2 "^2.1.0"
- parallel-transform "^1.1.0"
- pump "^3.0.0"
- pumpify "^1.3.3"
- stream-each "^1.1.0"
- through2 "^2.0.0"
-
-mixin-deep@^1.2.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
- integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
- dependencies:
- for-in "^1.0.2"
- is-extendable "^1.0.1"
-
-mkdirp@^0.5.1, mkdirp@^0.5.3:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
- integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
- dependencies:
- minimist "^1.2.5"
-
-move-concurrently@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
- integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
- dependencies:
- aproba "^1.1.1"
- copy-concurrently "^1.0.0"
- fs-write-stream-atomic "^1.0.8"
- mkdirp "^0.5.1"
- rimraf "^2.5.4"
- run-queue "^1.0.3"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-nan@^2.12.1:
- version "2.14.1"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
- integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
-
-nanomatch@^1.2.9:
- version "1.2.13"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
- integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- fragment-cache "^0.2.1"
- is-windows "^1.0.2"
- kind-of "^6.0.2"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-neo-async@^2.5.0, neo-async@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
- integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
-
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@@ -1920,47 +233,6 @@ node-fetch@2.6.0, node-fetch@^2.3.0:
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
-node-libs-browser@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
- integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
- dependencies:
- assert "^1.1.1"
- browserify-zlib "^0.2.0"
- buffer "^4.3.0"
- console-browserify "^1.1.0"
- constants-browserify "^1.0.0"
- crypto-browserify "^3.11.0"
- domain-browser "^1.1.1"
- events "^3.0.0"
- https-browserify "^1.0.0"
- os-browserify "^0.3.0"
- path-browserify "0.0.1"
- process "^0.11.10"
- punycode "^1.2.4"
- querystring-es3 "^0.2.0"
- readable-stream "^2.3.3"
- stream-browserify "^2.0.1"
- stream-http "^2.7.2"
- string_decoder "^1.0.0"
- timers-browserify "^2.0.4"
- tty-browserify "0.0.0"
- url "^0.11.0"
- util "^0.11.0"
- vm-browserify "^1.0.1"
-
-normalize-path@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -1968,55 +240,13 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
-object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-copy@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
- integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
- dependencies:
- copy-descriptor "^0.1.0"
- define-property "^0.2.5"
- kind-of "^3.0.3"
-
-object-visit@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
- integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
- dependencies:
- isobject "^3.0.0"
-
-object.pick@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
- dependencies:
- isobject "^3.0.1"
-
-once@^1.3.0, once@^1.3.1, once@^1.4.0:
+once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
-os-browserify@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
- integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
-
-os-locale@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
- integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
- dependencies:
- execa "^1.0.0"
- lcid "^2.0.0"
- mem "^4.0.0"
-
os-name@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801"
@@ -2025,174 +255,16 @@ os-name@^3.1.0:
macos-release "^2.2.0"
windows-release "^3.1.0"
-p-defer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
- integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
-
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
-p-is-promise@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
- integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
-
-p-limit@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
- integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
- dependencies:
- p-try "^2.0.0"
-
-p-locate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
- integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
- dependencies:
- p-limit "^2.0.0"
-
-p-try@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
- integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-
-pako@~1.0.5:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
- integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
-
-parallel-transform@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
- integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
- dependencies:
- cyclist "^1.0.1"
- inherits "^2.0.3"
- readable-stream "^2.1.5"
-
-parse-asn1@^5.0.0, parse-asn1@^5.1.5:
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
- integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
- dependencies:
- asn1.js "^4.0.0"
- browserify-aes "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.0"
- pbkdf2 "^3.0.3"
- safe-buffer "^5.1.1"
-
-parse-passwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
- integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
-
-pascalcase@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
- integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
-
-path-browserify@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
- integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
-
-path-dirname@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
- integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
- integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
path-key@^2.0.0, 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=
-pbkdf2@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94"
- integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-picomatch@^2.0.4, picomatch@^2.2.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
- integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
-
-pify@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
- integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
-
-pkg-dir@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
- integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
- dependencies:
- find-up "^3.0.0"
-
-posix-character-classes@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
- integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
-
-process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-process@^0.11.10:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
- integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-
-promise-inflight@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
- integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
-
-prr@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
- integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
-
-public-encrypt@^4.0.0:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
- integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
- dependencies:
- bn.js "^4.1.0"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- parse-asn1 "^5.0.0"
- randombytes "^2.0.1"
- safe-buffer "^5.1.2"
-
-pump@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
- integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
@@ -2201,244 +273,11 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-pumpify@^1.3.3:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
- integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
- dependencies:
- duplexify "^3.6.0"
- inherits "^2.0.3"
- pump "^2.0.0"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
- integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
-
-punycode@^1.2.4:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
- integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-
-punycode@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
-
-querystring-es3@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
- integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
- integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
- integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
- dependencies:
- safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
- integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
- dependencies:
- randombytes "^2.0.5"
- safe-buffer "^5.1.0"
-
-"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readdirp@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
- integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
- dependencies:
- graceful-fs "^4.1.11"
- micromatch "^3.1.10"
- readable-stream "^2.0.2"
-
-readdirp@~3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
- integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
- dependencies:
- picomatch "^2.2.1"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
- integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
- dependencies:
- extend-shallow "^3.0.2"
- safe-regex "^1.1.0"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
- integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-repeat-element@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
- integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-
-repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
- integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
- integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-
-require-main-filename@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
- integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-
-resolve-cwd@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
- integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
- dependencies:
- resolve-from "^3.0.0"
-
-resolve-dir@^1.0.0, resolve-dir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
- integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
- dependencies:
- expand-tilde "^2.0.0"
- global-modules "^1.0.0"
-
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
- integrity sha1-six699nWiBvItuZTM17rywoYh0g=
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
- integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
-
-ret@~0.1.10:
- version "0.1.15"
- resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
- integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
-
-rimraf@^2.5.4, rimraf@^2.6.3:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
- integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
- dependencies:
- glob "^7.1.3"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
- integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-run-queue@^1.0.0, run-queue@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
- integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
- dependencies:
- aproba "^1.1.1"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-regex@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
- integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
- dependencies:
- ret "~0.1.10"
-
-schema-utils@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
- integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
- dependencies:
- ajv "^6.1.0"
- ajv-errors "^1.0.0"
- ajv-keywords "^3.1.0"
-
-semver@^5.5.0, semver@^5.6.0:
+semver@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-serialize-javascript@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea"
- integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==
- dependencies:
- randombytes "^2.1.0"
-
-set-blocking@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
- integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-
-set-value@^2.0.0, set-value@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b"
- integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.3"
- split-string "^3.0.1"
-
-setimmediate@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
- integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
-
-sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.11"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
- integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -2456,298 +295,11 @@ signal-exit@^3.0.0:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
-snapdragon-node@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
- integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
- dependencies:
- define-property "^1.0.0"
- isobject "^3.0.0"
- snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
- dependencies:
- kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
- integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
- dependencies:
- base "^0.11.1"
- debug "^2.2.0"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- map-cache "^0.2.2"
- source-map "^0.5.6"
- source-map-resolve "^0.5.0"
- use "^3.1.0"
-
-source-list-map@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
- integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
-
-source-map-resolve@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
- integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==
- dependencies:
- atob "^2.1.2"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@~0.5.12:
- version "0.5.19"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
- integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
- dependencies:
- buffer-from "^1.0.0"
- source-map "^0.6.0"
-
-source-map-url@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
- integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
-
-source-map@^0.5.6:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
- integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-split-string@^3.0.1, split-string@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
- dependencies:
- extend-shallow "^3.0.0"
-
-ssri@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
- integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
- dependencies:
- figgy-pudding "^3.5.1"
-
-static-extend@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
- integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
- dependencies:
- define-property "^0.2.5"
- object-copy "^0.1.0"
-
-stream-browserify@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
- integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-each@^1.1.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
- integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
- dependencies:
- end-of-stream "^1.1.0"
- stream-shift "^1.0.0"
-
-stream-http@^2.7.2:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
- integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
- dependencies:
- builtin-status-codes "^3.0.0"
- inherits "^2.0.1"
- readable-stream "^2.3.6"
- to-arraybuffer "^1.0.0"
- xtend "^4.0.0"
-
-stream-shift@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
- integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
-
-string-width@^3.0.0, string-width@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
- integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
- dependencies:
- emoji-regex "^7.0.1"
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^5.1.0"
-
-string_decoder@^1.0.0, string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
- integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
- dependencies:
- ansi-regex "^4.1.0"
-
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
-supports-color@6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
- dependencies:
- has-flag "^3.0.0"
-
-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"
-
-tapable@^1.0.0, tapable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
- integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
-
-terser-webpack-plugin@^1.4.3:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f"
- integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==
- dependencies:
- cacache "^12.0.2"
- find-cache-dir "^2.1.0"
- is-wsl "^1.1.0"
- schema-utils "^1.0.0"
- serialize-javascript "^3.1.0"
- source-map "^0.6.1"
- terser "^4.1.2"
- webpack-sources "^1.4.0"
- worker-farm "^1.7.0"
-
-terser@^4.1.2:
- version "4.7.0"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006"
- integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==
- dependencies:
- commander "^2.20.0"
- source-map "~0.6.1"
- source-map-support "~0.5.12"
-
-through2@^2.0.0:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
- dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
-
-timers-browserify@^2.0.4:
- version "2.0.11"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
- integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
- dependencies:
- setimmediate "^1.0.4"
-
-to-arraybuffer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
- integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
-
-to-object-path@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
- integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
- dependencies:
- kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
- integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
- dependencies:
- is-number "^3.0.0"
- repeat-string "^1.6.1"
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
- integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
- dependencies:
- define-property "^2.0.2"
- extend-shallow "^3.0.2"
- regex-not "^1.0.2"
- safe-regex "^1.1.0"
-
-tslib@^1.9.0:
- version "1.13.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
- integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
-
-tty-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
- integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
- integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-
-union-value@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"
- integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==
- dependencies:
- arr-union "^3.1.0"
- get-value "^2.0.6"
- is-extendable "^0.1.1"
- set-value "^2.0.1"
-
-unique-filename@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
- integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
- dependencies:
- unique-slug "^2.0.0"
-
-unique-slug@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
- integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
- dependencies:
- imurmurhash "^0.1.4"
-
universal-user-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9"
@@ -2755,151 +307,12 @@ universal-user-agent@^5.0.0:
dependencies:
os-name "^3.1.0"
-unset-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
- integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
- dependencies:
- has-value "^0.3.1"
- isobject "^3.0.0"
+vscode-nls@4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.2.tgz#ca8bf8bb82a0987b32801f9fddfdd2fb9fd3c167"
+ integrity sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==
-upath@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
- integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
-
-uri-js@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
- integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
- dependencies:
- punycode "^2.1.0"
-
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
- integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-
-url@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
-use@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
- integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-util@0.10.3:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
- dependencies:
- inherits "2.0.1"
-
-util@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
- integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
- dependencies:
- inherits "2.0.3"
-
-v8-compile-cache@2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
- integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
-
-vm-browserify@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
- integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
-
-watchpack-chokidar2@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"
- integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==
- dependencies:
- chokidar "^2.1.8"
-
-watchpack@^1.6.1:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa"
- integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==
- dependencies:
- graceful-fs "^4.1.2"
- neo-async "^2.5.0"
- optionalDependencies:
- chokidar "^3.4.0"
- watchpack-chokidar2 "^2.0.0"
-
-webpack-cli@3.3.11:
- version "3.3.11"
- resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631"
- integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==
- dependencies:
- chalk "2.4.2"
- cross-spawn "6.0.5"
- enhanced-resolve "4.1.0"
- findup-sync "3.0.0"
- global-modules "2.0.0"
- import-local "2.0.0"
- interpret "1.2.0"
- loader-utils "1.2.3"
- supports-color "6.1.0"
- v8-compile-cache "2.0.3"
- yargs "13.2.4"
-
-webpack-sources@^1.4.0, webpack-sources@^1.4.1:
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
- integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
- dependencies:
- source-list-map "^2.0.0"
- source-map "~0.6.1"
-
-webpack@4.43.0:
- version "4.43.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6"
- integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==
- dependencies:
- "@webassemblyjs/ast" "1.9.0"
- "@webassemblyjs/helper-module-context" "1.9.0"
- "@webassemblyjs/wasm-edit" "1.9.0"
- "@webassemblyjs/wasm-parser" "1.9.0"
- acorn "^6.4.1"
- ajv "^6.10.2"
- ajv-keywords "^3.4.1"
- chrome-trace-event "^1.0.2"
- enhanced-resolve "^4.1.0"
- eslint-scope "^4.0.3"
- json-parse-better-errors "^1.0.2"
- loader-runner "^2.4.0"
- loader-utils "^1.2.3"
- memory-fs "^0.4.1"
- micromatch "^3.1.10"
- mkdirp "^0.5.3"
- neo-async "^2.6.1"
- node-libs-browser "^2.2.1"
- schema-utils "^1.0.0"
- tapable "^1.1.3"
- terser-webpack-plugin "^1.4.3"
- watchpack "^1.6.1"
- webpack-sources "^1.4.1"
-
-which-module@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
- integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
-
-which@^1.2.14, which@^1.2.9, which@^1.3.1:
+which@^1.2.9:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -2913,63 +326,7 @@ windows-release@^3.1.0:
dependencies:
execa "^1.0.0"
-worker-farm@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
- integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
- dependencies:
- errno "~0.1.7"
-
-wrap-ansi@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
- integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
- dependencies:
- ansi-styles "^3.2.0"
- string-width "^3.0.0"
- strip-ansi "^5.0.0"
-
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-xtend@^4.0.0, xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-y18n@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
- integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
-
-yallist@^3.0.2:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
- integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
-
-yargs-parser@^13.1.0:
- version "13.1.2"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
- integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
-
-yargs@13.2.4:
- version "13.2.4"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
- integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
- dependencies:
- cliui "^5.0.0"
- find-up "^3.0.0"
- get-caller-file "^2.0.1"
- os-locale "^3.1.0"
- require-directory "^2.1.1"
- require-main-filename "^2.0.0"
- set-blocking "^2.0.0"
- string-width "^3.0.0"
- which-module "^2.0.0"
- y18n "^4.0.0"
- yargs-parser "^13.1.0"
diff --git a/extensions/github/src/auth.ts b/extensions/github/src/auth.ts
index 77027e1829..49b64555a6 100644
--- a/extensions/github/src/auth.ts
+++ b/extensions/github/src/auth.ts
@@ -27,21 +27,15 @@ function getAgent(url: string | undefined = process.env.HTTPS_PROXY): Agent {
const scopes = ['repo', 'workflow'];
export async function getSession(): Promise {
- const authenticationSessions = await authentication.getSessions('github', scopes);
-
- if (authenticationSessions.length) {
- return await authenticationSessions[0];
- } else {
- return await authentication.login('github', scopes);
- }
+ return await authentication.getSession('github', scopes, { createIfNone: true });
}
let _octokit: Promise | undefined;
export function getOctokit(): Promise {
if (!_octokit) {
- _octokit = getSession().then(async session => {
- const token = await session.getAccessToken();
+ _octokit = getSession().then(session => {
+ const token = session.accessToken;
const agent = getAgent();
return new Octokit({
diff --git a/extensions/github/src/credentialProvider.ts b/extensions/github/src/credentialProvider.ts
index 55743eb5df..b5118da191 100644
--- a/extensions/github/src/credentialProvider.ts
+++ b/extensions/github/src/credentialProvider.ts
@@ -17,7 +17,7 @@ class GitHubCredentialProvider implements CredentialsProvider {
}
const session = await getSession();
- return { username: session.account.id, password: await session.getAccessToken() };
+ return { username: session.account.id, password: session.accessToken };
}
}
diff --git a/extensions/image-preview/extension-browser.webpack.config.js b/extensions/image-preview/extension-browser.webpack.config.js
index b2f0995024..31d7ba16a5 100644
--- a/extensions/image-preview/extension-browser.webpack.config.js
+++ b/extensions/image-preview/extension-browser.webpack.config.js
@@ -7,23 +7,11 @@
'use strict';
-const withDefaults = require('../shared.webpack.config');
-const path = require('path');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-const clientConfig = withDefaults({
+module.exports = withBrowserDefaults({
context: __dirname,
- target: 'webworker',
entry: {
extension: './src/extension.ts'
},
- resolve: {
- alias: {
- 'vscode-extension-telemetry': path.resolve(__dirname, '../../build/polyfills/vscode-extension-telemetry.js'),
- 'vscode-nls': path.resolve(__dirname, '../../build/polyfills/vscode-nls.js'),
- },
- }
});
-
-clientConfig.module.rules[0].use.shift(); // remove nls loader
-
-module.exports = clientConfig;
diff --git a/extensions/image-preview/package.json b/extensions/image-preview/package.json
index 2284ceb2ef..dd04cc7777 100644
--- a/extensions/image-preview/package.json
+++ b/extensions/image-preview/package.json
@@ -16,7 +16,7 @@
"vscode": "^1.39.0"
},
"main": "./out/extension",
- "browser": "./dist/extension.js",
+ "browser": "./dist/browser/extension.js",
"categories": [
"Other"
],
diff --git a/extensions/json-language-features/extension-browser.webpack.config.js b/extensions/json-language-features/extension-browser.webpack.config.js
index 82d2212771..3efcb52adb 100644
--- a/extensions/json-language-features/extension-browser.webpack.config.js
+++ b/extensions/json-language-features/extension-browser.webpack.config.js
@@ -7,10 +7,10 @@
'use strict';
-const withDefaults = require('../shared.webpack.config');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
const path = require('path');
-const clientConfig = withDefaults({
+module.exports = withBrowserDefaults({
target: 'webworker',
context: path.join(__dirname, 'client'),
entry: {
@@ -19,16 +19,5 @@ const clientConfig = withDefaults({
output: {
filename: 'jsonClientMain.js',
path: path.join(__dirname, 'client', 'dist', 'browser')
- },
- performance: {
- hints: false
- },
- resolve: {
- alias: {
- 'vscode-nls': path.resolve(__dirname, '../../build/polyfills/vscode-nls.js')
- }
}
});
-clientConfig.module.rules[0].use.shift(); // remove nls loader
-
-module.exports = clientConfig;
diff --git a/extensions/json-language-features/package.json b/extensions/json-language-features/package.json
index 6c7e2d7cf7..db003f0512 100644
--- a/extensions/json-language-features/package.json
+++ b/extensions/json-language-features/package.json
@@ -129,7 +129,7 @@
"dependencies": {
"request-light": "^0.3.0",
"vscode-extension-telemetry": "0.1.1",
- "vscode-languageclient": "7.0.0-next.5",
+ "vscode-languageclient": "7.0.0-next.5.1",
"vscode-nls": "^4.1.2"
},
"devDependencies": {
diff --git a/extensions/json-language-features/server/extension-browser.webpack.config.js b/extensions/json-language-features/server/extension-browser.webpack.config.js
index f9b229e163..bc54973876 100644
--- a/extensions/json-language-features/server/extension-browser.webpack.config.js
+++ b/extensions/json-language-features/server/extension-browser.webpack.config.js
@@ -7,11 +7,10 @@
'use strict';
-const withDefaults = require('../../shared.webpack.config');
+const withBrowserDefaults = require('../../shared.webpack.config').browser;
const path = require('path');
-const serverConfig = withDefaults({
- target: 'webworker',
+module.exports = withBrowserDefaults({
context: __dirname,
entry: {
extension: './src/browser/jsonServerMain.ts',
@@ -20,16 +19,5 @@ const serverConfig = withDefaults({
filename: 'jsonServerMain.js',
path: path.join(__dirname, 'dist', 'browser'),
libraryTarget: 'var'
- },
- performance: {
- hints: false
- },
- resolve: {
- alias: {
- 'vscode-nls': path.resolve(__dirname, '../../../build/polyfills/vscode-nls.js')
- }
}
});
-serverConfig.module.rules[0].use.shift(); // remove nls loader
-
-module.exports = serverConfig;
diff --git a/extensions/json-language-features/server/package.json b/extensions/json-language-features/server/package.json
index 751e1dd5c3..eb2b984af0 100644
--- a/extensions/json-language-features/server/package.json
+++ b/extensions/json-language-features/server/package.json
@@ -10,7 +10,7 @@
"bin": {
"vscode-json-languageserver": "./bin/vscode-json-languageserver"
},
- "main": "./out/jsonServerMain",
+ "main": "./out/node/jsonServerMain",
"dependencies": {
"jsonc-parser": "^2.2.1",
"request-light": "^0.3.0",
diff --git a/extensions/json-language-features/yarn.lock b/extensions/json-language-features/yarn.lock
index 237cddb80f..29972b7df0 100644
--- a/extensions/json-language-features/yarn.lock
+++ b/extensions/json-language-features/yarn.lock
@@ -125,10 +125,10 @@ vscode-jsonrpc@6.0.0-next.2:
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0-next.2.tgz#3d73f86d812304cb91b9fb1efee40ec60b09ed7f"
integrity sha512-dKQXRYNUY6BHALQJBJlyZyv9oWlYpbJ2vVoQNNVNPLAYQ3hzNp4zy+iSo7zGx1BPXByArJQDWTKLQh8dz3dnNw==
-vscode-languageclient@7.0.0-next.5:
- version "7.0.0-next.5"
- resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0-next.5.tgz#7ae84c598dff360bd2bc64322b74e10e5d0b9cd6"
- integrity sha512-ec+fJg+JiNBIdbeKbzssSuORUaVdtLValtiYdNEUCUjpYE+Y6xXPtXwiZOlS/0OB9pC/RLCMxsj16UwWncQhYQ==
+vscode-languageclient@7.0.0-next.5.1:
+ version "7.0.0-next.5.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0-next.5.1.tgz#ed93f14e4c2cdccedf15002c7bf8ef9cb638f36c"
+ integrity sha512-OONvbk3IFpubwF8/Y5uPQaq5J5CEskpeET3SfK4iGlv5OUK+44JawH/SEW5wXuEPpfdMLEMZLuGLU5v5d7N7PQ==
dependencies:
semver "^6.3.0"
vscode-languageserver-protocol "3.16.0-next.4"
diff --git a/extensions/markdown-language-features/extension-browser.webpack.config.js b/extensions/markdown-language-features/extension-browser.webpack.config.js
index 7566ffd33b..cc74eb2a15 100644
--- a/extensions/markdown-language-features/extension-browser.webpack.config.js
+++ b/extensions/markdown-language-features/extension-browser.webpack.config.js
@@ -7,26 +7,11 @@
'use strict';
-const withDefaults = require('../shared.webpack.config');
-const path = require('path');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-const clientConfig = withDefaults({
+module.exports = withBrowserDefaults({
context: __dirname,
- target: 'webworker',
entry: {
extension: './src/extension.ts'
- },
- resolve: {
- alias: {
- 'vscode-extension-telemetry': path.resolve(__dirname, '../../build/polyfills/vscode-extension-telemetry.js'),
- 'vscode-nls': path.resolve(__dirname, '../../build/polyfills/vscode-nls.js'),
- },
- },
- performance: {
- hints: false
- },
+ }
});
-
-clientConfig.module.rules[0].use.shift(); // remove nls loader
-
-module.exports = clientConfig;
diff --git a/extensions/markdown-language-features/package.json b/extensions/markdown-language-features/package.json
index c3b7e73b25..becb8ad271 100644
--- a/extensions/markdown-language-features/package.json
+++ b/extensions/markdown-language-features/package.json
@@ -12,7 +12,7 @@
"vscode": "^1.20.0"
},
"main": "./out/extension",
- "browser": "./dist/extension.js",
+ "browser": "./dist/browser/extension",
"categories": [
"Programming Languages"
],
diff --git a/extensions/merge-conflict/extension-browser.webpack.config.js b/extensions/merge-conflict/extension-browser.webpack.config.js
index c7418f9dd4..1f84f5e3eb 100644
--- a/extensions/merge-conflict/extension-browser.webpack.config.js
+++ b/extensions/merge-conflict/extension-browser.webpack.config.js
@@ -7,27 +7,14 @@
'use strict';
-const withDefaults = require('../shared.webpack.config');
-const path = require('path');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-const clientConfig = withDefaults({
- target: 'webworker',
+module.exports = withBrowserDefaults({
context: __dirname,
entry: {
extension: './src/mergeConflictMain.ts'
},
output: {
filename: 'mergeConflictMain.js'
- },
- performance: {
- hints: false
- },
- resolve: {
- alias: {
- 'vscode-nls': path.resolve(__dirname, '../../build/polyfills/vscode-nls.js')
- }
}
});
-clientConfig.module.rules[0].use.shift(); // remove nls loader
-
-module.exports = clientConfig;
diff --git a/extensions/merge-conflict/package.json b/extensions/merge-conflict/package.json
index f59738d300..d438b96ca6 100644
--- a/extensions/merge-conflict/package.json
+++ b/extensions/merge-conflict/package.json
@@ -17,7 +17,7 @@
"*"
],
"main": "./out/mergeConflictMain",
- "browser": "./dist/mergeConflictMain",
+ "browser": "./dist/browser/mergeConflictMain",
"scripts": {
"compile": "gulp compile-extension:merge-conflict",
"watch": "gulp watch-extension:merge-conflict"
diff --git a/extensions/microsoft-authentication/src/AADHelper.ts b/extensions/microsoft-authentication/src/AADHelper.ts
index 4ad0cae03e..6fc1013a21 100644
--- a/extensions/microsoft-authentication/src/AADHelper.ts
+++ b/extensions/microsoft-authentication/src/AADHelper.ts
@@ -205,9 +205,9 @@ export class AzureActiveDirectoryService {
}, 1000 * 30);
}
- private async convertToSession(token: IToken): Promise {
+ private async convertToSession(token: IToken): Promise {
const resolvedToken = await this.resolveAccessToken(token);
- return new vscode.AuthenticationSession2(token.sessionId, resolvedToken, token.account, token.scope.split(' '));
+ return new vscode.AuthenticationSession(token.sessionId, resolvedToken, token.account, token.scope.split(' '));
}
private async resolveAccessToken(token: IToken): Promise {
@@ -240,11 +240,11 @@ export class AzureActiveDirectoryService {
}
}
- get sessions(): Promise {
+ get sessions(): Promise {
return Promise.all(this._tokens.map(token => this.convertToSession(token)));
}
- public async login(scope: string): Promise {
+ public async login(scope: string): Promise {
Logger.info('Logging in...');
if (!scope.includes('offline_access')) {
Logger.info('Warning: The \'offline_access\' scope was not included, so the generated token will not be able to be refreshed.');
@@ -338,7 +338,7 @@ export class AzureActiveDirectoryService {
}
}
- private async loginWithoutLocalServer(scope: string): Promise {
+ private async loginWithoutLocalServer(scope: string): Promise {
const callbackUri = await vscode.env.asExternalUri(vscode.Uri.parse(`${vscode.env.uriScheme}://vscode.microsoft-authentication`));
const nonce = crypto.randomBytes(16).toString('base64');
const port = (callbackUri.authority.match(/:([0-9]*)$/) || [])[1] || (callbackUri.scheme === 'https' ? 443 : 80);
@@ -353,7 +353,7 @@ export class AzureActiveDirectoryService {
});
vscode.env.openExternal(uri);
- const timeoutPromise = new Promise((_: (value: vscode.AuthenticationSession2) => void, reject) => {
+ const timeoutPromise = new Promise((_: (value: vscode.AuthenticationSession) => void, reject) => {
const wait = setTimeout(() => {
clearTimeout(wait);
reject('Login timed out.');
@@ -363,9 +363,9 @@ export class AzureActiveDirectoryService {
return Promise.race([this.handleCodeResponse(state, codeVerifier, scope), timeoutPromise]);
}
- private async handleCodeResponse(state: string, codeVerifier: string, scope: string): Promise {
+ private async handleCodeResponse(state: string, codeVerifier: string, scope: string): Promise {
let uriEventListener: vscode.Disposable;
- return new Promise((resolve: (value: vscode.AuthenticationSession2) => void, reject) => {
+ return new Promise((resolve: (value: vscode.AuthenticationSession) => void, reject) => {
uriEventListener = this._uriHandler.event(async (uri: vscode.Uri) => {
try {
const query = parseQuery(uri);
diff --git a/extensions/python/extension-browser.webpack.config.js b/extensions/python/extension-browser.webpack.config.js
index 58ecb822fc..785672b6c5 100644
--- a/extensions/python/extension-browser.webpack.config.js
+++ b/extensions/python/extension-browser.webpack.config.js
@@ -7,27 +7,14 @@
'use strict';
-const withDefaults = require('../shared.webpack.config');
-const path = require('path');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-const clientConfig = withDefaults({
- target: 'webworker',
+module.exports = withBrowserDefaults({
context: __dirname,
entry: {
extension: './src/pythonMain.ts'
},
output: {
filename: 'pythonMain.js'
- },
- performance: {
- hints: false
- },
- resolve: {
- alias: {
- 'vscode-nls': path.resolve(__dirname, '../../build/polyfills/vscode-nls.js')
- }
}
});
-clientConfig.module.rules[0].use.shift(); // remove nls loader
-
-module.exports = clientConfig;
diff --git a/extensions/python/package.json b/extensions/python/package.json
index ab813f048d..612fcf7650 100644
--- a/extensions/python/package.json
+++ b/extensions/python/package.json
@@ -8,7 +8,7 @@
"engines": { "vscode": "*" },
"activationEvents": ["onLanguage:python"],
"main": "./out/pythonMain",
- "browser": "./dist/pythonMain",
+ "browser": "./dist/browser/pythonMain",
"extensionKind": [ "ui", "workspace" ],
"contributes": {
"languages": [{
diff --git a/extensions/shared.webpack.config.js b/extensions/shared.webpack.config.js
index f1546f9e15..1d6d7a1f81 100644
--- a/extensions/shared.webpack.config.js
+++ b/extensions/shared.webpack.config.js
@@ -13,8 +13,9 @@ const fs = require('fs');
const merge = require('merge-options');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const { NLSBundlePlugin } = require('vscode-nls-dev/lib/webpack-bundler');
+const { DefinePlugin } = require('webpack');
-module.exports = function withDefaults(/**@type WebpackConfig*/extConfig) {
+function withNodeDefaults(/**@type WebpackConfig*/extConfig) {
// Need to find the top-most `package.json` file
const folderName = path.relative(__dirname, extConfig.context).split(/[\\\/]/)[0];
const pkgPath = path.join(__dirname, folderName, 'package.json');
@@ -79,3 +80,66 @@ module.exports = function withDefaults(/**@type WebpackConfig*/extConfig) {
return merge(defaultConfig, extConfig);
};
+
+
+function withBrowserDefaults(/**@type WebpackConfig*/extConfig) {
+ /** @type WebpackConfig */
+ let defaultConfig = {
+ 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
+ resolve: {
+ mainFields: ['module', 'main'],
+ extensions: ['.ts', '.js'], // support ts-files and js-files
+ alias: {
+ 'vscode-nls': path.resolve(__dirname, '../build/polyfills/vscode-nls.js'),
+ 'vscode-extension-telemetry': path.resolve(__dirname, '../build/polyfills/vscode-extension-telemetry.js')
+ }
+ },
+ module: {
+ rules: [{
+ test: /\.ts$/,
+ exclude: /node_modules/,
+ use: [{
+ // configure TypeScript loader:
+ // * enable sources maps for end-to-end source maps
+ loader: 'ts-loader',
+ options: {
+ compilerOptions: {
+ 'sourceMap': true,
+ }
+ }
+ }]
+ }]
+ },
+ externals: {
+ 'vscode': 'commonjs vscode', // ignored because it doesn't exist
+ },
+ performance: {
+ hints: false
+ },
+ output: {
+ // all output goes into `dist`.
+ // packaging depends on that and this must always be like it
+ filename: '[name].js',
+ path: path.join(extConfig.context, 'dist', 'browser'),
+ libraryTarget: 'commonjs',
+ },
+ // yes, really source maps
+ devtool: 'source-map',
+ plugins: [
+ // @ts-expect-error
+ new CopyWebpackPlugin([
+ { from: 'src', to: '.', ignore: ['**/test/**', '*.ts'] }
+ ]),
+ new DefinePlugin({ WEBWORKER: JSON.stringify(true) })
+ ]
+ };
+
+ return merge(defaultConfig, extConfig);
+};
+
+
+module.exports = withNodeDefaults;
+module.exports.node = withNodeDefaults;
+module.exports.browser = withBrowserDefaults;
+
diff --git a/extensions/sql/cgmanifest.json b/extensions/sql/cgmanifest.json
index 56b576cdc7..3ef90a09d1 100644
--- a/extensions/sql/cgmanifest.json
+++ b/extensions/sql/cgmanifest.json
@@ -6,7 +6,7 @@
"git": {
"name": "Microsoft/vscode-mssql",
"repositoryUrl": "https://github.com/Microsoft/vscode-mssql",
- "commitHash": "37a22725186b5b481b2882a78c7b9fe024c13946"
+ "commitHash": "750d30dc48c4c0317b63bb5f1ed3e71487bb84a1"
}
},
"license": "MIT",
diff --git a/extensions/sql/syntaxes/sql.tmLanguage.json b/extensions/sql/syntaxes/sql.tmLanguage.json
index b81b66fb16..0e66dda068 100644
--- a/extensions/sql/syntaxes/sql.tmLanguage.json
+++ b/extensions/sql/syntaxes/sql.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/vscode-mssql/commit/37a22725186b5b481b2882a78c7b9fe024c13946",
+ "version": "https://github.com/Microsoft/vscode-mssql/commit/750d30dc48c4c0317b63bb5f1ed3e71487bb84a1",
"name": "SQL",
"scopeName": "source.sql",
"patterns": [
@@ -404,7 +404,7 @@
}
},
"comment": "this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.",
- "match": "(N)?(')(?:[^'\\\\]|\\\\.)*(')",
+ "match": "(N)?(')[^']*(')",
"name": "string.quoted.single.sql"
},
{
@@ -437,7 +437,7 @@
}
},
"comment": "this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.",
- "match": "(`)(?:[^`\\\\]|\\\\.)*(`)",
+ "match": "(`)[^`\\\\]*(`)",
"name": "string.quoted.other.backtick.sql"
},
{
@@ -470,7 +470,7 @@
}
},
"comment": "this is faster than the next begin/end rule since sub-pattern will match till end-of-line and SQL files tend to have very long lines.",
- "match": "(\")(?:[^\"#\\\\]|\\\\.)*(\")",
+ "match": "(\")[^\"#]*(\")",
"name": "string.quoted.double.sql"
},
{
diff --git a/extensions/theme-defaults/themes/light_defaults.json b/extensions/theme-defaults/themes/light_defaults.json
index fa1e1dbc3c..a22dd21b4a 100644
--- a/extensions/theme-defaults/themes/light_defaults.json
+++ b/extensions/theme-defaults/themes/light_defaults.json
@@ -19,7 +19,11 @@
"statusBarItem.remoteForeground": "#FFF",
"statusBarItem.remoteBackground": "#16825D",
"sideBarSectionHeader.background": "#0000",
- "sideBarSectionHeader.border": "#61616130"
+ "sideBarSectionHeader.border": "#61616130",
+ "notebook.cellFocusBackground": "#c8ddf150",
+ "notebook.cellBorderColor": "#dae3e9",
+ "notebook.outputContainerBackgroundColor": "#c8ddf150",
+ "notebook.focusedCellShadow": "#00315040"
},
"semanticHighlighting": true
}
diff --git a/extensions/vscode-web-playground/extension-browser.webpack.config.js b/extensions/vscode-web-playground/extension-browser.webpack.config.js
index 3fb4b69338..35bf40be77 100644
--- a/extensions/vscode-web-playground/extension-browser.webpack.config.js
+++ b/extensions/vscode-web-playground/extension-browser.webpack.config.js
@@ -7,11 +7,10 @@
'use strict';
const path = require('path');
-const withDefaults = require('../shared.webpack.config');
+const withBrowserDefaults = require('../shared.webpack.config').browser;
-module.exports = withDefaults({
+module.exports = withBrowserDefaults({
context: __dirname,
- target: 'webworker',
node: false,
entry: {
extension: './src/extension.ts',
diff --git a/extensions/vscode-web-playground/package.json b/extensions/vscode-web-playground/package.json
index 7d48eca66c..954aec0fae 100644
--- a/extensions/vscode-web-playground/package.json
+++ b/extensions/vscode-web-playground/package.json
@@ -11,7 +11,7 @@
"onFileSystem:github",
"onDebug"
],
- "browser": "./dist/extension",
+ "browser": "./dist/browser/extension",
"main": "./out/extension",
"engines": {
"vscode": "^1.25.0"
diff --git a/extensions/vscode-web-playground/src/extension.ts b/extensions/vscode-web-playground/src/extension.ts
index da80a0847c..0a281b3fe9 100644
--- a/extensions/vscode-web-playground/src/extension.ts
+++ b/extensions/vscode-web-playground/src/extension.ts
@@ -15,10 +15,10 @@
import * as vscode from 'vscode';
import { MemFS } from './memfs';
-declare const window: unknown;
+declare const navigator: unknown;
export function activate(context: vscode.ExtensionContext) {
- if (typeof window !== 'undefined') { // do not run under node.js
+ if (typeof navigator === 'object') { // do not run under node.js
const memFs = enableFs(context);
if (vscode.workspace.workspaceFolders?.some(f => f.uri.scheme === MemFS.scheme)) {
diff --git a/package.json b/package.json
index 30163a20c4..3cd7324890 100644
--- a/package.json
+++ b/package.json
@@ -16,8 +16,11 @@
"compile": "gulp compile --max_old_space_size=4095",
"watch": "gulp watch --max_old_space_size=4095",
"watchd": "deemon yarn watch",
+ "watch-webd": "deemon yarn watch-web",
"kill-watchd": "deemon --kill yarn watch",
+ "kill-watch-webd": "deemon --kill yarn watch-web",
"restart-watchd": "deemon --restart yarn watch",
+ "restart-watch-webd": "deemon --restart yarn watch-web",
"watch-client": "gulp watch-client --max_old_space_size=4095",
"mocha": "mocha test/unit/node/all.js --delay",
"precommit": "node build/gulpfile.hygiene.js",
@@ -35,6 +38,8 @@
"strict-function-types-watch": "tsc --watch -p src/tsconfig.json --noEmit --strictFunctionTypes",
"update-distro": "node build/npm/update-distro.js",
"web": "node resources/serverless/code-web.js",
+ "compile-web": "gulp compile-web --max_old_space_size=4095",
+ "watch-web": "gulp watch-web --max_old_space_size=4095",
"eslint": "eslint -c .eslintrc.json --rulesdir ./build/lib/eslint --ext .ts --ext .js ./src/vs ./extensions",
"sqllint": "eslint --no-eslintrc -c .eslintrc.sql.ts.json --rulesdir ./build/lib/eslint --ext .ts ./src/sql"
},
@@ -56,7 +61,7 @@
"html-query-plan": "git://github.com/anthonydresser/html-query-plan.git#2.6",
"http-proxy-agent": "^2.1.0",
"https-proxy-agent": "^2.2.3",
- "iconv-lite": "0.6.0",
+ "iconv-lite-umd": "0.6.5",
"jquery": "3.5.0",
"jschardet": "2.1.1",
"keytar": "^5.5.0",
@@ -70,7 +75,7 @@
"reflect-metadata": "^0.1.8",
"rxjs": "5.4.0",
"sanitize-html": "^1.19.1",
- "semver-umd": "^5.5.6",
+ "semver-umd": "^5.5.7",
"slickgrid": "github:anthonydresser/SlickGrid#2.3.33",
"spdlog": "^0.11.1",
"sudo-prompt": "9.1.1",
@@ -78,9 +83,9 @@
"vscode-nsfw": "1.2.8",
"vscode-oniguruma": "1.3.1",
"vscode-proxy-agent": "^0.5.2",
- "vscode-ripgrep": "^1.5.8",
+ "vscode-ripgrep": "^1.7.0",
"vscode-sqlite3": "4.0.10",
- "vscode-textmate": "5.1.1",
+ "vscode-textmate": "5.2.0",
"xterm": "4.7.0-beta.3",
"xterm-addon-search": "0.7.0",
"xterm-addon-unicode11": "0.2.0",
@@ -98,7 +103,6 @@
"@types/debug": "^4.1.5",
"@types/graceful-fs": "4.1.2",
"@types/http-proxy-agent": "^2.0.1",
- "@types/iconv-lite": "0.0.1",
"@types/keytar": "^4.4.0",
"@types/minimist": "^1.2.0",
"@types/mocha": "2.2.39",
@@ -120,12 +124,11 @@
"asar": "^0.14.0",
"chromium-pickle-js": "^0.2.0",
"copy-webpack-plugin": "^4.5.2",
- "coveralls": "^2.11.11",
"cson-parser": "^1.3.3",
"css-loader": "^3.2.0",
"debounce": "^1.0.0",
"deemon": "^1.4.0",
- "electron": "7.3.1",
+ "electron": "7.3.2",
"eslint": "6.8.0",
"eslint-plugin-jsdoc": "^19.1.0",
"event-stream": "3.3.4",
@@ -190,9 +193,9 @@
"vsce": "1.48.0",
"vscode-debugprotocol": "1.41.0",
"vscode-nls-dev": "^3.3.1",
- "webpack": "^4.16.5",
- "webpack-cli": "^3.3.8",
- "webpack-stream": "^5.1.1",
+ "webpack": "^4.43.0",
+ "webpack-cli": "^3.3.12",
+ "webpack-stream": "^5.2.1",
"yaserver": "^0.2.0"
},
"repository": {
diff --git a/remote/package.json b/remote/package.json
index bca65dd5a8..f1e5015f02 100644
--- a/remote/package.json
+++ b/remote/package.json
@@ -20,7 +20,7 @@
"html-query-plan": "git://github.com/anthonydresser/html-query-plan.git#2.6",
"http-proxy-agent": "^2.1.0",
"https-proxy-agent": "^2.2.3",
- "iconv-lite": "0.6.0",
+ "iconv-lite-umd": "0.6.5",
"jquery": "3.5.0",
"jschardet": "2.1.1",
"minimist": "^1.2.5",
@@ -30,14 +30,14 @@
"reflect-metadata": "^0.1.8",
"rxjs": "5.4.0",
"sanitize-html": "^1.19.1",
- "semver-umd": "^5.5.6",
+ "semver-umd": "^5.5.7",
"slickgrid": "github:anthonydresser/SlickGrid#2.3.33",
"spdlog": "^0.11.1",
"vscode-nsfw": "1.2.8",
"vscode-oniguruma": "1.3.1",
"vscode-proxy-agent": "^0.5.2",
"vscode-ripgrep": "^1.5.8",
- "vscode-textmate": "5.1.1",
+ "vscode-textmate": "5.2.0",
"xterm": "4.7.0-beta.3",
"xterm-addon-search": "0.7.0",
"xterm-addon-unicode11": "0.2.0",
diff --git a/remote/web/package.json b/remote/web/package.json
index bf81ca6488..8de1ac76b2 100644
--- a/remote/web/package.json
+++ b/remote/web/package.json
@@ -14,15 +14,17 @@
"ansi_up": "^3.0.0",
"chart.js": "^2.6.0",
"html-query-plan": "git://github.com/anthonydresser/html-query-plan.git#2.6",
+ "iconv-lite-umd": "0.6.5",
+ "jschardet": "2.1.1",
"jquery": "3.5.0",
"ng2-charts": "^1.6.0",
"reflect-metadata": "^0.1.8",
"rxjs": "5.4.0",
"sanitize-html": "^1.19.1",
- "semver-umd": "^5.5.6",
+ "semver-umd": "^5.5.7",
"slickgrid": "github:anthonydresser/SlickGrid#2.3.33",
"vscode-oniguruma": "1.3.1",
- "vscode-textmate": "5.1.1",
+ "vscode-textmate": "5.2.0",
"xterm": "4.7.0-beta.3",
"xterm-addon-search": "0.7.0",
"xterm-addon-unicode11": "0.2.0",
diff --git a/remote/web/yarn.lock b/remote/web/yarn.lock
index 66574ac713..6bc88bb10f 100644
--- a/remote/web/yarn.lock
+++ b/remote/web/yarn.lock
@@ -182,6 +182,11 @@ htmlparser2@^3.10.0:
inherits "^2.0.1"
readable-stream "^3.1.1"
+iconv-lite-umd@0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.5.tgz#6a1f621a3b4d125f72feff813a9839e1ebd6c722"
+ integrity sha512-WDegH4al+e3n3jTOStRvm+jzDA3JMUQGgzdAsMxAgcgB0Oi72HjfdsoX08ieKsy3rKexXVjWZr41aOIUaCZnMg==
+
inherits@^2.0.1, inherits@^2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
@@ -192,6 +197,11 @@ jquery@3.5.0:
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.0.tgz#9980b97d9e4194611c36530e7dc46a58d7340fc9"
integrity sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==
+jschardet@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-2.1.1.tgz#af6f8fd0b3b0f5d46a8fd9614a4fce490575c184"
+ integrity sha512-pA5qG9Zwm8CBpGlK/lo2GE9jPxwqRgMV7Lzc/1iaPccw6v4Rhj8Zg2BTyrdmHmxlJojnbLupLeRnaPLsq03x6Q==
+
lodash.clonedeep@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
@@ -285,10 +295,10 @@ sanitize-html@^1.19.1:
srcset "^1.0.0"
xtend "^4.0.1"
-semver-umd@^5.5.6:
- version "5.5.6"
- resolved "https://registry.yarnpkg.com/semver-umd/-/semver-umd-5.5.6.tgz#1d185bbd2caec825c564b54907cd09e14083f228"
- integrity sha512-6ARYXVi4Y4VO5HfyCjT/6xyykBtJwEXSGQ8ON4UPQSFOjZUDsbAE0J614QcBBsLTTyQMEqvsXN804vAqpydjzw==
+semver-umd@^5.5.7:
+ version "5.5.7"
+ resolved "https://registry.yarnpkg.com/semver-umd/-/semver-umd-5.5.7.tgz#966beb5e96c7da6fbf09c3da14c2872d6836c528"
+ integrity sha512-XgjPNlD0J6aIc8xoTN6GQGwWc2Xg0kq8NzrqMVuKG/4Arl6ab1F8+Am5Y/XKKCR+FceFr2yN/Uv5ZJBhRyRqKg==
"slickgrid@github:anthonydresser/SlickGrid#2.3.33":
version "2.3.33"
@@ -343,10 +353,10 @@ vscode-oniguruma@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.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.1.1.tgz#d88dbf271bee7cede455a21bd4894ba5724a4a7e"
- integrity sha512-5VHjF+Fglf9d2JI5OyQ7FHutK6/29G0qYyD920K0SWO7uY8JTWbqyKAHEtfB/ZDk2fOe/E23n3wz9fHXKi63yg==
+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==
xtend@^4.0.1:
version "4.0.2"
diff --git a/remote/yarn.lock b/remote/yarn.lock
index d2b5e39fe1..de15b1703f 100644
--- a/remote/yarn.lock
+++ b/remote/yarn.lock
@@ -356,12 +356,10 @@ https-proxy-agent@^2.2.3:
agent-base "^4.3.0"
debug "^3.1.0"
-iconv-lite@0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.0.tgz#66a93b80df0bd05d2a43a7426296b7f91073f125"
- integrity sha512-43ZpGYZ9QtuutX5l6WC1DSO8ane9N+Ct5qPLF2OV7vM9abM69gnAbVkh66ibaZd3aOGkoP1ZmringlKhLBkw2Q==
- dependencies:
- safer-buffer ">= 2.1.2 < 3"
+iconv-lite-umd@0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/iconv-lite-umd/-/iconv-lite-umd-0.6.5.tgz#6a1f621a3b4d125f72feff813a9839e1ebd6c722"
+ integrity sha512-WDegH4al+e3n3jTOStRvm+jzDA3JMUQGgzdAsMxAgcgB0Oi72HjfdsoX08ieKsy3rKexXVjWZr41aOIUaCZnMg==
inherits@^2.0.1, inherits@^2.0.3:
version "2.0.4"
@@ -567,11 +565,6 @@ safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
-"safer-buffer@>= 2.1.2 < 3":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
sanitize-html@^1.19.1:
version "1.20.1"
resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.20.1.tgz#f6effdf55dd398807171215a62bfc21811bacf85"
@@ -588,10 +581,10 @@ sanitize-html@^1.19.1:
srcset "^1.0.0"
xtend "^4.0.1"
-semver-umd@^5.5.6:
- version "5.5.6"
- resolved "https://registry.yarnpkg.com/semver-umd/-/semver-umd-5.5.6.tgz#1d185bbd2caec825c564b54907cd09e14083f228"
- integrity sha512-6ARYXVi4Y4VO5HfyCjT/6xyykBtJwEXSGQ8ON4UPQSFOjZUDsbAE0J614QcBBsLTTyQMEqvsXN804vAqpydjzw==
+semver-umd@^5.5.7:
+ version "5.5.7"
+ resolved "https://registry.yarnpkg.com/semver-umd/-/semver-umd-5.5.7.tgz#966beb5e96c7da6fbf09c3da14c2872d6836c528"
+ integrity sha512-XgjPNlD0J6aIc8xoTN6GQGwWc2Xg0kq8NzrqMVuKG/4Arl6ab1F8+Am5Y/XKKCR+FceFr2yN/Uv5ZJBhRyRqKg==
semver@^5.3.0:
version "5.6.0"
@@ -718,10 +711,10 @@ vscode-ripgrep@^1.5.8:
resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.5.8.tgz#32cb33da6d1a9ca8f5de8c2813ed5114fd55fc11"
integrity sha512-l6Pv/t1Jk63RU+kEkMO04XxnNRYdyzuesizj9AzFpcfrUxxpAjEJBK1qO9Mov30UUGZl7uDUBn+uCv9koaHPPA==
-vscode-textmate@5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.1.1.tgz#d88dbf271bee7cede455a21bd4894ba5724a4a7e"
- integrity sha512-5VHjF+Fglf9d2JI5OyQ7FHutK6/29G0qYyD920K0SWO7uY8JTWbqyKAHEtfB/ZDk2fOe/E23n3wz9fHXKi63yg==
+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==
vscode-windows-ca-certs@0.2.0:
version "0.2.0"
diff --git a/resources/linux/bin/code.sh b/resources/linux/bin/code.sh
index d72ec7260d..f53c3cdcce 100755
--- a/resources/linux/bin/code.sh
+++ b/resources/linux/bin/code.sh
@@ -1,28 +1,36 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
#
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the Source EULA. See License.txt in the project root for license information.
# test that VSCode wasn't installed inside WSL
if grep -qi Microsoft /proc/version && [ -z "$DONT_PROMPT_WSL_INSTALL" ]; then
- echo "To use VS Code with the Windows Subsystem for Linux, please install VS Code in Windows and uninstall the Linux version in WSL. You can then use the '@@PRODNAME@@' command in a WSL terminal just as you would in a normal command prompt." 1>&2
- read -e -p "Do you want to continue anyways ? [y/N] " YN
-
- [[ $YN == "n" || $YN == "N" || $YN == "" ]] && exit 1
- echo "To no longer see this prompt, start @@PRODNAME@@ with the environment variable DONT_PROMPT_WSL_INSTALL defined."
+ echo "To use @@PRODNAME@@ with the Windows Subsystem for Linux, please install @@PRODNAME@@ in Windows and uninstall the Linux version in WSL. You can then use the \`@@NAME@@\` command in a WSL terminal just as you would in a normal command prompt." 1>&2
+ printf "Do you want to continue anyway? [y/N] " 1>&2
+ read -r YN
+ YN=$(printf '%s' "$YN" | tr '[:upper:]' '[:lower:]')
+ case "$YN" in
+ y | yes )
+ ;;
+ * )
+ exit 1
+ ;;
+ esac
+ echo "To no longer see this prompt, start @@PRODNAME@@ with the environment variable DONT_PROMPT_WSL_INSTALL defined." 1>&2
fi
-
# If root, ensure that --user-data-dir or --file-write is specified
if [ "$(id -u)" = "0" ]; then
- for i in $@
+ for i in "$@"
do
- if [[ $i == --user-data-dir || $i == --user-data-dir=* || $i == --file-write ]]; then
- CAN_LAUNCH_AS_ROOT=1
- fi
+ case "$i" in
+ --user-data-dir | --user-data-dir=* | --file-write )
+ CAN_LAUNCH_AS_ROOT=1
+ ;;
+ esac
done
if [ -z $CAN_LAUNCH_AS_ROOT ]; then
- echo "You are trying to start Azure Data Studio as a super user which is not recommended. If you really want to, you must specify an alternate user data directory using the --user-data-dir argument." 1>&2
+ echo "You are trying to start @@PRODNAME@@ as a super user which isn't recommended. If this was intended, please specify an alternate user data directory using the \`--user-data-dir\` argument." 1>&2
exit 1
fi
fi
@@ -33,7 +41,7 @@ if [ ! -L "$0" ]; then
else
if command -v readlink >/dev/null; then
# if readlink exists, follow the symlink and find relatively
- VSCODE_PATH="$(dirname $(readlink -f "$0"))/.."
+ VSCODE_PATH="$(dirname "$(readlink -f "$0")")/.."
else
# else use the standard install location
VSCODE_PATH="/usr/share/@@NAME@@"
diff --git a/resources/linux/snap/snapcraft.yaml b/resources/linux/snap/snapcraft.yaml
index c39e5f4f84..7dbc1680ba 100644
--- a/resources/linux/snap/snapcraft.yaml
+++ b/resources/linux/snap/snapcraft.yaml
@@ -24,6 +24,7 @@ parts:
plugin: dump
source: .
stage-packages:
+ - ibus-gtk3
- fcitx-frontend-gtk3
- gvfs-libs
- libasound2
diff --git a/resources/serverless/code-web.js b/resources/serverless/code-web.js
index d4314c5c3f..bee6ca5b71 100644
--- a/resources/serverless/code-web.js
+++ b/resources/serverless/code-web.js
@@ -6,17 +6,18 @@
*--------------------------------------------------------------------------------------------*/
// @ts-check
-/** @typedef {import('../../src/vs/workbench/workbench.web.api').IWorkbenchConstructionOptions} WebConfiguration **/
const http = require('http');
const url = require('url');
const fs = require('fs');
const path = require('path');
const util = require('util');
-const glob = require('glob');
const opn = require('opn');
const minimist = require('minimist');
-const webpack = require('webpack');
+const fancyLog = require('fancy-log');
+const ansiColors = require('ansi-colors');
+
+const extensions = require('../../build/lib/extensions');
const APP_ROOT = path.join(__dirname, '..', '..');
const EXTENSIONS_ROOT = path.join(APP_ROOT, 'extensions');
@@ -60,20 +61,35 @@ const AUTHORITY = process.env.VSCODE_AUTHORITY || `${HOST}:${PORT}`;
const exists = (path) => util.promisify(fs.exists)(path);
const readFile = (path) => util.promisify(fs.readFile)(path);
-const CharCode_PC = '%'.charCodeAt(0);
+
+let unbuiltExensions = [];
async function initialize() {
- const extensionFolders = await util.promisify(fs.readdir)(EXTENSIONS_ROOT);
+ const builtinExtensions = [];
- const staticExtensions = [];
+ const children = await util.promisify(fs.readdir)(EXTENSIONS_ROOT, { withFileTypes: true });
+ const folders = children.filter(c => !c.isFile());
+ await Promise.all(folders.map(async folder => {
+ const folderName = folder.name;
+ const extensionPath = path.join(EXTENSIONS_ROOT, folderName);
- const webpackConfigs = [];
+ let children = [];
+ try {
+ children = await util.promisify(fs.readdir)(extensionPath);
+ } catch (error) {
+ console.log(error);
+ return;
+ }
- await Promise.all(extensionFolders.map(async extensionFolder => {
- const packageJSONPath = path.join(EXTENSIONS_ROOT, extensionFolder, 'package.json');
+ const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0];
+ const readmePath = readme ? path.join(extensionPath, readme) : undefined;
+ const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0];
+ const changelogPath = changelog ? path.join(extensionPath, changelog) : undefined;
+
+ const packageJSONPath = path.join(EXTENSIONS_ROOT, folderName, 'package.json');
if (await exists(packageJSONPath)) {
try {
- const packageJSON = JSON.parse((await readFile(packageJSONPath)).toString());
+ let packageJSON = JSON.parse((await readFile(packageJSONPath)).toString());
if (packageJSON.main && !packageJSON.browser) {
return; // unsupported
}
@@ -81,82 +97,40 @@ async function initialize() {
if (packageJSON.browser) {
packageJSON.main = packageJSON.browser;
- const webpackConfigLocations = await util.promisify(glob)(
- path.join(EXTENSIONS_ROOT, extensionFolder, '**', 'extension-browser.webpack.config.js'),
- { ignore: ['**/node_modules'] }
- );
-
- for (const webpackConfigPath of webpackConfigLocations) {
- const configOrFnOrArray = require(webpackConfigPath);
- function addConfig(configOrFn) {
- if (typeof configOrFn === 'function') {
- webpackConfigs.push(configOrFn({}, {}));
- } else {
- webpackConfigs.push(configOrFn);
- }
- }
- addConfig(configOrFnOrArray);
+ let mainFilePath = path.join(EXTENSIONS_ROOT, folderName, packageJSON.browser);
+ if (path.extname(mainFilePath) !== '.js') {
+ mainFilePath += '.js';
+ }
+ if (!await exists(mainFilePath)) {
+ unbuiltExensions.push(path.relative(EXTENSIONS_ROOT, mainFilePath));
}
}
-
- const packageNlsPath = path.join(EXTENSIONS_ROOT, extensionFolder, 'package.nls.json');
- if (await exists(packageNlsPath)) {
- const packageNls = JSON.parse((await readFile(packageNlsPath)).toString());
- const translate = (obj) => {
- for (let key in obj) {
- const val = obj[key];
- if (Array.isArray(val)) {
- val.forEach(translate);
- } else if (val && typeof val === 'object') {
- translate(val);
- } else if (typeof val === 'string' && val.charCodeAt(0) === CharCode_PC && val.charCodeAt(val.length - 1) === CharCode_PC) {
- const translated = packageNls[val.substr(1, val.length - 2)];
- if (translated) {
- obj[key] = translated;
- }
- }
- }
- };
- translate(packageJSON);
- }
packageJSON.extensionKind = ['web']; // enable for Web
- staticExtensions.push({
+
+ const packageNLSPath = path.join(folderName, 'package.nls.json');
+ const packageNLSExists = await exists(path.join(EXTENSIONS_ROOT, packageNLSPath));
+ if (packageNLSExists) {
+ packageJSON = extensions.translatePackageJSON(packageJSON, path.join(EXTENSIONS_ROOT, packageNLSPath)); // temporary, until fixed in core
+ }
+ builtinExtensions.push({
+ extensionPath: folderName,
packageJSON,
- extensionLocation: { scheme: SCHEME, authority: AUTHORITY, path: `/static-extension/${extensionFolder}` },
- isBuiltin: true
+ packageNLSPath: packageNLSExists ? packageNLSPath : undefined,
+ readmePath,
+ changelogPath
});
} catch (e) {
console.log(e);
}
}
}));
-
- return new Promise((resolve, reject) => {
- if (args.watch) {
- webpack(webpackConfigs).watch({}, (err, stats) => {
- if (err) {
- console.log(err);
- reject();
- } else {
- console.log(stats.toString());
- resolve(staticExtensions);
- }
- });
- } else {
- webpack(webpackConfigs).run((err, stats) => {
- if (err) {
- console.log(err);
- reject();
- } else {
- console.log(stats.toString());
- resolve(staticExtensions);
- }
- });
- }
- });
+ if (unbuiltExensions.length) {
+ fancyLog(`${ansiColors.yellow('Warning')}: Make sure to run ${ansiColors.cyan('yarn gulp watch-web')}\nCould not find the following browser main files: \n${unbuiltExensions.join('\n')}`);
+ }
+ return builtinExtensions;
}
-const staticExtensionsPromise = initialize();
+const builtinExtensionsPromise = initialize();
const mapCallbackUriToRequestId = new Map();
@@ -252,31 +226,40 @@ function handleStaticExtension(req, res, parsedUrl) {
* @param {import('http').ServerResponse} res
*/
async function handleRoot(req, res) {
+ let folderUri = { scheme: 'memfs', path: `/sample-folder` };
+
const match = req.url && req.url.match(/\?([^#]+)/);
- let ghPath;
if (match) {
const qs = new URLSearchParams(match[1]);
- ghPath = qs.get('gh');
- if (ghPath && !ghPath.startsWith('/')) {
- ghPath = '/' + ghPath;
+
+ let ghPath = qs.get('gh');
+ if (ghPath) {
+ if (!ghPath.startsWith('/')) {
+ ghPath = '/' + ghPath;
+ }
+ folderUri = { scheme: 'github', authority: 'HEAD', path: ghPath };
+ } else {
+
+ let csPath = qs.get('cs');
+ if (csPath) {
+ if (!csPath.startsWith('/')) {
+ csPath = '/' + csPath;
+ }
+ folderUri = { scheme: 'codespace', authority: 'HEAD', path: csPath };
+ }
}
}
- const staticExtensions = await staticExtensionsPromise;
- /** @type {WebConfiguration} */
- const webConfig = {
- staticExtensions: staticExtensions,
- };
+ const builtinExtensions = await builtinExtensionsPromise;
const webConfigJSON = escapeAttribute(JSON.stringify({
- ...webConfig,
- folderUri: ghPath
- ? { scheme: 'github', authority: 'HEAD', path: ghPath }
- : { scheme: 'memfs', path: `/sample-folder` },
+ folderUri: folderUri,
+ builtinExtensionsServiceUrl: `${SCHEME}://${AUTHORITY}/static-extension`
}));
const data = (await util.promisify(fs.readFile)(WEB_MAIN)).toString()
.replace('{{WORKBENCH_WEB_CONFIGURATION}}', () => webConfigJSON) // use a replace function to avoid that regexp replace patterns ($&, $0, ...) are applied
+ .replace('{{WORKBENCH_BUILTIN_EXTENSIONS}}', () => escapeAttribute(JSON.stringify(builtinExtensions)))
.replace('{{WEBVIEW_ENDPOINT}}', '')
.replace('{{REMOTE_USER_DATA_URI}}', '');
diff --git a/resources/win32/bin/code.sh b/resources/win32/bin/code.sh
index c751647f2e..9f029e5522 100644
--- a/resources/win32/bin/code.sh
+++ b/resources/win32/bin/code.sh
@@ -13,48 +13,46 @@ NAME="@@NAME@@"
DATAFOLDER="@@DATAFOLDER@@"
VSCODE_PATH="$(dirname "$(dirname "$(realpath "$0")")")"
ELECTRON="$VSCODE_PATH/$NAME.exe"
-if grep -qi Microsoft /proc/version; then
- # in a wsl shell
- WSL_BUILD=$(uname -r | sed -E 's/^[0-9.]+-([0-9]+)-Microsoft.*|([0-9]+).([0-9]+).([0-9]+)-microsoft-standard.*|.*/\1\2\3\4/')
- if [ -z "$WSL_BUILD" ]; then
- WSL_BUILD=0
- fi
- if [ $WSL_BUILD -ge 17063 ]; then
- # $WSL_DISTRO_NAME is available since WSL builds 18362, also for WSL2
- # WSLPATH is available since WSL build 17046
- # WSLENV is available since WSL build 17063
- export WSLENV=ELECTRON_RUN_AS_NODE/w:$WSLENV
- CLI=$(wslpath -m "$VSCODE_PATH/resources/app/out/cli.js")
-
- # use the Remote WSL extension if installed
- WSL_EXT_ID="ms-vscode-remote.remote-wsl"
-
- if [ $WSL_BUILD -ge 41955 -a $WSL_BUILD -lt 41959 ]; then
- # WSL2 workaround for https://github.com/microsoft/WSL/issues/4337
- CWD="$(pwd)"
- cd "$VSCODE_PATH"
- cmd.exe /C ".\\bin\\$APP_NAME.cmd --locate-extension $WSL_EXT_ID >%TEMP%\\remote-wsl-loc.txt"
- WSL_EXT_WLOC=$(cmd.exe /C type %TEMP%\\remote-wsl-loc.txt)
- cd "$CWD"
+IN_WSL=false
+if [ -n "$WSL_DISTRO_NAME" ]; then
+ # $WSL_DISTRO_NAME is available since WSL builds 18362, also for WSL2
+ IN_WSL=true
+else
+ WSL_BUILD=$(uname -r | sed -E 's/^[0-9.]+-([0-9]+)-Microsoft.*|.*/\1/')
+ if [ -n "$WSL_BUILD" ]; then
+ if [ "$WSL_BUILD" -ge 17063 ]; then
+ # WSLPATH is available since WSL build 17046
+ # WSLENV is available since WSL build 17063
+ IN_WSL=true
else
- ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" --locate-extension $WSL_EXT_ID >/tmp/remote-wsl-loc.txt 2>/dev/null
- WSL_EXT_WLOC=$(cat /tmp/remote-wsl-loc.txt)
- fi
- if [ -n "$WSL_EXT_WLOC" ]; then
- # replace \r\n with \n in WSL_EXT_WLOC
- WSL_CODE=$(wslpath -u "${WSL_EXT_WLOC%%[[:cntrl:]]}")/scripts/wslCode.sh
- "$WSL_CODE" "$COMMIT" "$QUALITY" "$ELECTRON" "$APP_NAME" "$DATAFOLDER" "$@"
+ # If running under older WSL, don't pass cli.js to Electron as
+ # environment vars cannot be transferred from WSL to Windows
+ # See: https://github.com/Microsoft/BashOnWindows/issues/1363
+ # https://github.com/Microsoft/BashOnWindows/issues/1494
+ "$ELECTRON" "$@"
exit $?
fi
- else
- # If running under older WSL, don't pass cli.js to Electron as
- # environment vars cannot be transferred from WSL to Windows
- # See: https://github.com/Microsoft/BashOnWindows/issues/1363
- # https://github.com/Microsoft/BashOnWindows/issues/1494
- "$ELECTRON" "$@"
+ fi
+fi
+if [ $IN_WSL = true ]; then
+
+ export WSLENV=ELECTRON_RUN_AS_NODE/w:$WSLENV
+ CLI=$(wslpath -m "$VSCODE_PATH/resources/app/out/cli.js")
+
+ # use the Remote WSL extension if installed
+ WSL_EXT_ID="ms-vscode-remote.remote-wsl"
+
+ ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" --locate-extension $WSL_EXT_ID >/tmp/remote-wsl-loc.txt 2>/dev/null
+ WSL_EXT_WLOC=$(cat /tmp/remote-wsl-loc.txt)
+
+ if [ -n "$WSL_EXT_WLOC" ]; then
+ # replace \r\n with \n in WSL_EXT_WLOC
+ WSL_CODE=$(wslpath -u "${WSL_EXT_WLOC%%[[:cntrl:]]}")/scripts/wslCode.sh
+ "$WSL_CODE" "$COMMIT" "$QUALITY" "$ELECTRON" "$APP_NAME" "$DATAFOLDER" "$@"
exit $?
fi
+
elif [ -x "$(command -v cygpath)" ]; then
CLI=$(cygpath -m "$VSCODE_PATH/resources/app/out/cli.js")
else
diff --git a/scripts/code.sh b/scripts/code.sh
index d0f79b53a9..390aa4b201 100755
--- a/scripts/code.sh
+++ b/scripts/code.sh
@@ -7,7 +7,8 @@ if [[ "$OSTYPE" == "darwin"* ]]; then
ROOT=$(dirname "$(dirname "$(realpath "$0")")")
else
ROOT=$(dirname "$(dirname "$(readlink -f $0)")")
- if grep -qi Microsoft /proc/version; then
+ # If the script is running in Docker using the WSL2 engine, powershell.exe won't exist
+ if grep -qi Microsoft /proc/version && type powershell.exe > /dev/null 2>&1; then
IN_WSL=true
fi
fi
diff --git a/scripts/test-integration.bat b/scripts/test-integration.bat
index d5fdd5aa68..1dc84176fc 100755
--- a/scripts/test-integration.bat
+++ b/scripts/test-integration.bat
@@ -37,8 +37,8 @@ if "%INTEGRATION_TEST_ELECTRON_PATH%"=="" (
:: Tests in the extension host
-REM call "%INTEGRATION_TEST_ELECTRON_PATH%" %~dp0\..\extensions\vscode-notebook-tests\test --enable-proposed-api=vscode.vscode-notebook-tests --extensionDevelopmentPath=%~dp0\..\extensions\vscode-notebook-tests --extensionTestsPath=%~dp0\..\extensions\vscode-notebook-tests\out --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR%
-REM if %errorlevel% neq 0 exit /b %errorlevel%
+:: call "%INTEGRATION_TEST_ELECTRON_PATH%" %~dp0\..\extensions\vscode-notebook-tests\test --enable-proposed-api=vscode.vscode-notebook-tests --extensionDevelopmentPath=%~dp0\..\extensions\vscode-notebook-tests --extensionTestsPath=%~dp0\..\extensions\vscode-notebook-tests\out --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR%
+:: if %errorlevel% neq 0 exit /b %errorlevel%
REM call "%INTEGRATION_TEST_ELECTRON_PATH%" %~dp0\..\extensions\vscode-api-tests\testWorkspace --enable-proposed-api=vscode.vscode-api-tests --extensionDevelopmentPath=%~dp0\..\extensions\vscode-api-tests --extensionTestsPath=%~dp0\..\extensions\vscode-api-tests\out\singlefolder-tests --disable-telemetry --crash-reporter-directory=%VSCODECRASHDIR% --no-cached-data --disable-updates --disable-extensions --user-data-dir=%VSCODEUSERDATADIR%
REM if %errorlevel% neq 0 exit /b %errorlevel%
diff --git a/src/bootstrap-fork.js b/src/bootstrap-fork.js
index 7f04d50283..9c50ff4e52 100644
--- a/src/bootstrap-fork.js
+++ b/src/bootstrap-fork.js
@@ -7,15 +7,16 @@
'use strict';
const bootstrap = require('./bootstrap');
+const bootstrapNode = require('./bootstrap-node');
// Remove global paths from the node module lookup
-bootstrap.removeGlobalNodeModuleLookupPaths();
+bootstrapNode.removeGlobalNodeModuleLookupPaths();
// Enable ASAR in our forked processes
bootstrap.enableASARSupport();
if (process.env['VSCODE_INJECT_NODE_MODULE_LOOKUP_PATH']) {
- bootstrap.injectNodeModuleLookupPath(process.env['VSCODE_INJECT_NODE_MODULE_LOOKUP_PATH']);
+ bootstrapNode.injectNodeModuleLookupPath(process.env['VSCODE_INJECT_NODE_MODULE_LOOKUP_PATH']);
}
// Configure: pipe logging to parent process
@@ -39,6 +40,7 @@ configureCrashReporter();
// Load AMD entry point
require('./bootstrap-amd').load(process.env['AMD_ENTRYPOINT']);
+
//#region Helpers
function pipeLoggingToParent() {
@@ -49,8 +51,6 @@ function pipeLoggingToParent() {
const seen = [];
const argsArray = [];
- let res;
-
// Massage some arguments with special treatment
if (args.length) {
for (let i = 0; i < args.length; i++) {
@@ -85,7 +85,7 @@ function pipeLoggingToParent() {
}
try {
- res = JSON.stringify(argsArray, function (key, value) {
+ const res = JSON.stringify(argsArray, function (key, value) {
// Objects get special treatment to prevent circles
if (isObject(value) || Array.isArray(value)) {
@@ -98,15 +98,15 @@ function pipeLoggingToParent() {
return value;
});
+
+ if (res.length > MAX_LENGTH) {
+ return 'Output omitted for a large object that exceeds the limits';
+ }
+
+ return res;
} catch (error) {
- return 'Output omitted for an object that cannot be inspected (' + error.toString() + ')';
+ return `Output omitted for an object that cannot be inspected ('${error.toString()}')`;
}
-
- if (res && res.length > MAX_LENGTH) {
- return 'Output omitted for a large object that exceeds the limits';
- }
-
- return res;
}
/**
diff --git a/src/bootstrap-node.js b/src/bootstrap-node.js
new file mode 100644
index 0000000000..7d4165dba9
--- /dev/null
+++ b/src/bootstrap-node.js
@@ -0,0 +1,60 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+//@ts-check
+'use strict';
+
+/**
+ * Add support for redirecting the loading of node modules
+ *
+ * @param {string} injectPath
+ */
+exports.injectNodeModuleLookupPath = function (injectPath) {
+ if (!injectPath) {
+ throw new Error('Missing injectPath');
+ }
+
+ const Module = require('module');
+ const path = require('path');
+
+ const nodeModulesPath = path.join(__dirname, '../node_modules');
+
+ // @ts-ignore
+ const originalResolveLookupPaths = Module._resolveLookupPaths;
+
+ // @ts-ignore
+ Module._resolveLookupPaths = function (moduleName, parent) {
+ const paths = originalResolveLookupPaths(moduleName, parent);
+ if (Array.isArray(paths)) {
+ for (let i = 0, len = paths.length; i < len; i++) {
+ if (paths[i] === nodeModulesPath) {
+ paths.splice(i, 0, injectPath);
+ break;
+ }
+ }
+ }
+
+ return paths;
+ };
+};
+
+exports.removeGlobalNodeModuleLookupPaths = function () {
+ const Module = require('module');
+ // @ts-ignore
+ const globalPaths = Module.globalPaths;
+
+ // @ts-ignore
+ const originalResolveLookupPaths = Module._resolveLookupPaths;
+
+ // @ts-ignore
+ Module._resolveLookupPaths = function (moduleName, parent) {
+ const paths = originalResolveLookupPaths(moduleName, parent);
+ let commonSuffixLength = 0;
+ while (commonSuffixLength < paths.length && paths[paths.length - 1 - commonSuffixLength] === globalPaths[globalPaths.length - 1 - commonSuffixLength]) {
+ commonSuffixLength++;
+ }
+ return paths.slice(0, paths.length - commonSuffixLength);
+ };
+};
diff --git a/src/bootstrap-window.js b/src/bootstrap-window.js
index 95317267a4..313a4f8be1 100644
--- a/src/bootstrap-window.js
+++ b/src/bootstrap-window.js
@@ -3,235 +3,232 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
+///
+
//@ts-check
'use strict';
-const bootstrap = require('./bootstrap');
+// Simple module style to support node.js and browser environments
+(function (globalThis, factory) {
-/**
- * @param {object} destination
- * @param {object} source
- * @returns {object}
- */
-exports.assign = function assign(destination, source) {
- return Object.keys(source).reduce(function (r, key) { r[key] = source[key]; return r; }, destination);
-};
+ // Node.js
+ if (typeof exports === 'object') {
+ module.exports = factory();
+ }
-/**
- * @param {string[]} modulePaths
- * @param {(result, configuration: object) => any} resultCallback
- * @param {{ forceEnableDeveloperKeybindings?: boolean, disallowReloadKeybinding?: boolean, removeDeveloperKeybindingsAfterLoad?: boolean, canModifyDOM?: (config: object) => void, beforeLoaderConfig?: (config: object, loaderConfig: object) => void, beforeRequire?: () => void }=} options
- */
-exports.load = function (modulePaths, resultCallback, options) {
+ // Browser
+ else {
+ globalThis.MonacoBootstrapWindow = factory();
+ }
+}(this, function () {
+ const path = require.__$__nodeRequire('path');
+ const webFrame = require.__$__nodeRequire('electron').webFrame;
+ const ipc = require.__$__nodeRequire('electron').ipcRenderer;
+ const bootstrap = globalThis.MonacoBootstrap;
- const webFrame = require('electron').webFrame;
- const path = require('path');
-
- const args = parseURLQueryArgs();
/**
- * // configuration: INativeWindowConfiguration
- * @type {{
- * zoomLevel?: number,
- * extensionDevelopmentPath?: string[],
- * extensionTestsPath?: string,
- * userEnv?: { [key: string]: string | undefined },
- * appRoot?: string,
- * nodeCachedDataDir?: string
- * }} */
- const configuration = JSON.parse(args['config'] || '{}') || {};
+ * @param {string[]} modulePaths
+ * @param {(result, configuration: object) => any} resultCallback
+ * @param {{ forceEnableDeveloperKeybindings?: boolean, disallowReloadKeybinding?: boolean, removeDeveloperKeybindingsAfterLoad?: boolean, canModifyDOM?: (config: object) => void, beforeLoaderConfig?: (config: object, loaderConfig: object) => void, beforeRequire?: () => void }=} options
+ */
+ function load(modulePaths, resultCallback, options) {
+ const args = parseURLQueryArgs();
+ /**
+ * // configuration: INativeWindowConfiguration
+ * @type {{
+ * zoomLevel?: number,
+ * extensionDevelopmentPath?: string[],
+ * extensionTestsPath?: string,
+ * userEnv?: { [key: string]: string | undefined },
+ * appRoot?: string,
+ * nodeCachedDataDir?: string
+ * }} */
+ const configuration = JSON.parse(args['config'] || '{}') || {};
- // Apply zoom level early to avoid glitches
- const zoomLevel = configuration.zoomLevel;
- if (typeof zoomLevel === 'number' && zoomLevel !== 0) {
- webFrame.setZoomLevel(zoomLevel);
+ // Apply zoom level early to avoid glitches
+ const zoomLevel = configuration.zoomLevel;
+ if (typeof zoomLevel === 'number' && zoomLevel !== 0) {
+ webFrame.setZoomLevel(zoomLevel);
+ }
+
+ // Error handler
+ process.on('uncaughtException', function (error) {
+ onUnexpectedError(error, enableDeveloperTools);
+ });
+
+ // Developer tools
+ const enableDeveloperTools = (process.env['VSCODE_DEV'] || !!configuration.extensionDevelopmentPath) && !configuration.extensionTestsPath;
+ let developerToolsUnbind;
+ if (enableDeveloperTools || (options && options.forceEnableDeveloperKeybindings)) {
+ developerToolsUnbind = registerDeveloperKeybindings(options && options.disallowReloadKeybinding);
+ }
+
+ // Correctly inherit the parent's environment
+ Object.assign(process.env, configuration.userEnv);
+
+ // Enable ASAR support
+ bootstrap.enableASARSupport(path.join(configuration.appRoot, 'node_modules'));
+
+ if (options && typeof options.canModifyDOM === 'function') {
+ options.canModifyDOM(configuration);
+ }
+
+ // Get the nls configuration into the process.env as early as possible.
+ const nlsConfig = bootstrap.setupNLS();
+
+ let locale = nlsConfig.availableLanguages['*'] || 'en';
+ if (locale === 'zh-tw') {
+ locale = 'zh-Hant';
+ } else if (locale === 'zh-cn') {
+ locale = 'zh-Hans';
+ }
+
+ window.document.documentElement.setAttribute('lang', locale);
+
+ // do not advertise AMD to avoid confusing UMD modules loaded with nodejs
+ window['define'] = undefined;
+
+ // replace the patched electron fs with the original node fs for all AMD code
+ require.define('fs', ['original-fs'], function (originalFS) { return originalFS; });
+
+ window['MonacoEnvironment'] = {};
+
+ const loaderConfig = {
+ baseUrl: `${bootstrap.uriFromPath(configuration.appRoot)}/out`,
+ 'vs/nls': nlsConfig,
+ nodeModules: [/*BUILD->INSERT_NODE_MODULES*/]
+ };
+
+ loaderConfig.nodeModules = loaderConfig.nodeModules.concat([
+ '@angular/common',
+ '@angular/core',
+ '@angular/forms',
+ '@angular/platform-browser',
+ '@angular/platform-browser-dynamic',
+ '@angular/router',
+ 'rxjs/Observable',
+ 'rxjs/add/observable/fromPromise',
+ 'rxjs/Subject',
+ 'rxjs/Observer',
+ 'slickgrid/lib/jquery.event.drag-2.3.0',
+ 'slickgrid/lib/jquery-ui-1.9.2',
+ 'slickgrid/slick.core',
+ 'slickgrid/slick.grid',
+ 'slickgrid/slick.editors',
+ 'slickgrid/slick.dataview'
+ ]);
+
+ // cached data config
+ if (configuration.nodeCachedDataDir) {
+ loaderConfig.nodeCachedData = {
+ path: configuration.nodeCachedDataDir,
+ seed: modulePaths.join('')
+ };
+ }
+
+ if (options && typeof options.beforeLoaderConfig === 'function') {
+ options.beforeLoaderConfig(configuration, loaderConfig);
+ }
+
+ require.config(loaderConfig);
+
+ if (nlsConfig.pseudo) {
+ require(['vs/nls'], function (nlsPlugin) {
+ nlsPlugin.setPseudoTranslation(nlsConfig.pseudo);
+ });
+ }
+
+ if (options && typeof options.beforeRequire === 'function') {
+ options.beforeRequire();
+ }
+
+ require(modulePaths, result => {
+ try {
+ const callbackResult = resultCallback(result, configuration);
+ if (callbackResult && typeof callbackResult.then === 'function') {
+ callbackResult.then(() => {
+ if (developerToolsUnbind && options && options.removeDeveloperKeybindingsAfterLoad) {
+ developerToolsUnbind();
+ }
+ }, error => {
+ onUnexpectedError(error, enableDeveloperTools);
+ });
+ }
+ } catch (error) {
+ onUnexpectedError(error, enableDeveloperTools);
+ }
+ }, onUnexpectedError);
}
- // Error handler
- process.on('uncaughtException', function (error) {
- onUnexpectedError(error, enableDeveloperTools);
- });
+ /**
+ * @returns {{[param: string]: string }}
+ */
+ function parseURLQueryArgs() {
+ const search = window.location.search || '';
- // Developer tools
- const enableDeveloperTools = (process.env['VSCODE_DEV'] || !!configuration.extensionDevelopmentPath) && !configuration.extensionTestsPath;
- let developerToolsUnbind;
- if (enableDeveloperTools || (options && options.forceEnableDeveloperKeybindings)) {
- developerToolsUnbind = registerDeveloperKeybindings(options && options.disallowReloadKeybinding);
+ return search.split(/[?&]/)
+ .filter(function (param) { return !!param; })
+ .map(function (param) { return param.split('='); })
+ .filter(function (param) { return param.length === 2; })
+ .reduce(function (r, param) { r[param[0]] = decodeURIComponent(param[1]); return r; }, {});
}
- // Correctly inherit the parent's environment
- exports.assign(process.env, configuration.userEnv);
+ /**
+ * @param {boolean} disallowReloadKeybinding
+ * @returns {() => void}
+ */
+ function registerDeveloperKeybindings(disallowReloadKeybinding) {
+ const extractKey = function (e) {
+ return [
+ e.ctrlKey ? 'ctrl-' : '',
+ e.metaKey ? 'meta-' : '',
+ e.altKey ? 'alt-' : '',
+ e.shiftKey ? 'shift-' : '',
+ e.keyCode
+ ].join('');
+ };
- // Enable ASAR support
- bootstrap.enableASARSupport(path.join(configuration.appRoot, 'node_modules'));
+ // Devtools & reload support
+ const TOGGLE_DEV_TOOLS_KB = (process.platform === 'darwin' ? 'meta-alt-73' : 'ctrl-shift-73'); // mac: Cmd-Alt-I, rest: Ctrl-Shift-I
+ const TOGGLE_DEV_TOOLS_KB_ALT = '123'; // F12
+ const RELOAD_KB = (process.platform === 'darwin' ? 'meta-82' : 'ctrl-82'); // mac: Cmd-R, rest: Ctrl-R
- if (options && typeof options.canModifyDOM === 'function') {
- options.canModifyDOM(configuration);
- }
+ let listener = function (e) {
+ const key = extractKey(e);
+ if (key === TOGGLE_DEV_TOOLS_KB || key === TOGGLE_DEV_TOOLS_KB_ALT) {
+ ipc.send('vscode:toggleDevTools');
+ } else if (key === RELOAD_KB && !disallowReloadKeybinding) {
+ ipc.send('vscode:reloadWindow');
+ }
+ };
- // Get the nls configuration into the process.env as early as possible.
- const nlsConfig = bootstrap.setupNLS();
+ window.addEventListener('keydown', listener);
- let locale = nlsConfig.availableLanguages['*'] || 'en';
- if (locale === 'zh-tw') {
- locale = 'zh-Hant';
- } else if (locale === 'zh-cn') {
- locale = 'zh-Hans';
- }
-
- window.document.documentElement.setAttribute('lang', locale);
-
- // Load the loader
- const amdLoader = require(configuration.appRoot + '/out/vs/loader.js');
- const amdRequire = amdLoader.require;
- const amdDefine = amdLoader.require.define;
- const nodeRequire = amdLoader.require.nodeRequire;
-
- window['nodeRequire'] = nodeRequire;
- window['require'] = amdRequire;
-
- // replace the patched electron fs with the original node fs for all AMD code
- amdDefine('fs', ['original-fs'], function (originalFS) { return originalFS; });
-
- window['MonacoEnvironment'] = {};
-
- const loaderConfig = {
- baseUrl: bootstrap.uriFromPath(configuration.appRoot) + '/out',
- 'vs/nls': nlsConfig,
- nodeModules: [/*BUILD->INSERT_NODE_MODULES*/]
- };
-
- loaderConfig.nodeModules = loaderConfig.nodeModules.concat([
- '@angular/common',
- '@angular/core',
- '@angular/forms',
- '@angular/platform-browser',
- '@angular/platform-browser-dynamic',
- '@angular/router',
- 'rxjs/Observable',
- 'rxjs/add/observable/fromPromise',
- 'rxjs/Subject',
- 'rxjs/Observer',
- 'slickgrid/lib/jquery.event.drag-2.3.0',
- 'slickgrid/lib/jquery-ui-1.9.2',
- 'slickgrid/slick.core',
- 'slickgrid/slick.grid',
- 'slickgrid/slick.editors',
- 'slickgrid/slick.dataview'
- ]);
- // {{SQL CARBON EDIT}} - End
-
- // cached data config
- if (configuration.nodeCachedDataDir) {
- loaderConfig.nodeCachedData = {
- path: configuration.nodeCachedDataDir,
- seed: modulePaths.join('')
+ return function () {
+ if (listener) {
+ window.removeEventListener('keydown', listener);
+ listener = undefined;
+ }
};
}
- if (options && typeof options.beforeLoaderConfig === 'function') {
- options.beforeLoaderConfig(configuration, loaderConfig);
- }
-
- amdRequire.config(loaderConfig);
-
- if (nlsConfig.pseudo) {
- amdRequire(['vs/nls'], function (nlsPlugin) {
- nlsPlugin.setPseudoTranslation(nlsConfig.pseudo);
- });
- }
-
- if (options && typeof options.beforeRequire === 'function') {
- options.beforeRequire();
- }
-
- amdRequire(modulePaths, result => {
- try {
- const callbackResult = resultCallback(result, configuration);
- if (callbackResult && typeof callbackResult.then === 'function') {
- callbackResult.then(() => {
- if (developerToolsUnbind && options && options.removeDeveloperKeybindingsAfterLoad) {
- developerToolsUnbind();
- }
- }, error => {
- onUnexpectedError(error, enableDeveloperTools);
- });
- }
- } catch (error) {
- onUnexpectedError(error, enableDeveloperTools);
+ /**
+ * @param {string | Error} error
+ * @param {boolean} [enableDeveloperTools]
+ */
+ function onUnexpectedError(error, enableDeveloperTools) {
+ if (enableDeveloperTools) {
+ ipc.send('vscode:openDevTools');
}
- }, onUnexpectedError);
-};
-/**
- * @returns {{[param: string]: string }}
- */
-function parseURLQueryArgs() {
- const search = window.location.search || '';
+ console.error(`[uncaught exception]: ${error}`);
- return search.split(/[?&]/)
- .filter(function (param) { return !!param; })
- .map(function (param) { return param.split('='); })
- .filter(function (param) { return param.length === 2; })
- .reduce(function (r, param) { r[param[0]] = decodeURIComponent(param[1]); return r; }, {});
-}
-
-/**
- * @param {boolean} disallowReloadKeybinding
- * @returns {() => void}
- */
-function registerDeveloperKeybindings(disallowReloadKeybinding) {
-
- const ipc = require('electron').ipcRenderer;
-
- const extractKey = function (e) {
- return [
- e.ctrlKey ? 'ctrl-' : '',
- e.metaKey ? 'meta-' : '',
- e.altKey ? 'alt-' : '',
- e.shiftKey ? 'shift-' : '',
- e.keyCode
- ].join('');
- };
-
- // Devtools & reload support
- const TOGGLE_DEV_TOOLS_KB = (process.platform === 'darwin' ? 'meta-alt-73' : 'ctrl-shift-73'); // mac: Cmd-Alt-I, rest: Ctrl-Shift-I
- const TOGGLE_DEV_TOOLS_KB_ALT = '123'; // F12
- const RELOAD_KB = (process.platform === 'darwin' ? 'meta-82' : 'ctrl-82'); // mac: Cmd-R, rest: Ctrl-R
-
- let listener = function (e) {
- const key = extractKey(e);
- if (key === TOGGLE_DEV_TOOLS_KB || key === TOGGLE_DEV_TOOLS_KB_ALT) {
- ipc.send('vscode:toggleDevTools');
- } else if (key === RELOAD_KB && !disallowReloadKeybinding) {
- ipc.send('vscode:reloadWindow');
+ if (error && typeof error !== 'string' && error.stack) {
+ console.error(error.stack);
}
- };
-
- window.addEventListener('keydown', listener);
-
- return function () {
- if (listener) {
- window.removeEventListener('keydown', listener);
- listener = undefined;
- }
- };
-}
-
-/**
- * @param {string | Error} error
- * @param {boolean} enableDeveloperTools
- */
-function onUnexpectedError(error, enableDeveloperTools) {
-
- const ipc = require('electron').ipcRenderer;
-
- if (enableDeveloperTools) {
- ipc.send('vscode:openDevTools');
}
- console.error('[uncaught exception]: ' + error);
-
- if (error && typeof error !== 'string' && error.stack) {
- console.error(error.stack);
- }
-}
+ return {
+ load
+ };
+}));
diff --git a/src/bootstrap.js b/src/bootstrap.js
index e3312a749d..53202b5bb0 100644
--- a/src/bootstrap.js
+++ b/src/bootstrap.js
@@ -6,316 +6,254 @@
//@ts-check
'use strict';
-//#region global bootstrapping
+// Simple module style to support node.js and browser environments
+(function (globalThis, factory) {
-// increase number of stack frames(from 10, https://github.com/v8/v8/wiki/Stack-Trace-API)
-Error.stackTraceLimit = 100;
-
-// Workaround for Electron not installing a handler to ignore SIGPIPE
-// (https://github.com/electron/electron/issues/13254)
-process.on('SIGPIPE', () => {
- console.error(new Error('Unexpected SIGPIPE'));
-});
-
-//#endregion
-
-//#region Add support for redirecting the loading of node modules
-
-exports.injectNodeModuleLookupPath = function (injectPath) {
- if (!injectPath) {
- throw new Error('Missing injectPath');
+ // Node.js
+ if (typeof exports === 'object') {
+ module.exports = factory();
}
+ // Browser
+ else {
+ globalThis.MonacoBootstrap = factory();
+ }
+}(this, function () {
const Module = require('module');
const path = require('path');
-
- const nodeModulesPath = path.join(__dirname, '../node_modules');
-
- // @ts-ignore
- const originalResolveLookupPaths = Module._resolveLookupPaths;
-
- // @ts-ignore
- Module._resolveLookupPaths = function (moduleName, parent) {
- const paths = originalResolveLookupPaths(moduleName, parent);
- if (Array.isArray(paths)) {
- for (let i = 0, len = paths.length; i < len; i++) {
- if (paths[i] === nodeModulesPath) {
- paths.splice(i, 0, injectPath);
- break;
- }
- }
- }
-
- return paths;
- };
-};
-
-//#endregion
-
-//#region Remove global paths from the node lookup paths
-
-exports.removeGlobalNodeModuleLookupPaths = function () {
- const Module = require('module');
- // @ts-ignore
- const globalPaths = Module.globalPaths;
-
- // @ts-ignore
- const originalResolveLookupPaths = Module._resolveLookupPaths;
-
- // @ts-ignore
- Module._resolveLookupPaths = function (moduleName, parent) {
- const paths = originalResolveLookupPaths(moduleName, parent);
- let commonSuffixLength = 0;
- while (commonSuffixLength < paths.length && paths[paths.length - 1 - commonSuffixLength] === globalPaths[globalPaths.length - 1 - commonSuffixLength]) {
- commonSuffixLength++;
- }
- return paths.slice(0, paths.length - commonSuffixLength);
- };
-};
-
-//#endregion
-
-//#region Add support for using node_modules.asar
-
-/**
- * @param {string=} nodeModulesPath
- */
-exports.enableASARSupport = function (nodeModulesPath) {
- const Module = require('module');
- const path = require('path');
-
- let NODE_MODULES_PATH = nodeModulesPath;
- if (!NODE_MODULES_PATH) {
- NODE_MODULES_PATH = path.join(__dirname, '../node_modules');
- }
-
- const NODE_MODULES_ASAR_PATH = NODE_MODULES_PATH + '.asar';
-
- // @ts-ignore
- const originalResolveLookupPaths = Module._resolveLookupPaths;
-
- // @ts-ignore
- Module._resolveLookupPaths = function (request, parent) {
- const paths = originalResolveLookupPaths(request, parent);
- if (Array.isArray(paths)) {
- for (let i = 0, len = paths.length; i < len; i++) {
- if (paths[i] === NODE_MODULES_PATH) {
- paths.splice(i, 0, NODE_MODULES_ASAR_PATH);
- break;
- }
- }
- }
-
- return paths;
- };
-};
-
-//#endregion
-
-//#region URI helpers
-
-/**
- * @param {string} _path
- * @returns {string}
- */
-exports.uriFromPath = function (_path) {
- const path = require('path');
-
- let pathName = path.resolve(_path).replace(/\\/g, '/');
- if (pathName.length > 0 && pathName.charAt(0) !== '/') {
- pathName = '/' + pathName;
- }
-
- /** @type {string} */
- let uri;
- if (process.platform === 'win32' && pathName.startsWith('//')) { // specially handle Windows UNC paths
- uri = encodeURI('file:' + pathName);
- } else {
- uri = encodeURI('file://' + pathName);
- }
-
- return uri.replace(/#/g, '%23');
-};
-
-//#endregion
-
-//#region FS helpers
-
-/**
- * @param {string} file
- * @returns {Promise}
- */
-exports.readFile = function (file) {
const fs = require('fs');
- return new Promise(function (resolve, reject) {
- fs.readFile(file, 'utf8', function (err, data) {
- if (err) {
- reject(err);
- return;
- }
- resolve(data);
- });
+ //#region global bootstrapping
+
+ // increase number of stack frames(from 10, https://github.com/v8/v8/wiki/Stack-Trace-API)
+ Error.stackTraceLimit = 100;
+
+ // Workaround for Electron not installing a handler to ignore SIGPIPE
+ // (https://github.com/electron/electron/issues/13254)
+ process.on('SIGPIPE', () => {
+ console.error(new Error('Unexpected SIGPIPE'));
});
-};
-/**
- * @param {string} file
- * @param {string} content
- * @returns {Promise}
- */
-exports.writeFile = function (file, content) {
- const fs = require('fs');
+ //#endregion
- return new Promise(function (resolve, reject) {
- fs.writeFile(file, content, 'utf8', function (err) {
- if (err) {
- reject(err);
- return;
+
+ //#region Add support for using node_modules.asar
+
+ /**
+ * @param {string=} nodeModulesPath
+ */
+ function enableASARSupport(nodeModulesPath) {
+ let NODE_MODULES_PATH = nodeModulesPath;
+ if (!NODE_MODULES_PATH) {
+ NODE_MODULES_PATH = path.join(__dirname, '../node_modules');
+ } else {
+ // use the drive letter casing of __dirname
+ if (process.platform === 'win32') {
+ NODE_MODULES_PATH = __dirname.substr(0, 1) + NODE_MODULES_PATH.substr(1);
}
- resolve();
- });
- });
-};
-
-/**
- * @param {string} dir
- * @returns {Promise}
- */
-exports.mkdirp = function mkdirp(dir) {
- const fs = require('fs');
-
- return new Promise((c, e) => fs.mkdir(dir, { recursive: true }, err => (err && err.code !== 'EEXIST') ? e(err) : c(dir)));
-};
-
-//#endregion
-
-//#region NLS helpers
-
-/**
- * @returns {{locale?: string, availableLanguages: {[lang: string]: string;}, pseudo?: boolean }}
- */
-exports.setupNLS = function () {
- const path = require('path');
-
- // Get the nls configuration into the process.env as early as possible.
- let nlsConfig = { availableLanguages: {} };
- if (process.env['VSCODE_NLS_CONFIG']) {
- try {
- nlsConfig = JSON.parse(process.env['VSCODE_NLS_CONFIG']);
- } catch (e) {
- // Ignore
}
- }
- if (nlsConfig._resolvedLanguagePackCoreLocation) {
- const bundles = Object.create(null);
+ const NODE_MODULES_ASAR_PATH = `${NODE_MODULES_PATH}.asar`;
- nlsConfig.loadBundle = function (bundle, language, cb) {
- const result = bundles[bundle];
- if (result) {
- cb(undefined, result);
+ // @ts-ignore
+ const originalResolveLookupPaths = Module._resolveLookupPaths;
- return;
- }
-
- const bundleFile = path.join(nlsConfig._resolvedLanguagePackCoreLocation, bundle.replace(/\//g, '!') + '.nls.json');
- exports.readFile(bundleFile).then(function (content) {
- const json = JSON.parse(content);
- bundles[bundle] = json;
-
- cb(undefined, json);
- }).catch((error) => {
- try {
- if (nlsConfig._corruptedFile) {
- exports.writeFile(nlsConfig._corruptedFile, 'corrupted').catch(function (error) { console.error(error); });
+ // @ts-ignore
+ Module._resolveLookupPaths = function (request, parent) {
+ const paths = originalResolveLookupPaths(request, parent);
+ if (Array.isArray(paths)) {
+ for (let i = 0, len = paths.length; i < len; i++) {
+ if (paths[i] === NODE_MODULES_PATH) {
+ paths.splice(i, 0, NODE_MODULES_ASAR_PATH);
+ break;
}
- } finally {
- cb(error, undefined);
}
- });
+ }
+
+ return paths;
};
}
- return nlsConfig;
-};
+ //#endregion
-//#endregion
-//#region Portable helpers
+ //#region URI helpers
-/**
- * @returns {{ portableDataPath: string, isPortable: boolean }}
- */
-exports.configurePortable = function () {
- const product = require('../product.json');
- const path = require('path');
- const fs = require('fs');
-
- const appRoot = path.dirname(__dirname);
-
- function getApplicationPath() {
- if (process.env['VSCODE_DEV']) {
- return appRoot;
+ /**
+ * @param {string} _path
+ * @returns {string}
+ */
+ function uriFromPath(_path) {
+ let pathName = path.resolve(_path).replace(/\\/g, '/');
+ if (pathName.length > 0 && pathName.charAt(0) !== '/') {
+ pathName = `/${pathName}`;
}
- if (process.platform === 'darwin') {
- return path.dirname(path.dirname(path.dirname(appRoot)));
- }
-
- return path.dirname(path.dirname(appRoot));
- }
-
- function getPortableDataPath() {
- if (process.env['VSCODE_PORTABLE']) {
- return process.env['VSCODE_PORTABLE'];
- }
-
- if (process.platform === 'win32' || process.platform === 'linux') {
- return path.join(getApplicationPath(), 'data');
- }
-
- // @ts-ignore
- const portableDataName = product.portable || `${product.applicationName}-portable-data`;
- return path.join(path.dirname(getApplicationPath()), portableDataName);
- }
-
- const portableDataPath = getPortableDataPath();
- const isPortable = !('target' in product) && fs.existsSync(portableDataPath);
- const portableTempPath = path.join(portableDataPath, 'tmp');
- const isTempPortable = isPortable && fs.existsSync(portableTempPath);
-
- if (isPortable) {
- process.env['VSCODE_PORTABLE'] = portableDataPath;
- } else {
- delete process.env['VSCODE_PORTABLE'];
- }
-
- if (isTempPortable) {
- if (process.platform === 'win32') {
- process.env['TMP'] = portableTempPath;
- process.env['TEMP'] = portableTempPath;
+ /** @type {string} */
+ let uri;
+ if (process.platform === 'win32' && pathName.startsWith('//')) { // specially handle Windows UNC paths
+ uri = encodeURI(`file:${pathName}`);
} else {
- process.env['TMPDIR'] = portableTempPath;
+ uri = encodeURI(`file://${pathName}`);
}
+
+ return uri.replace(/#/g, '%23');
}
+ //#endregion
+
+
+ //#region NLS helpers
+
+ /**
+ * @returns {{locale?: string, availableLanguages: {[lang: string]: string;}, pseudo?: boolean }}
+ */
+ function setupNLS() {
+
+ // Get the nls configuration into the process.env as early as possible.
+ let nlsConfig = { availableLanguages: {} };
+ if (process.env['VSCODE_NLS_CONFIG']) {
+ try {
+ nlsConfig = JSON.parse(process.env['VSCODE_NLS_CONFIG']);
+ } catch (e) {
+ // Ignore
+ }
+ }
+
+ if (nlsConfig._resolvedLanguagePackCoreLocation) {
+ const bundles = Object.create(null);
+
+ nlsConfig.loadBundle = function (bundle, language, cb) {
+ const result = bundles[bundle];
+ if (result) {
+ cb(undefined, result);
+
+ return;
+ }
+
+ const bundleFile = path.join(nlsConfig._resolvedLanguagePackCoreLocation, `${bundle.replace(/\//g, '!')}.nls.json`);
+ readFile(bundleFile).then(function (content) {
+ const json = JSON.parse(content);
+ bundles[bundle] = json;
+
+ cb(undefined, json);
+ }).catch((error) => {
+ try {
+ if (nlsConfig._corruptedFile) {
+ writeFile(nlsConfig._corruptedFile, 'corrupted').catch(function (error) { console.error(error); });
+ }
+ } finally {
+ cb(error, undefined);
+ }
+ });
+ };
+ }
+
+ return nlsConfig;
+ }
+
+ /**
+ * @param {string} file
+ * @returns {Promise}
+ */
+ function readFile(file) {
+ return fs.promises.readFile(file, 'utf8');
+ }
+
+ /**
+ * @param {string} file
+ * @param {string} content
+ * @returns {Promise}
+ */
+ function writeFile(file, content) {
+ return fs.promises.writeFile(file, content, 'utf8');
+ }
+
+ //#endregion
+
+
+ //#region Portable helpers
+
+ /**
+ * @param {{ portable: string; applicationName: string; }} product
+ * @returns {{portableDataPath: string;isPortable: boolean;}}
+ */
+ function configurePortable(product) {
+ const appRoot = path.dirname(__dirname);
+
+ function getApplicationPath() {
+ if (process.env['VSCODE_DEV']) {
+ return appRoot;
+ }
+
+ if (process.platform === 'darwin') {
+ return path.dirname(path.dirname(path.dirname(appRoot)));
+ }
+
+ return path.dirname(path.dirname(appRoot));
+ }
+
+ function getPortableDataPath() {
+ if (process.env['VSCODE_PORTABLE']) {
+ return process.env['VSCODE_PORTABLE'];
+ }
+
+ if (process.platform === 'win32' || process.platform === 'linux') {
+ return path.join(getApplicationPath(), 'data');
+ }
+
+ // @ts-ignore
+ const portableDataName = product.portable || `${product.applicationName}-portable-data`;
+ return path.join(path.dirname(getApplicationPath()), portableDataName);
+ }
+
+ const portableDataPath = getPortableDataPath();
+ const isPortable = !('target' in product) && fs.existsSync(portableDataPath);
+ const portableTempPath = path.join(portableDataPath, 'tmp');
+ const isTempPortable = isPortable && fs.existsSync(portableTempPath);
+
+ if (isPortable) {
+ process.env['VSCODE_PORTABLE'] = portableDataPath;
+ } else {
+ delete process.env['VSCODE_PORTABLE'];
+ }
+
+ if (isTempPortable) {
+ if (process.platform === 'win32') {
+ process.env['TMP'] = portableTempPath;
+ process.env['TEMP'] = portableTempPath;
+ } else {
+ process.env['TMPDIR'] = portableTempPath;
+ }
+ }
+
+ return {
+ portableDataPath,
+ isPortable
+ };
+ }
+
+ //#endregion
+
+
+ //#region ApplicationInsights
+
+ // Prevents appinsights from monkey patching modules.
+ // This should be called before importing the applicationinsights module
+ function avoidMonkeyPatchFromAppInsights() {
+ // @ts-ignore
+ process.env['APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL'] = true; // Skip monkey patching of 3rd party modules by appinsights
+ global['diagnosticsSource'] = {}; // Prevents diagnostic channel (which patches "require") from initializing entirely
+ }
+
+ //#endregion
+
+
return {
- portableDataPath,
- isPortable
+ enableASARSupport,
+ avoidMonkeyPatchFromAppInsights,
+ configurePortable,
+ setupNLS,
+ uriFromPath
};
-};
-
-//#endregion
-
-//#region ApplicationInsights
-
-// Prevents appinsights from monkey patching modules.
-// This should be called before importing the applicationinsights module
-exports.avoidMonkeyPatchFromAppInsights = function () {
- // @ts-ignore
- process.env['APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL'] = true; // Skip monkey patching of 3rd party modules by appinsights
- global['diagnosticsSource'] = {}; // Prevents diagnostic channel (which patches "require") from initializing entirely
-};
-
-//#endregion
+}));
diff --git a/src/cli.js b/src/cli.js
index 780d82c223..847430bd8b 100644
--- a/src/cli.js
+++ b/src/cli.js
@@ -7,15 +7,16 @@
'use strict';
const bootstrap = require('./bootstrap');
+const product = require('../product.json');
// Avoid Monkey Patches from Application Insights
bootstrap.avoidMonkeyPatchFromAppInsights();
// Enable portable support
-bootstrap.configurePortable();
+bootstrap.configurePortable(product);
// Enable ASAR support
bootstrap.enableASARSupport();
// Load CLI through AMD loader
-require('./bootstrap-amd').load('vs/code/node/cli');
\ No newline at end of file
+require('./bootstrap-amd').load('vs/code/node/cli');
diff --git a/src/main.js b/src/main.js
index 327fd1458f..f6f59aceb0 100644
--- a/src/main.js
+++ b/src/main.js
@@ -21,7 +21,7 @@ const product = require('../product.json');
const { app, protocol } = require('electron');
// Enable portable support
-const portable = bootstrap.configurePortable();
+const portable = bootstrap.configurePortable(product);
// Enable ASAR support
bootstrap.enableASARSupport();
@@ -93,8 +93,9 @@ setCurrentWorkingDirectory();
// Register custom schemes with privileges
protocol.registerSchemesAsPrivileged([
{
- scheme: 'vscode-resource',
+ scheme: 'vscode-webview',
privileges: {
+ standard: true,
secure: true,
supportFetchAPI: true,
corsEnabled: true,
@@ -473,7 +474,7 @@ function getNodeCachedDir() {
async ensureExists() {
try {
- await bootstrap.mkdirp(this.value);
+ await mkdirp(this.value);
return this.value;
} catch (error) {
@@ -502,6 +503,18 @@ function getNodeCachedDir() {
};
}
+/**
+ * @param {string} dir
+ * @returns {Promise}
+ */
+function mkdirp(dir) {
+ const fs = require('fs');
+
+ return new Promise((resolve, reject) => {
+ fs.mkdir(dir, { recursive: true }, err => (err && err.code !== 'EEXIST') ? reject(err) : resolve(dir));
+ });
+}
+
//#region NLS Support
/**
diff --git a/src/sql/platform/clipboard/browser/clipboardService.ts b/src/sql/platform/clipboard/browser/clipboardService.ts
index fb0ed6e418..6a724631ca 100644
--- a/src/sql/platform/clipboard/browser/clipboardService.ts
+++ b/src/sql/platform/clipboard/browser/clipboardService.ts
@@ -69,14 +69,4 @@ export class BrowserClipboardService implements IClipboardService {
hasResources(): Promise {
return this._vsClipboardService.hasResources();
}
-
- readFindTextSync(): string {
- // eslint-disable-next-line no-sync
- return this._vsClipboardService.readFindTextSync();
- }
-
- writeFindTextSync(text: string): void {
- // eslint-disable-next-line no-sync
- return this._vsClipboardService.writeFindTextSync(text);
- }
}
diff --git a/src/sql/workbench/api/common/extHostModelViewTree.ts b/src/sql/workbench/api/common/extHostModelViewTree.ts
index 539c4cad7d..97895b7b24 100644
--- a/src/sql/workbench/api/common/extHostModelViewTree.ts
+++ b/src/sql/workbench/api/common/extHostModelViewTree.ts
@@ -77,6 +77,14 @@ export class ExtHostModelViewTreeViews implements ExtHostModelViewTreeViewsShape
$setVisible(treeViewId: string, visible: boolean): void {
}
+ $hasResolve(treeViewId: string): Promise {
+ return Promise.resolve(false);
+ }
+
+ $resolve(treeViewId: string, treeItemHandle: string): Promise {
+ return Promise.resolve(undefined);
+ }
+
private createExtHostTreeViewer(handle: number, id: string, dataProvider: azdata.TreeComponentDataProvider, extension: IExtensionDescription, logService: ILogService): ExtHostTreeView {
const treeView = new ExtHostTreeView(handle, id, dataProvider, this._proxy, undefined, extension, logService);
this.treeViews.set(`${handle}-${id}`, treeView);
diff --git a/src/sql/workbench/api/common/sqlExtHost.api.impl.ts b/src/sql/workbench/api/common/sqlExtHost.api.impl.ts
index 6ab730ad19..22f0e7f2e8 100644
--- a/src/sql/workbench/api/common/sqlExtHost.api.impl.ts
+++ b/src/sql/workbench/api/common/sqlExtHost.api.impl.ts
@@ -561,10 +561,10 @@ export function createAdsApiFactory(accessor: ServicesAccessor): IAdsExtensionAp
CardType: sqlExtHostTypes.CardType,
Orientation: sqlExtHostTypes.Orientation,
SqlThemeIcon: sqlExtHostTypes.SqlThemeIcon,
- TreeComponentItem: sqlExtHostTypes.TreeComponentItem,
+ TreeComponentItem: sqlExtHostTypes.TreeComponentItem as any, // work around
nb: nb,
AzureResource: sqlExtHostTypes.AzureResource,
- TreeItem: sqlExtHostTypes.TreeItem,
+ TreeItem: sqlExtHostTypes.TreeItem as any, // work around
extensions: extensions,
ColumnType: sqlExtHostTypes.ColumnType,
ActionOnCellCheckboxCheck: sqlExtHostTypes.ActionOnCellCheckboxCheck,
diff --git a/src/sql/workbench/api/common/sqlExtHost.protocol.ts b/src/sql/workbench/api/common/sqlExtHost.protocol.ts
index f05199857a..1dfd51fc31 100644
--- a/src/sql/workbench/api/common/sqlExtHost.protocol.ts
+++ b/src/sql/workbench/api/common/sqlExtHost.protocol.ts
@@ -732,6 +732,8 @@ export interface ExtHostModelViewTreeViewsShape {
$setExpanded(treeViewId: string, treeItemHandle: string, expanded: boolean): void;
$setSelection(treeViewId: string, treeItemHandles: string[]): void;
$setVisible(treeViewId: string, visible: boolean): void;
+ $hasResolve(treeViewId: string): Promise;
+ $resolve(treeViewId: string, treeItemHandle: string): Promise;
}
export interface ExtHostBackgroundTaskManagementShape {
diff --git a/src/sql/workbench/api/common/sqlExtHostTypes.ts b/src/sql/workbench/api/common/sqlExtHostTypes.ts
index b008c12251..1a251aa131 100644
--- a/src/sql/workbench/api/common/sqlExtHostTypes.ts
+++ b/src/sql/workbench/api/common/sqlExtHostTypes.ts
@@ -397,7 +397,6 @@ export interface ToolbarLayout {
}
export class TreeComponentItem extends vsExtTypes.TreeItem {
- label?: string;
checked?: boolean;
}
@@ -411,7 +410,6 @@ export enum AzureResource {
}
export class TreeItem extends vsExtTypes.TreeItem {
- label?: string;
payload?: IConnectionProfile;
providerHandle?: string;
}
diff --git a/src/sql/workbench/browser/parts/views/treeView.ts b/src/sql/workbench/browser/parts/views/treeView.ts
index 93b46aab7d..22a308cf2f 100644
--- a/src/sql/workbench/browser/parts/views/treeView.ts
+++ b/src/sql/workbench/browser/parts/views/treeView.ts
@@ -442,7 +442,14 @@ export class TreeView extends Disposable implements ITreeView {
identityProvider: new TreeViewIdentityProvider(),
accessibilityProvider: {
getAriaLabel(element: ITreeItem): string {
- return element.tooltip ? element.tooltip : element.label ? element.label.label : '';
+ if (element.accessibilityInformation) {
+ return element.accessibilityInformation.label;
+ }
+
+ return isString(element.tooltip) ? element.tooltip : element.label ? element.label.label : '';
+ },
+ getRole(element: ITreeItem): string | undefined {
+ return element.accessibilityInformation?.role ?? 'treeitem';
},
getWidgetAriaLabel(): string {
return widgetAriaLabel;
@@ -842,7 +849,7 @@ class TreeRenderer extends Disposable implements ITreeRenderer(moduleName: string): T;
getStats(): ReadonlyArray;
+ define(amdModuleId: string, dependencies: string[], callback: (...args: any[]) => any): any;
}
declare var require: NodeRequire;
diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts
index 8f4062dba1..e2a76eaddd 100644
--- a/src/vs/base/browser/dom.ts
+++ b/src/vs/base/browser/dom.ts
@@ -820,6 +820,7 @@ export function isHTMLElement(o: any): o is HTMLElement {
export const EventType = {
// Mouse
CLICK: 'click',
+ AUXCLICK: 'auxclick',
DBLCLICK: 'dblclick',
MOUSE_UP: 'mouseup',
MOUSE_DOWN: 'mousedown',
diff --git a/src/vs/base/browser/ui/countBadge/countBadge.css b/src/vs/base/browser/ui/countBadge/countBadge.css
index 3d3915b604..4cc14c9084 100644
--- a/src/vs/base/browser/ui/countBadge/countBadge.css
+++ b/src/vs/base/browser/ui/countBadge/countBadge.css
@@ -19,4 +19,6 @@
.monaco-count-badge.long {
padding: 2px 3px;
border-radius: 2px;
+ min-height: auto;
+ line-height: normal;
}
diff --git a/src/vs/base/browser/ui/dialog/dialog.css b/src/vs/base/browser/ui/dialog/dialog.css
index 8dcf3a7298..54585794dc 100644
--- a/src/vs/base/browser/ui/dialog/dialog.css
+++ b/src/vs/base/browser/ui/dialog/dialog.css
@@ -55,7 +55,7 @@
padding: 0 10px;
}
-.monaco-dialog-box .dialog-message-row > .codicon {
+.monaco-dialog-box .dialog-message-row > .dialog-icon.codicon {
flex: 0 0 48px;
height: 48px;
align-self: baseline;
diff --git a/src/vs/base/browser/ui/dropdown/dropdown.ts b/src/vs/base/browser/ui/dropdown/dropdown.ts
index 933f406be1..725ce0a706 100644
--- a/src/vs/base/browser/ui/dropdown/dropdown.ts
+++ b/src/vs/base/browser/ui/dropdown/dropdown.ts
@@ -11,7 +11,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
import { IContextViewProvider, IAnchor, AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
import { IMenuOptions } from 'vs/base/browser/ui/menu/menu';
import { ResolvedKeybinding, KeyCode } from 'vs/base/common/keyCodes';
-import { EventHelper, EventType, removeClass, addClass, append, $, addDisposableListener, addClasses } from 'vs/base/browser/dom';
+import { EventHelper, EventType, removeClass, addClass, append, $, addDisposableListener, addClasses, DOMEvent } from 'vs/base/browser/dom';
import { IContextMenuDelegate } from 'vs/base/browser/contextmenu';
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
import { Emitter } from 'vs/base/common/event';
@@ -122,7 +122,7 @@ export class BaseDropdown extends ActionRunner {
return !!this.visible;
}
- protected onEvent(e: Event, activeElement: HTMLElement): void {
+ protected onEvent(e: DOMEvent, activeElement: HTMLElement): void {
this.hide();
}
@@ -294,6 +294,9 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem {
private anchorAlignmentProvider: (() => AnchorAlignment) | undefined;
private menuAsChild?: boolean;
+ private _onDidChangeVisibility = this._register(new Emitter());
+ readonly onDidChangeVisibility = this._onDidChangeVisibility.event;
+
constructor(action: IAction, menuActions: ReadonlyArray, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding | undefined) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment, menuAsChild?: boolean);
constructor(action: IAction, actionProvider: IActionProvider, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment, menuAsChild?: boolean);
constructor(action: IAction, menuActionsOrProvider: ReadonlyArray | IActionProvider, contextMenuProvider: IContextMenuProvider, actionViewItemProvider: IActionViewItemProvider | undefined, actionRunner: IActionRunner, keybindings: ((action: IAction) => ResolvedKeybinding | undefined) | undefined, clazz: string | undefined, anchorAlignmentProvider?: () => AnchorAlignment, menuAsChild?: boolean) {
@@ -339,7 +342,10 @@ export class DropdownMenuActionViewItem extends BaseActionViewItem {
}
this.dropdownMenu = this._register(new DropdownMenu(container, options));
- this._register(this.dropdownMenu.onDidChangeVisibility(visible => this.element?.setAttribute('aria-expanded', `${visible}`)));
+ this._register(this.dropdownMenu.onDidChangeVisibility(visible => {
+ this.element?.setAttribute('aria-expanded', `${visible}`);
+ this._onDidChangeVisibility.fire(visible);
+ }));
this.dropdownMenu.menuOptions = {
actionViewItemProvider: this.actionViewItemProvider,
diff --git a/src/vs/base/browser/ui/grid/grid.ts b/src/vs/base/browser/ui/grid/grid.ts
index 178c26093a..f6aadedb95 100644
--- a/src/vs/base/browser/ui/grid/grid.ts
+++ b/src/vs/base/browser/ui/grid/grid.ts
@@ -10,7 +10,7 @@ import { tail2 as tail, equals } from 'vs/base/common/arrays';
import { orthogonal, IView as IGridViewView, GridView, Sizing as GridViewSizing, Box, IGridViewStyles, IViewSize, IGridViewOptions, IBoundarySashes } from './gridview';
import { Event } from 'vs/base/common/event';
-export { Orientation, Sizing as GridViewSizing, IViewSize, orthogonal, LayoutPriority } from './gridview';
+export { Orientation, IViewSize, orthogonal, LayoutPriority } from './gridview';
export const enum Direction {
Up,
diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts
index 80c8d9849e..7941364db9 100644
--- a/src/vs/base/browser/ui/list/listView.ts
+++ b/src/vs/base/browser/ui/list/listView.ts
@@ -376,6 +376,10 @@ export class ListView implements ISpliceable, IDisposable {
}
updateElementHeight(index: number, size: number, anchorIndex: number | null): void {
+ if (index < 0 || index >= this.items.length) {
+ return;
+ }
+
if (this.items[index].size === size) {
return;
}
diff --git a/src/vs/base/browser/ui/list/listWidget.ts b/src/vs/base/browser/ui/list/listWidget.ts
index d9bed479d9..b123935448 100644
--- a/src/vs/base/browser/ui/list/listWidget.ts
+++ b/src/vs/base/browser/ui/list/listWidget.ts
@@ -225,10 +225,26 @@ class TraitSpliceable implements ISpliceable {
}
}
-function isInputElement(e: HTMLElement): boolean {
+export function isInputElement(e: HTMLElement): boolean {
return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';
}
+export function isMonacoEditor(e: HTMLElement): boolean {
+ if (DOM.hasClass(e, 'monaco-editor')) {
+ return true;
+ }
+
+ if (DOM.hasClass(e, 'monaco-list')) {
+ return false;
+ }
+
+ if (!e.parentElement) {
+ return false;
+ }
+
+ return isMonacoEditor(e.parentElement);
+}
+
class KeyboardController implements IDisposable {
private readonly disposables = new DisposableStore();
@@ -572,12 +588,20 @@ export class MouseController implements IDisposable {
}
private onMouseDown(e: IListMouseEvent | IListTouchEvent): void {
+ if (isMonacoEditor(e.browserEvent.target as HTMLElement)) {
+ return;
+ }
+
if (document.activeElement !== e.browserEvent.target) {
this.list.domFocus();
}
}
private onContextMenu(e: IListContextMenuEvent): void {
+ if (isMonacoEditor(e.browserEvent.target as HTMLElement)) {
+ return;
+ }
+
const focus = typeof e.index === 'undefined' ? [] : [e.index];
this.list.setFocus(focus, e.browserEvent);
}
@@ -587,7 +611,7 @@ export class MouseController implements IDisposable {
return;
}
- if (isInputElement(e.browserEvent.target as HTMLElement)) {
+ if (isInputElement(e.browserEvent.target as HTMLElement) || isMonacoEditor(e.browserEvent.target as HTMLElement)) {
return;
}
@@ -621,7 +645,7 @@ export class MouseController implements IDisposable {
}
protected onDoubleClick(e: IListMouseEvent): void {
- if (isInputElement(e.browserEvent.target as HTMLElement)) {
+ if (isInputElement(e.browserEvent.target as HTMLElement) || isMonacoEditor(e.browserEvent.target as HTMLElement)) {
return;
}
diff --git a/src/vs/base/browser/ui/menu/menubar.ts b/src/vs/base/browser/ui/menu/menubar.ts
index 9eb049888c..b02c483889 100644
--- a/src/vs/base/browser/ui/menu/menubar.ts
+++ b/src/vs/base/browser/ui/menu/menubar.ts
@@ -942,7 +942,6 @@ export class MenuBar extends Disposable {
menuHolder.style.top = `0px`;
menuHolder.style.right = `${this.container.clientWidth}px`;
menuHolder.style.left = 'auto';
- console.log(customMenu.buttonElement.getBoundingClientRect().right - this.container.clientWidth);
} else {
menuHolder.style.top = `${this.container.clientHeight}px`;
menuHolder.style.left = `${customMenu.buttonElement.getBoundingClientRect().left}px`;
diff --git a/src/vs/base/browser/ui/selectBox/selectBox.css b/src/vs/base/browser/ui/selectBox/selectBox.css
index cbe11a810c..e258bc570f 100644
--- a/src/vs/base/browser/ui/selectBox/selectBox.css
+++ b/src/vs/base/browser/ui/selectBox/selectBox.css
@@ -12,3 +12,16 @@
font-weight: normal;
text-transform: none;
}
+
+/** Actions */
+
+.monaco-workbench .monaco-action-bar .action-item.select-container {
+ cursor: default;
+}
+
+.monaco-workbench .monaco-action-bar .action-item .monaco-select-box {
+ cursor: pointer;
+ min-width: 110px;
+ min-height: 18px;
+ padding: 2px 23px 2px 8px;
+}
diff --git a/src/vs/base/browser/ui/toolbar/toolbar.ts b/src/vs/base/browser/ui/toolbar/toolbar.ts
index edbe2f8c7e..8d78b986a6 100644
--- a/src/vs/base/browser/ui/toolbar/toolbar.ts
+++ b/src/vs/base/browser/ui/toolbar/toolbar.ts
@@ -9,10 +9,11 @@ import { Action, IActionRunner, IAction } from 'vs/base/common/actions';
import { ActionBar, ActionsOrientation, IActionViewItemProvider } from 'vs/base/browser/ui/actionbar/actionbar';
import { IContextMenuProvider, DropdownMenuActionViewItem } from 'vs/base/browser/ui/dropdown/dropdown';
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
-import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle';
+import { Disposable, IDisposable, combinedDisposable } from 'vs/base/common/lifecycle';
import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
import { withNullAsUndefined } from 'vs/base/common/types';
import { Codicon, registerIcon } from 'vs/base/common/codicons';
+import { Emitter } from 'vs/base/common/event';
export const CONTEXT = 'context.toolbar';
@@ -35,17 +36,21 @@ export class ToolBar extends Disposable {
private options: IToolBarOptions;
private actionBar: ActionBar;
private toggleMenuAction: ToggleMenuAction;
- private toggleMenuActionViewItem = this._register(new MutableDisposable());
+ private toggleMenuActionViewItem: DropdownMenuActionViewItem | undefined;
+ private toggleMenuActionViewItemDisposable: IDisposable = Disposable.None;
private hasSecondaryActions: boolean = false;
private lookupKeybindings: boolean;
+ private _onDidChangeDropdownVisibility = this._register(new Emitter());
+ readonly onDidChangeDropdownVisibility = this._onDidChangeDropdownVisibility.event;
+
constructor(container: HTMLElement, contextMenuProvider: IContextMenuProvider, options: IToolBarOptions = { orientation: ActionsOrientation.HORIZONTAL }) {
super();
this.options = options;
this.lookupKeybindings = typeof this.options.getKeyBinding === 'function';
- this.toggleMenuAction = this._register(new ToggleMenuAction(() => this.toggleMenuActionViewItem.value && this.toggleMenuActionViewItem.value.show(), options.toggleMenuTitle));
+ this.toggleMenuAction = this._register(new ToggleMenuAction(() => this.toggleMenuActionViewItem?.show(), options.toggleMenuTitle));
let element = document.createElement('div');
element.className = 'monaco-toolbar';
@@ -60,8 +65,10 @@ export class ToolBar extends Disposable {
// Return special action item for the toggle menu action
if (action.id === ToggleMenuAction.ID) {
+ this.toggleMenuActionViewItemDisposable.dispose();
+
// Create new
- this.toggleMenuActionViewItem.value = new DropdownMenuActionViewItem(
+ this.toggleMenuActionViewItem = new DropdownMenuActionViewItem(
action,
(action).menuActions,
contextMenuProvider,
@@ -72,9 +79,14 @@ export class ToolBar extends Disposable {
this.options.anchorAlignmentProvider,
true
);
- this.toggleMenuActionViewItem.value.setActionContext(this.actionBar.context);
+ this.toggleMenuActionViewItem.setActionContext(this.actionBar.context);
- return this.toggleMenuActionViewItem.value;
+ this.toggleMenuActionViewItemDisposable = combinedDisposable(
+ this.toggleMenuActionViewItem,
+ this.toggleMenuActionViewItem.onDidChangeVisibility(e => this._onDidChangeDropdownVisibility.fire(e))
+ );
+
+ return this.toggleMenuActionViewItem;
}
return options.actionViewItemProvider ? options.actionViewItemProvider(action) : undefined;
@@ -92,8 +104,8 @@ export class ToolBar extends Disposable {
set context(context: unknown) {
this.actionBar.context = context;
- if (this.toggleMenuActionViewItem.value) {
- this.toggleMenuActionViewItem.value.setActionContext(context);
+ if (this.toggleMenuActionViewItem) {
+ this.toggleMenuActionViewItem.setActionContext(context);
}
}
@@ -113,23 +125,21 @@ export class ToolBar extends Disposable {
this.actionBar.setAriaLabel(label);
}
- setActions(primaryActions: ReadonlyArray, secondaryActions?: ReadonlyArray): () => void {
- return () => {
- let primaryActionsToSet = primaryActions ? primaryActions.slice(0) : [];
+ setActions(primaryActions: ReadonlyArray, secondaryActions?: ReadonlyArray): void {
+ let primaryActionsToSet = primaryActions ? primaryActions.slice(0) : [];
- // Inject additional action to open secondary actions if present
- this.hasSecondaryActions = !!(secondaryActions && secondaryActions.length > 0);
- if (this.hasSecondaryActions && secondaryActions) {
- this.toggleMenuAction.menuActions = secondaryActions.slice(0);
- primaryActionsToSet.push(this.toggleMenuAction);
- }
+ // Inject additional action to open secondary actions if present
+ this.hasSecondaryActions = !!(secondaryActions && secondaryActions.length > 0);
+ if (this.hasSecondaryActions && secondaryActions) {
+ this.toggleMenuAction.menuActions = secondaryActions.slice(0);
+ primaryActionsToSet.push(this.toggleMenuAction);
+ }
- this.actionBar.clear();
+ this.actionBar.clear();
- primaryActionsToSet.forEach(action => {
- this.actionBar.push(action, { icon: true, label: false, keybinding: this.getKeybindingLabel(action) });
- });
- };
+ primaryActionsToSet.forEach(action => {
+ this.actionBar.push(action, { icon: true, label: false, keybinding: this.getKeybindingLabel(action) });
+ });
}
private getKeybindingLabel(action: IAction): string | undefined {
@@ -153,6 +163,11 @@ export class ToolBar extends Disposable {
}
};
}
+
+ dispose(): void {
+ super.dispose();
+ this.toggleMenuActionViewItemDisposable.dispose();
+ }
}
class ToggleMenuAction extends Action {
diff --git a/src/vs/base/browser/ui/tree/abstractTree.ts b/src/vs/base/browser/ui/tree/abstractTree.ts
index db3f01b75e..13b707c2fd 100644
--- a/src/vs/base/browser/ui/tree/abstractTree.ts
+++ b/src/vs/base/browser/ui/tree/abstractTree.ts
@@ -5,7 +5,7 @@
import 'vs/css!./media/tree';
import { IDisposable, dispose, Disposable, toDisposable, DisposableStore } from 'vs/base/common/lifecycle';
-import { IListOptions, List, IListStyles, MouseController, DefaultKeyboardNavigationDelegate } from 'vs/base/browser/ui/list/listWidget';
+import { IListOptions, List, IListStyles, MouseController, DefaultKeyboardNavigationDelegate, isInputElement, isMonacoEditor } from 'vs/base/browser/ui/list/listWidget';
import { IListVirtualDelegate, IListRenderer, IListMouseEvent, IListContextMenuEvent, IListDragAndDrop, IListDragOverReaction, IKeyboardNavigationLabelProvider, IIdentityProvider, IKeyboardNavigationDelegate } from 'vs/base/browser/ui/list/list';
import { append, $, toggleClass, getDomNodePagePosition, removeClass, addClass, hasClass, hasParentWithClass, createStyleSheet, clearNode, addClasses, removeClasses } from 'vs/base/browser/dom';
import { Event, Relay, Emitter, EventBufferer } from 'vs/base/common/event';
@@ -917,10 +917,6 @@ class TypeFilterController implements IDisposable {
}
}
-function isInputElement(e: HTMLElement): boolean {
- return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';
-}
-
function asTreeMouseEvent(event: IListMouseEvent>): ITreeMouseEvent {
let target: TreeMouseEventTarget = TreeMouseEventTarget.Unknown;
@@ -1084,7 +1080,7 @@ class TreeNodeListMouseController extends MouseController<
}
protected onViewPointer(e: IListMouseEvent>): void {
- if (isInputElement(e.browserEvent.target as HTMLElement)) {
+ if (isInputElement(e.browserEvent.target as HTMLElement) || isMonacoEditor(e.browserEvent.target as HTMLElement)) {
return;
}
diff --git a/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts b/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts
index daf79ea061..408e22a32b 100644
--- a/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts
+++ b/src/vs/base/browser/ui/tree/compressedObjectTreeModel.ts
@@ -3,11 +3,11 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { ISpliceable } from 'vs/base/common/sequence';
import { Iterable } from 'vs/base/common/iterator';
import { Event } from 'vs/base/common/event';
import { ITreeModel, ITreeNode, ITreeElement, ICollapseStateChangeEvent, ITreeModelSpliceEvent, TreeError, TreeFilterResult, TreeVisibility, WeakMapper } from 'vs/base/browser/ui/tree/tree';
import { IObjectTreeModelOptions, ObjectTreeModel, IObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel';
+import { IList } from 'vs/base/browser/ui/tree/indexTreeModel';
// Exported only for test reasons, do not use directly
export interface ICompressedTreeElement extends ITreeElement {
@@ -126,7 +126,7 @@ export class CompressedObjectTreeModel, TFilterData e
constructor(
private user: string,
- list: ISpliceable, TFilterData>>,
+ list: IList, TFilterData>>,
options: ICompressedObjectTreeModelOptions = {}
) {
this.model = new ObjectTreeModel(user, list, options);
@@ -290,6 +290,16 @@ export class CompressedObjectTreeModel, TFilterData e
this.model.rerender(compressedNode);
}
+ updateElementHeight(element: T, height: number): void {
+ const compressedNode = this.getCompressedNode(element);
+
+ if (!compressedNode) {
+ return;
+ }
+
+ this.model.updateElementHeight(compressedNode, height);
+ }
+
refilter(): void {
this.model.refilter();
}
@@ -340,10 +350,13 @@ class CompressedTreeNodeWrapper implements ITreeNode(nodeMapper: CompressedNodeWeakMapper, list: ISpliceable>): ISpliceable, TFilterData>> {
+function mapList(nodeMapper: CompressedNodeWeakMapper, list: IList>): IList, TFilterData>> {
return {
splice(start: number, deleteCount: number, toInsert: ITreeNode, TFilterData>[]): void {
list.splice(start, deleteCount, toInsert.map(node => nodeMapper.map(node)) as ITreeNode[]);
+ },
+ updateElementHeight(index: number, height: number): void {
+ list.updateElementHeight(index, height);
}
};
}
@@ -402,7 +415,7 @@ export class CompressibleObjectTreeModel, TFilterData
constructor(
user: string,
- list: ISpliceable>,
+ list: IList>,
options: ICompressibleObjectTreeModelOptions = {}
) {
this.elementMapper = options.elementMapper || DefaultElementMapper;
@@ -492,6 +505,10 @@ export class CompressibleObjectTreeModel, TFilterData
return this.model.rerender(location);
}
+ updateElementHeight(element: T, height: number): void {
+ this.model.updateElementHeight(element, height);
+ }
+
refilter(): void {
return this.model.refilter();
}
diff --git a/src/vs/base/browser/ui/tree/dataTree.ts b/src/vs/base/browser/ui/tree/dataTree.ts
index 12e28deaac..3c39bbb95f 100644
--- a/src/vs/base/browser/ui/tree/dataTree.ts
+++ b/src/vs/base/browser/ui/tree/dataTree.ts
@@ -4,11 +4,11 @@
*--------------------------------------------------------------------------------------------*/
import { AbstractTree, IAbstractTreeOptions } from 'vs/base/browser/ui/tree/abstractTree';
-import { ISpliceable } from 'vs/base/common/sequence';
import { ITreeNode, ITreeModel, ITreeElement, ITreeRenderer, ITreeSorter, IDataSource, TreeError } from 'vs/base/browser/ui/tree/tree';
import { ObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel';
import { IListVirtualDelegate, IIdentityProvider } from 'vs/base/browser/ui/list/list';
import { Iterable } from 'vs/base/common/iterator';
+import { IList } from 'vs/base/browser/ui/tree/indexTreeModel';
export interface IDataTreeOptions extends IAbstractTreeOptions {
readonly sorter?: ITreeSorter;
@@ -171,7 +171,7 @@ export class DataTree extends AbstractTree>, options: IDataTreeOptions): ITreeModel {
+ protected createModel(user: string, view: IList>, options: IDataTreeOptions): ITreeModel {
return new ObjectTreeModel(user, view, options);
}
diff --git a/src/vs/base/browser/ui/tree/indexTree.ts b/src/vs/base/browser/ui/tree/indexTree.ts
index 06d309a566..3fed05fa73 100644
--- a/src/vs/base/browser/ui/tree/indexTree.ts
+++ b/src/vs/base/browser/ui/tree/indexTree.ts
@@ -6,8 +6,7 @@
import 'vs/css!./media/tree';
import { Iterable } from 'vs/base/common/iterator';
import { AbstractTree, IAbstractTreeOptions } from 'vs/base/browser/ui/tree/abstractTree';
-import { ISpliceable } from 'vs/base/common/sequence';
-import { IndexTreeModel } from 'vs/base/browser/ui/tree/indexTreeModel';
+import { IndexTreeModel, IList } from 'vs/base/browser/ui/tree/indexTreeModel';
import { ITreeElement, ITreeModel, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree';
import { IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
@@ -41,7 +40,11 @@ export class IndexTree extends AbstractTree>, options: IIndexTreeOptions): ITreeModel {
+ updateElementHeight(location: number[], height: number): void {
+ this.model.updateElementHeight(location, height);
+ }
+
+ protected createModel(user: string, view: IList>, options: IIndexTreeOptions): ITreeModel {
return new IndexTreeModel(user, view, this.rootElement, options);
}
}
diff --git a/src/vs/base/browser/ui/tree/indexTreeModel.ts b/src/vs/base/browser/ui/tree/indexTreeModel.ts
index 2af4512869..3fc133487f 100644
--- a/src/vs/base/browser/ui/tree/indexTreeModel.ts
+++ b/src/vs/base/browser/ui/tree/indexTreeModel.ts
@@ -56,6 +56,10 @@ function isCollapsibleStateUpdate(update: CollapseStateUpdate): update is Collap
return typeof (update as any).collapsible === 'boolean';
}
+export interface IList extends ISpliceable {
+ updateElementHeight(index: number, height: number): void;
+}
+
export class IndexTreeModel, TFilterData = void> implements ITreeModel {
readonly rootRef = [];
@@ -78,7 +82,7 @@ export class IndexTreeModel, TFilterData = voi
constructor(
private user: string,
- private list: ISpliceable>,
+ private list: IList>,
rootElement: T,
options: IIndexTreeModelOptions = {}
) {
@@ -212,6 +216,15 @@ export class IndexTreeModel, TFilterData = voi
}
}
+ updateElementHeight(location: number[], height: number): void {
+ if (location.length === 0) {
+ throw new TreeError(this.user, 'Invalid tree location');
+ }
+
+ const { listIndex } = this.getTreeNodeWithListIndex(location);
+ this.list.updateElementHeight(listIndex, height);
+ }
+
has(location: number[]): boolean {
return this.hasTreeNode(location);
}
diff --git a/src/vs/base/browser/ui/tree/objectTree.ts b/src/vs/base/browser/ui/tree/objectTree.ts
index bd8f9211f3..aafc428d50 100644
--- a/src/vs/base/browser/ui/tree/objectTree.ts
+++ b/src/vs/base/browser/ui/tree/objectTree.ts
@@ -5,13 +5,13 @@
import { Iterable } from 'vs/base/common/iterator';
import { AbstractTree, IAbstractTreeOptions, IAbstractTreeOptionsUpdate } from 'vs/base/browser/ui/tree/abstractTree';
-import { ISpliceable } from 'vs/base/common/sequence';
import { ITreeNode, ITreeModel, ITreeElement, ITreeRenderer, ITreeSorter, ICollapseStateChangeEvent } from 'vs/base/browser/ui/tree/tree';
import { ObjectTreeModel, IObjectTreeModel } from 'vs/base/browser/ui/tree/objectTreeModel';
import { IListVirtualDelegate, IKeyboardNavigationLabelProvider } from 'vs/base/browser/ui/list/list';
import { Event } from 'vs/base/common/event';
import { CompressibleObjectTreeModel, ElementMapper, ICompressedTreeNode, ICompressedTreeElement } from 'vs/base/browser/ui/tree/compressedObjectTreeModel';
import { memoize } from 'vs/base/common/decorators';
+import { IList } from 'vs/base/browser/ui/tree/indexTreeModel';
export interface IObjectTreeOptions extends IAbstractTreeOptions {
readonly sorter?: ITreeSorter;
@@ -46,6 +46,10 @@ export class ObjectTree, TFilterData = void> extends
this.model.rerender(element);
}
+ updateElementHeight(element: T, height: number): void {
+ this.model.updateElementHeight(element, height);
+ }
+
resort(element: T, recursive = true): void {
this.model.resort(element, recursive);
}
@@ -54,7 +58,7 @@ export class ObjectTree, TFilterData = void> extends
return this.model.has(element);
}
- protected createModel(user: string, view: ISpliceable>, options: IObjectTreeOptions): ITreeModel {
+ protected createModel(user: string, view: IList>, options: IObjectTreeOptions): ITreeModel {
return new ObjectTreeModel(user, view, options);
}
}
@@ -188,7 +192,7 @@ export class CompressibleObjectTree, TFilterData = vo
this.model.setChildren(element, children);
}
- protected createModel(user: string, view: ISpliceable>, options: ICompressibleObjectTreeOptions