diff --git a/.github/actions/idf/Dockerfile b/.github/actions/idf/Dockerfile index a198d99c5..6a6de4aa0 100644 --- a/.github/actions/idf/Dockerfile +++ b/.github/actions/idf/Dockerfile @@ -23,8 +23,8 @@ ENV CODE_VERSION="min" ENV NVM_DIR /usr/local/nvm RUN mkdir -p $NVM_DIR -RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash -ENV NODE_VERSION v16.16.0 +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash +ENV NODE_VERSION v18.19.1 RUN . "${NVM_DIR}/nvm.sh" && nvm install ${NODE_VERSION} && nvm use --delete-prefix ${NODE_VERSION} ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/lib/node_modules diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e990b45e6..f54145b81 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -35,11 +35,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -50,7 +50,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -64,4 +64,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 3741f50ae..c5ff0aa57 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -10,10 +10,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: 3.9 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6adc8b60b..7b17c5803 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: submodules: "recursive" diff --git a/.github/workflows/ui-test.yml b/.github/workflows/ui-test.yml index 0f54b5555..69d47f9db 100644 --- a/.github/workflows/ui-test.yml +++ b/.github/workflows/ui-test.yml @@ -23,9 +23,13 @@ jobs: with: run: /ui-entrypoint.sh + - name: See if screenshots are generated + if: failure() + run: ls /github/workspace/test-resources/screenshots + - name: Upload screenshots uses: actions/upload-artifact@v4 if: failure() with: name: screenshots - path: test-resources/screenshots/*.png + path: /github/workspace/test-resources/screenshots diff --git a/README.md b/README.md index 85466b7c5..0e217c429 100644 --- a/README.md +++ b/README.md @@ -589,11 +589,11 @@ We have implemented some utilities commands that can be used in tasks.json and l ``` - `espIdf.getExtensionPath`: Get the installed location absolute path. -- `espIdf.getOpenOCDScriptValue`: Return the value of OpenOCD_SCRIPTS from `idf.customExtraVars` or from system OpenOCD_SCRIPTS environment variable. -- `espIdf.getOpenOCDConfig`: Return the OpenOCD configuration files as string. Example `-f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp32-wrover.cfg`. +- `espIdf.getOpenOcdScriptValue`: Return the value of OPENOCD_SCRIPTS computed from ESP-IDF Tools path or from `idf.customExtraVars` or from system OPENOCD_SCRIPTS environment variable. +- `espIdf.getOpenOcdConfig`: Return the openOCD configuration files as string. Example `-f interface/ftdi/esp32_devkitj_v1.cfg -f board/esp32-wrover.cfg`. - `espIdf.getProjectName`: Return the project name from current workspace folder `build/project_description.json`. -- `espIdf.getToolchainGcc`: Return the absolute path of the toolchain gcc for the ESP-IDF target given by `idf.adapterTargetName` configuration setting and `idf.customExtraPaths`. -- `espIdf.getToolchainGdb`: Return the absolute path of the toolchain gdb for the ESP-IDF target given by `idf.adapterTargetName` configuration setting and `idf.customExtraPaths`. +- `espIdf.getToolchainGcc`: Return the absolute path of the toolchain gcc for the ESP-IDF target given by current IDF_TARGET in sdkconfig. +- `espIdf.getToolchainGdb`: Return the absolute path of the toolchain gdb for the ESP-IDF target given by current IDF_TARGET in sdkconfig. See an example in the [debugging](./docs/DEBUGGING.md) documentation. diff --git a/docs/COVERAGE.md b/docs/COVERAGE.md index 5fc448bf4..92526e061 100644 --- a/docs/COVERAGE.md +++ b/docs/COVERAGE.md @@ -8,7 +8,7 @@ Please read [GCOV Code coverage](https://docs.espressif.com/projects/esp-idf/en/ Your ESP-IDF project should be configured to generate gcda/gcno coverage files using gcov as shown in [GCOV Code Coverage](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/app_trace.html#gcov-source-code-coverage). Please take a look at the [ESP-IDF gcov Example](https://github.com/espressif/esp-idf/tree/master/examples/system/gcov) as example project. -Make sure you had properly configure the toolchain in `idf.customExtraPaths` or in your environment variable PATH since the gcov executable used is `{TOOLCHAIN_PREFIX}-gcov` (replacing TOOLCHAIN_PREFIX for your IDF_TARGET toolchain prefix). +Make sure you had properly configure the toolchain in `idf.toolsPath` or in your environment variable PATH since the gcov executable used is `{TOOLCHAIN_PREFIX}-gcov` (replacing TOOLCHAIN_PREFIX for your IDF_TARGET toolchain prefix). The **ESP-IDF: Configure Project SDKConfig for Coverage** command can set required values in your project SDKConfig to enable Code Coverage. @@ -16,7 +16,7 @@ The **ESP-IDF: Configure Project SDKConfig for Coverage** command can set requir For the text editor highlighting, the **ESP-IDF: Add Editor Coverage** command execute a child process with `{TOOLCHAIN_PREFIX}-gcov` to parse all gcda generated files and generate a JSON report. You can remove the coverage highlight with **ESP-IDF: Remove Editor Coverage**. -> **NOTE:** This assumes you had configure your extension with Xtensa or RISC-V toolchain in `idf.customExtraPaths`. +> **NOTE:** This assumes you had configure your extension with Xtensa or RISC-V toolchain in `idf.toolsPath`. For the text editor, we use the json object generated by the previous command to highlight each line if it is covered or if it is not. We don't highlight noncode lines. @@ -30,4 +30,4 @@ You can customize highlight color using the extension settings. Visual Studio co The **ESP-IDF: Get HTML Coverage Report for Project** execute a child process with `{TOOLCHAIN_PREFIX}-gcov` to parse all gcda generated files for the HTML report. -> **NOTE:** This assumes you had configure your extension with Xtensa toolchain in `idf.customExtraPaths`. +> **NOTE:** This assumes you had configure your extension with Xtensa or RISC-V toolchain in `idf.toolsPath`. diff --git a/docs/C_CPP_CONFIGURATION.md b/docs/C_CPP_CONFIGURATION.md index 2b1f32cc3..82a24087a 100644 --- a/docs/C_CPP_CONFIGURATION.md +++ b/docs/C_CPP_CONFIGURATION.md @@ -36,7 +36,7 @@ For the default configuration, you must build your project beforehand in order t } ``` -> **NOTE:** When you create a project using the extension commands such as `Show Examples Projects`, `New Project`, `Create Project from Extension Template` or you add the configuration files to an existing project using the `Add .vscode Configuration Folder`, this file is created with the compilerPath of the configured toolchain for your current `idf.adapterTargetName`. +> **NOTE:** When you create a project using the extension commands such as `Show Examples Projects`, `New Project`, `Create Project from Extension Template` or you add the configuration files to an existing project using the `Add .vscode Configuration Folder`, this file is created with the compilerPath of the configured toolchain for your current `IDF_TARGET` in sdkconfig. ## Recursive search configuration diff --git a/docs/DEBUGGING.md b/docs/DEBUGGING.md index 6b8962bda..589d7bc03 100644 --- a/docs/DEBUGGING.md +++ b/docs/DEBUGGING.md @@ -124,7 +124,6 @@ you can also use [Microsoft C/C++ Extension](https://marketplace.visualstudio.co "program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf" }, "cwd": "${workspaceFolder}", - "environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }], "setupCommands": [ { "text": "set remotetimeout 20" }, ], diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 1c857c6f4..f76addadb 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -17,7 +17,7 @@ This extension provides many features to ease development of ESP-IDF Projects. - [System View Tracing Viewer](./SYS_VIEW_TRACING_VIEWER.md) - Localization (English, Chinese, Spanish) of commands which you can also [add a language contribution](./LANG_CONTRIBUTE.md). - [Code Coverage](./COVERAGE.md) for editor source highlighting and generate HTML reports. -- Search text editor's selected text in ESP-IDF documentation with **ESP-IDF: Search in Documentation...** right click command or with its [keyboard shortcut](#Available-commands). Results will be shown in ESP-IDF Explorer Tab if found on ESP-IDF Documentation based on your current vscode language, ESP-IDF version in `idf.espIdfPath` (latest otherwise) and `idf.adapterTargetName`. +- Search text editor's selected text in ESP-IDF documentation with **ESP-IDF: Search in Documentation...** right click command or with its [keyboard shortcut](#Available-commands). Results will be shown in ESP-IDF Explorer Tab if found on ESP-IDF Documentation based on your current vscode language, ESP-IDF version in `idf.espIdfPath` (latest otherwise) and current `IDF_TARGET` in sdkconfig. - [ESP Rainmaker Support](./ESP_RAINMAKER.md) - [Core Dump and GdbStub](./POSTMORTEM.md) postmortem mode. - [CMake Editor](#CMake-Editor) @@ -442,7 +442,7 @@ The **Add Arduino-ESP32 as ESP-IDF Component** command will add [Arduino-ESP32]( Click F5 to start debugging. To configure the debug behaviour, please review [DEBUGGING](./DEBUGGING.md). -> **NOTE** For correct debug experience, first define the correct `idf.customExtraPaths` paths and `idf.customExtraVars` using [SETUP](./SETUP.md), `build` your project, choose the right serial port, `flash` the program to your device. +> **NOTE** For correct debug experience, first define the correct settings configuration using [SETUP](./SETUP.md), `build` your project, choose the right serial port, `flash` the program to your device. ## CMakeLists.txt Editor diff --git a/docs/PROJECT_CONFIGURATION.md b/docs/PROJECT_CONFIGURATION.md index 268594b96..e7d55b185 100644 --- a/docs/PROJECT_CONFIGURATION.md +++ b/docs/PROJECT_CONFIGURATION.md @@ -11,7 +11,6 @@ Use the `ESP-IDF: Open Project Configuration` to manage the project configuratio `idf.sdkconfigDefaults` `idf.customExtraVars` -`idf.adapterTargetName` `idf.flashBaudRate` `idf.monitorBaudRate` diff --git a/docs/SETTINGS.md b/docs/SETTINGS.md index 7074a6069..8771b60e7 100644 --- a/docs/SETTINGS.md +++ b/docs/SETTINGS.md @@ -18,8 +18,7 @@ These are the configuration settings that ESP-IDF extension contributes to your | `idf.buildPathWin` | Custom build directory name for extension commands. (Default: \${workspaceFolder}\\build) | | `idf.sdkconfigDefaults` | List of sdkconfig default values for initial build configuration | | `idf.cmakeCompilerArgs` | Arguments for CMake compilation task | -| `idf.customExtraPaths` | Paths to be appended to \$PATH | -| `idf.customExtraVars` | Variables to be added to system environment variables | +| `idf.customExtraVars` | User defined variables to be added to system environment variables | | `idf.gitPath` | Path to git executable | | `idf.gitPathWin` | Path to git executable in Windows | | `idf.enableCCache` | Enable CCache on build task (make sure CCache is in PATH) | @@ -27,21 +26,19 @@ These are the configuration settings that ESP-IDF extension contributes to your | `idf.espIdfPath` | Path to locate ESP-IDF framework (IDF_PATH) | | `idf.espIdfPathWin` | Path to locate ESP-IDF framework in Windows (IDF_PATH) | | `idf.ninjaArgs` | Arguments for Ninja build task | -| `idf.pythonBinPath` | Python absolute binary path used to execute ESP-IDF Python Scripts | -| `idf.pythonBinPathWin` | Python absolute binary path used to execute ESP-IDF Python Scripts in Windows | +| `idf.pythonInstallPath` | System python absolute path used to compute ESP-IDF python virtual environment | | `idf.toolsPath` | Path to locate ESP-IDF Tools (IDF_TOOLS_PATH) | | `idf.toolsPathWin` | Path to locate ESP-IDF Tools in Windows (IDF_TOOLS_PATH) | This is how the extension uses them: -1. `idf.customExtraPaths` is pre-appended to your system environment variable PATH within Visual Studio Code **(not modifying your system environment)** before executing any of our extension commands such as `openocd` or `cmake` (i.e. build your current project) else extension commands will try to use what is already in your system PATH. - > **NOTE:** In **ESP-IDF: Configure ESP-IDF Extension** you can download ESP-IDF Tools or skip IDF Tools download and manually enter all required ESP-IDF Tools as explain in [SETUP](./SETUP.md) which will be saved in `idf.customExtraPaths`. -2. `idf.customExtraVars` stores any custom environment variable such as OPENOCD_SCRIPTS, which is the OpenOCD scripts directory used in OpenOCD server startup. These variables are loaded to this extension commands process environment variables, choosing the extension variable if available, else extension commands will try to use what is already in your system PATH. **This doesn't modify your system environment outside Visual Studio Code.** -3. `idf.espIdfPath` (or `idf.espIdfPathWin` in Windows) is used to store ESP-IDF directory path within our extension. We override Visual Studio Code process IDF_PATH if this value is available. **This doesn't modify your system environment outside Visual Studio Code.** -4. `idf.pythonBinPath` (or `idf.espIdfPathWin` in Windows) is used to executed python scripts within the extension. In **ESP-IDF: Configure ESP-IDF Extension** we first select a system-wide python executable from which to create a python virtual environment and we save the executable from this virtual environment in `idf.pythonBinPath`. All required python packages by ESP-IDF are installed in this virtual environment, if using **ESP-IDF: Configure ESP-IDF Extension** -5. `idf.gitPath` (or `idf.gitPathWin` in Windows) is used in the extension to clone ESP-IDF master version or the additional supported frameworks such as ESP-ADF, ESP-MDF and Arduino-ESP32. +1. `idf.customExtraVars` stores any custom environment variable such as OPENOCD_SCRIPTS, which is the OpenOCD scripts directory used in OpenOCD server startup. These variables are loaded to this extension commands process environment variables, choosing the extension variable if available, else extension commands will try to use what is already in your system PATH. **This doesn't modify your system environment outside Visual Studio Code.** +2. `idf.espIdfPath` (or `idf.espIdfPathWin` in Windows) is used to store ESP-IDF directory path within our extension. We override Visual Studio Code process IDF_PATH if this value is available. It is also used to compute the list of ESP-IDF tools to add to environment variable PATH and the python virtual environment path together from `idf.toolsPath` and `idf.pythonInstallPath`. **This doesn't modify your system environment outside Visual Studio Code.** +3. `idf.pythonInstallPath` is the system python absolute path used to compute ESP-IDF python virtual environment from `idf.toolsPath` and `idf.espIdfPath` where ESP-IDF python packages will be installed and used. +4. `idf.gitPath` (or `idf.gitPathWin` in Windows) is used in the extension to clone ESP-IDF master version or the additional supported frameworks such as ESP-ADF, ESP-MDF and Arduino-ESP32. +5. `idf.toolsPath` (or `idf.toolsPathWin` in Windows) is used to compute the list of ESP-IDF tools to add to environment variable PATH and the python virtual environment path together from `idf.pythonInstallPath` and `idf.espIdfPath`. -> **NOTE**: From Visual Studio Code extension context, we can't modify your system PATH or any other environment variable. We use a modified process environment in all of this extension tasks and child processes which should not affect any other system process or extension. Please review the content of `idf.customExtraPaths` and `idf.customExtraVars` in case you have issues with other extensions. +> **NOTE**: From Visual Studio Code extension context, we can't modify your system PATH or any other environment variable. We use a modified process environment in all of this extension tasks and child processes which should not affect any other system process or extension. Please review the content of `idf.customExtraVars` in case you have issues with other extensions. ## Board/Chip Specific Settings @@ -49,8 +46,6 @@ These settings are specific to the ESP32 Chip/Board | Setting | Description | Scope | | ------------------------------------------------ | -------------------------------------------------------------------------------------- | ------------------------- | -| `idf.adapterTargetName` | ESP-IDF Target Chip (Example: esp32) | | -| `idf.customAdapterTargetName` | Custom Target Name for ESP-IDF Debug Adapter | | | `idf.flashBaudRate` | Flash Baud rate | | | `idf.monitorBaudRate` | Monitor Baud Rate (Empty by default to use SDKConfig CONFIG_ESP_CONSOLE_UART_BAUDRATE) | | | `idf.openOcdConfigs` | Configuration Files for OpenOCD. Relative to OPENOCD_SCRIPTS folder | | @@ -62,23 +57,16 @@ These settings are specific to the ESP32 Chip/Board | `idf.useSerialPortVendorProductFilter` | Enable use of idf.usbSerialPortFilters list to filter serial port devices list | | | `idf.usbSerialPortFilters` | USB productID and vendorID list to filter known Espressif devices | | | `openocd.jtag.command.force_unix_path_separator` | Forced to Use `/` as Path sep. for Win32 Based OS Instead of `\\` | User, Remote or Workspace | -| `idf.listDfuDevices` | List of DFU Devices Connected to USB | User, Remote or Workspace | -| `idf.selectedDfuDevicePath` | Selected DFU Device Connected to USB | User, Remote or Workspace | | `idf.svdFilePath` | SVD File Absolute Path to Resolve Chip Debug Peripheral Tree view | User, Remote or Workspace | This is how the extension uses them: -1. `idf.adapterTargetName` is used to select the chipset (esp32, esp32s2, esp32s3, esp32c3 and custom) on which to run the extension commands. - > **NOTE** When you use the command **ESP-IDF: Set Espressif Device Target** it will override `idf.adapterTargetName` with selected chip and `idf.openOcdConfigs` with its default OpenOCD Configuration Files. - > - > > If you want to customize the `idf.openOcdConfigs` alone, you can use the **ESP-IDF: Select OpenOCD Board Configuration** or modify your settings.json directly. -2. `idf.customAdapterTargetName` is used when `idf.adapterTargetName` is set to `custom`. -3. `idf.flashBaudRate` is the baud rate value used for the **ESP-IDF: Flash your Project** command and [ESP-IDF Debug](./DEBUGGING.md). -4. `idf.monitorBaudRate` is the ESP-IDF Monitor baud rate value and fallback from your project's skdconfig `CONFIG_ESPTOOLPY_MONITOR_BAUD` (idf.py monitor' baud rate). This value can also be override by setting the environment variable `IDF_MONITOR_BAUD` or `MONITORBAUD` in your system environment variables or this extension's `idf.customExtraVars` configuration setting. -5. `idf.openOcdConfigs` is used to store an string array of OpenOCD scripts directory relative path config files to use with OpenOCD server. (Example: ["interface/ftdi/esp32_devkitj_v1.cfg", "board/esp32-wrover.cfg"]). More information [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/tips-and-quirks.html#jtag-debugging-tip-openocd-configure-target). -6. `idf.port` (or `idf.portWin` in Windows) is used as the serial port value for the extension commands. -7. `idf.openOcdDebugLevel`: Log level for OpenOCD Server output from 0 to 4. -8. `idf.openOcdLaunchArgs`: Launch arguments string array for OpenOCD. The resulting OpenOCD launch command looks like this: `openocd -d${idf.openOcdDebugLevel} -f ${idf.openOcdConfigs} ${idf.openOcdLaunchArgs}`. +1. `idf.flashBaudRate` is the baud rate value used for the **ESP-IDF: Flash your Project** command and [ESP-IDF Debug](./DEBUGGING.md). +2. `idf.monitorBaudRate` is the ESP-IDF Monitor baud rate value and fallback from your project's skdconfig `CONFIG_ESPTOOLPY_MONITOR_BAUD` (idf.py monitor' baud rate). This value can also be override by setting the environment variable `IDF_MONITOR_BAUD` or `MONITORBAUD` in your system environment variables or this extension's `idf.customExtraVars` configuration setting. +3. `idf.openOcdConfigs` is used to store an string array of OpenOCD scripts directory relative path config files to use with OpenOCD server. (Example: ["interface/ftdi/esp32_devkitj_v1.cfg", "board/esp32-wrover.cfg"]). More information [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/tips-and-quirks.html#jtag-debugging-tip-openocd-configure-target). +4. `idf.port` (or `idf.portWin` in Windows) is used as the serial port value for the extension commands. +5. `idf.openOcdDebugLevel`: Log level for OpenOCD Server output from 0 to 4. +6. `idf.openOcdLaunchArgs`: Launch arguments string array for openOCD. The resulting OpenOCD launch command looks like this: `openocd -d${idf.openOcdDebugLevel} -f ${idf.openOcdConfigs} ${idf.openOcdLaunchArgs}`. ## Code Coverage Specific Settings diff --git a/docs/SETUP.md b/docs/SETUP.md index 73897d970..4794eada8 100644 --- a/docs/SETUP.md +++ b/docs/SETUP.md @@ -19,9 +19,8 @@ If ESP-IDF and corresponding ESP-IDF Tools are found, these paths will be saved These settings, as described in [ESP-IDF Specific Settings](./SETTINGS.md#ESP-IDF-Specific-Settings), are: - `idf.espIdfPath` for IDF_PATH, -- `idf.customExtraPaths` for ESP-IDF Tools paths to be appended to environment variable PATH, -- `idf.pythonBinPath` for absolute virtual environment python path and -- `idf.customExtraVars` for additional environment variables from ESP-IDF Tools such as OPENOCD_SCRIPTS. +- `idf.toolsPath` for IDF_TOOLS_PATH +- `idf.customExtraVars` for additional user defined environment variables. > **NOTE**: Visual Studio Code has many places where to set configuration settings. This extension uses the `idf.saveScope` configuration setting to determine where to save settings, Global (User Settings), Workspace and WorkspaceFolder. Please review the [Visual Studio Code Settings Precedence](https://code.visualstudio.com/docs/getstarted/settings#_settings-precedence). @@ -36,28 +35,28 @@ Setup wizard provides 3 choices: - **Express Install**: Fastest option. 1. Choose to either download selected ESP-IDF version or find ESP-IDF in your system. 2. Choose directory, Download and install ESP-IDF Tools. This step will use the existing value in `idf.toolsPath` or `idf.toolsPathWin` as ESP-IDF Tools directory. - 3. Create python virtual environment with required packages on existing ESP-IDF Tools directory. + 3. Create Python virtual environment with required packages on existing ESP-IDF Tools directory. - **Advanced Install**: Configurable option. 1. Choose to either download selected ESP-IDF version or find ESP-IDF in your system. 2. Download or use existing ESP-IDF Tools: - Choose directory for ESP-IDF Tools and install ESP-IDF Tools. This step will update the existing value in `idf.toolsPath` or `idf.toolsPathWin`. - Specify directory than contains executable for each required ESP-IDF tool with matching version. - 3. Create python virtual environment with required packages in chosen ESP-IDF Tools directory. + 3. Create Python virtual environment with required packages in chosen ESP-IDF Tools directory. - **Use Existing Setup**: This option will show previous setup used in the extension and existing setup if: 1. `esp-idf.json` is found in the current `idf.toolsPath` (MacOS/Linux users) or `idf.toolsPathWin` (Windows users). This file is generated when you install ESP-IDF with the [IDF Windows Installer](https://github.com/espressif/idf-installer) or using [IDF-ENV](https://github.com/espressif/idf-env) or this extension. -> **NOTE:** When running any of these choices, the setup wizard will install ESP-IDF Python packages and ESP-IDF debug adapter (`EXTENSION_PATH`/esp_debug_adapter/requirements.txt) python packages where `EXTENSION_PATH` is located in: +> **NOTE:** When running any of these choices, the setup wizard will install ESP-IDF Python packages and ESP-IDF debug adapter (`EXTENSION_PATH`/esp_debug_adapter/requirements.txt) Python packages where `EXTENSION_PATH` is located in: - Windows: `%USERPROFILE%\.vscode\extensions\espressif.esp-idf-extension-VERSION` - MacOS/Linux: `$HOME/.vscode/extensions/espressif.esp-idf-extension-VERSION` -so make sure that if using an existing python virtual environment that installing these packages doesn't affect your virtual environment. +so make sure that if using an existing Python virtual environment that installing these packages doesn't affect your virtual environment. -> **NOTE:** Currently the python package `pygdbmi` used by the debug adapter still depends on some Python 2.7 libraries (libpython2.7.so.1.0) so make sure that the Python executable in `idf.pythonBinPath` you use contains these libraries. This will be dropped in later versions of ESP-IDF. +> **NOTE:** Currently the Python package `pygdbmi` used by the debug adapter still depends on some Python 2.7 libraries (libpython2.7.so.1.0) so make sure that the Python executable in ESP-IDF Virtual environment Python path you use contains these libraries. This will be dropped in later versions of ESP-IDF. > **NOTE**: If you want to use an ESP-IDF version < 5.0, make sure that IDF_PATH and IDF_TOOLS_PATH don't have any spaces since they were no suported in previous versions. -After choosing any of the previous options, a status page is displayed showing ESP-IDF, tools and python environment setup progress status. When the setup is finished, a message is shown that "All settings have been configured. You can close this window." +After choosing any of the previous options, a status page is displayed showing ESP-IDF, tools and Python environment setup progress status. When the setup is finished, a message is shown that "All settings have been configured. You can close this window." > **NOTE:** Check the [Troubleshooting](../README.md#Troubleshooting) section if you have any issue. @@ -74,11 +73,7 @@ MacOS/Linux ```json { "idf.espIdfPath": "path/to/esp-idf", - "idf.customExtraPaths": "UPDATED_PATH", - "idf.customExtraVars": { - "OPENOCD_SCRIPTS": "OPENOCD_FOLDER/share/openocd/scripts" - }, - "idf.pythonBinPath": "PYTHON_INTERPRETER", + "idf.toolsPath": "path/to/.espressif", "idf.openOcdConfigs": [ "interface/ftdi/esp32_devkitj_v1.cfg", "board/esp32-wrover.cfg" @@ -92,11 +87,7 @@ Windows ```json { "idf.espIdfPathWin": "path/to/esp-idf", - "idf.customExtraPaths": "UPDATED_PATH", - "idf.customExtraVars": { - "OPENOCD_SCRIPTS": "OPENOCD_FOLDER/share/openocd/scripts" - }, - "idf.pythonBinPathWin": "PYTHON_INTERPRETER", + "idf.toolsPath": "path/to/.espressif", "idf.openOcdConfigs": [ "interface/ftdi/esp32_devkitj_v1.cfg", "board/esp32-wrover.cfg" @@ -132,34 +123,9 @@ This method also need to install extension and debug adapter requirements.txt as # Example Configuration Setting Values -An example ESP-IDF path is to set `idf.espIdfPath` to `/home/myUser/to/esp-idf` (MacOS/Linux) or set `idf.espIdfPathWin` to `C:\Users\myUser\esp\esp-idf` (Windows) +An example ESP-IDF path is to set `idf.espIdfPath` to `/home/myUser/esp/esp-idf` (MacOS/Linux) or set `idf.espIdfPathWin` to `C:\Users\myUser\esp\esp-idf` (Windows) -An example python path for `idf.pythonBinPath` (MacOS/Linux) is - -- `/home/myUser/.espressif/python_env/idf4.0_py3.5_env/bin/python` - -An example python path for `idf.pythonBinPathWin` (Windows) is - -- `C:\Users\myUser\.espressif\python_env\idf4.0_py3.5_env\Scripts\python.exe` - -For example if required ESP-IDF Tools are: - -- OpenOCD executable path is `/home/myUser/.espressif/tools/openocd-esp32/version/openocd-esp32/bin/openocd` or `C:\Users\myUser\.espressif\tools\openocd-esp32\version\openocd-esp32\bin\openocd` (Windows) -- XtensaEsp32 executable path is `/home/myUser/.espressif/tools/xtensa-esp32/version/xtensa-esp32/bin/xtensa-esp32-gcc` or `C:\Users\myUser\.espressif\tools\xtensa\version\xtensa-esp32\bin\xtensa-esp32-gcc` (Windows) - -you need to set in `idf.customExtraPaths`: - -- MacOS/Linux - -``` -/home/myUser/.espressif/tools/openocd/version/openocd-esp32/bin:/home/myUser/.espressif/tools/xtensa-esp32/version/xtensa-esp32/bin -``` - -- Windows - -``` -C:\Users\myUser\.espressif\tools\openocd-esp32\version\openocd-esp32\bin;C:\Users\myUser\.espressif\tools\xtensa-esp32\version\xtensa-esp32\bin -``` +ESP-IDF Tools path is to set `idf.toolsPath` to `/home/myUser/.espressif` (MacOS/Linux) or set `idf.toolsPathWin` to `C:\Users\myUser\.espressif` (Windows) `idf.customExtraVars` is an JSON object saved in Visual Studio Code's settings.json (**Make sure to replace \${TOOL_PATH} with the existing tool directory path**): @@ -169,8 +135,6 @@ C:\Users\myUser\.espressif\tools\openocd-esp32\version\openocd-esp32\bin;C:\User } ``` -The list of required ESP-IDF Tools (`idf.customExtraPaths`) and environment variables (`idf.customExtraVars`) can be found in `$IDF_PATH/tools/tools.json` - -> **NOTE:** Make sure to replace \${TOOL_PATH} of `$IDF_PATH/tools/tools.json` in`idf.customExtraPaths` and `idf.customExtraVars` with existing ESP-IDF tool directory path. +The list of required ESP-IDF Tools and environment variables can be found in `$IDF_PATH/tools/tools.json`. `idf.openOcdConfigs` use OpenOCD Configuration files depending on your board and chip target. More information [here](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/jtag-debugging/tips-and-quirks.html#jtag-debugging-tip-openocd-configure-target). diff --git a/docs/UNIT_TESTING.md b/docs/UNIT_TESTING.md index 1d0d59a65..4fe785483 100644 --- a/docs/UNIT_TESTING.md +++ b/docs/UNIT_TESTING.md @@ -43,7 +43,7 @@ When you click on the Testing Tab in the Activity bar, the extension will try to > **NOTE:** You can also install the PyTest requirements with the `ESP-IDF Unit Test: Install ESP-IDF PyTest requirements` extension command. -2. Install ESP-IDF PyTest requirements if they are not found in the python current virtual environment specified in `idf.pythonBinPath` configuration setting in settings.json. +2. Install ESP-IDF PyTest requirements if they are not found in the python current virtual environment specified by extension configuration settings in settings.json. 3. Copy the unity-app from the extension template and add the test components to the main CMakeLists.txt `TEST_COMPONENTS` cmake variable. The extension unity-app is a basic ESP-IDF application with a unity menu that will be built and flashed on the current `idf.port` with all test cases that were found during exploration step. diff --git a/docs/tutorial/basic_use.md b/docs/tutorial/basic_use.md index c00d3fb8d..b0aa99461 100644 --- a/docs/tutorial/basic_use.md +++ b/docs/tutorial/basic_use.md @@ -77,18 +77,4 @@ See other [ESP-IDF Extension Features](../FEATURES.md). ## About JTAG Flashing -JTAG flash mode requires OpenOCD v0.10.0-esp32-20201125 or later. To replace OpenOCD, just get one of the latest [OpenOCD releases](https://github.com/espressif/openocd-esp32/releases) and replace in `idf.customExtraPaths` the OpenOCD binary path like: - -``` -c:\\esp\\tools\\.espressif\\tools\\openocd-esp32\\v0.10.0-esp32-20200709\\openocd-esp32\\bin -``` - -for the bin directory of your desired OpenOCD release - -``` -c:\\esp\\tools\\.espressif\\tools\\openocd-esp32\\v0.10.0-esp32-20201202\\openocd-esp32\\bin -``` - -Also update `idf.customExtraVars` OPENOCD_SCRIPTS to the new OpenOCD Scripts folder path. - -Please review [ESP-IDF Settings](../SETTINGS.md) to see how to modify these values. +JTAG flash mode requires openOCD v0.10.0-esp32-20201125 or later. Please review [ESP-IDF Settings](../SETTINGS.md) to see how to modify these values. diff --git a/docs/tutorial/code_coverage.md b/docs/tutorial/code_coverage.md index f3ee3b808..70d309854 100644 --- a/docs/tutorial/code_coverage.md +++ b/docs/tutorial/code_coverage.md @@ -77,6 +77,6 @@ Please review [Settings](../SETTINGS.md) to see how to modify these configuratio ## Troubleshooting -Make sure you had properly configure the required toolchain in `idf.customExtraPaths` or in your environment variable PATH since the GCOV executable used is `{TOOLCHAIN_PREFIX}-gcov` (replacing `TOOLCHAIN_PREFIX` for your `IDF_TARGET` toolchain prefix). +Make sure you had properly configure the required toolchain in `idf.toolsPath` or in your environment variable PATH since the GCOV executable used is `{TOOLCHAIN_PREFIX}-gcov` (replacing `TOOLCHAIN_PREFIX` for your `IDF_TARGET` toolchain prefix). An easy way is to verify this is to execute **ESP-IDF: Open ESP-IDF Terminal** and type `{TOOLCHAIN_PREFIX}-gcov --version`. diff --git a/docs/tutorial/project_configuration.md b/docs/tutorial/project_configuration.md index 499c82a5c..6d6f9030b 100644 --- a/docs/tutorial/project_configuration.md +++ b/docs/tutorial/project_configuration.md @@ -11,7 +11,6 @@ Use the `ESP-IDF: Open Project Configuration` to manage the project configuratio `idf.sdkconfigDefaults` `idf.customExtraVars` -`idf.adapterTargetName` `idf.flashBaudRate` `idf.monitorBaudRate` diff --git a/docs/tutorial/using-docker-container.md b/docs/tutorial/using-docker-container.md index c44c3427b..630c67773 100644 --- a/docs/tutorial/using-docker-container.md +++ b/docs/tutorial/using-docker-container.md @@ -176,8 +176,6 @@ For more information about `devcontainer.json`, please refer to the comments. "settings": { "terminal.integrated.defaultProfile.linux": "bash", "idf.espIdfPath": "/opt/esp/idf", - "idf.customExtraPaths": "", - "idf.pythonBinPath": "/opt/esp/python_env/idf5.3_py3.10_env/bin/python", "idf.toolsPath": "/opt/esp", "idf.gitPath": "/usr/bin/git" }, diff --git a/docs_espressif/en/additionalfeatures/docker-container.rst b/docs_espressif/en/additionalfeatures/docker-container.rst index 8d2f6a02c..33ec7a590 100644 --- a/docs_espressif/en/additionalfeatures/docker-container.rst +++ b/docs_espressif/en/additionalfeatures/docker-container.rst @@ -205,8 +205,6 @@ For more information about ``devcontainer.json``, please refer to the comments. "settings": { "terminal.integrated.defaultProfile.linux": "bash", "idf.espIdfPath": "/opt/esp/idf", - "idf.customExtraPaths": "", - "idf.pythonBinPath": "/opt/esp/python_env/idf5.3_py3.10_env/bin/python", "idf.toolsPath": "/opt/esp", "idf.gitPath": "/usr/bin/git" }, diff --git a/docs_espressif/en/additionalfeatures/qemu.rst b/docs_espressif/en/additionalfeatures/qemu.rst index 86f188ba5..54fa2c023 100644 --- a/docs_espressif/en/additionalfeatures/qemu.rst +++ b/docs_espressif/en/additionalfeatures/qemu.rst @@ -22,4 +22,4 @@ Development steps: 8. If you want to launch a QEMU debug session, use the **ESP-IDF: Launch QEMU Debug Session** commmand, which will stop any existing QEMU server and launch a new QEMU server for debugging. .. note:: - Using QEMU is not limited to a docker container, basically the extension assumes that ``qemu-system-xtensa`` is available in the environment variable PATH for the **ESP-IDF: Launch QEMU Server** command and that a QEMU server is running for **ESP-IDF: Monitor QEMU Device** and **ESP-IDF: Launch QEMU Debug Session**. + Using QEMU is not limited to a docker container, basically the extension assumes that ``qemu-system-xtensa`` or ``qemu-system-riscv32`` is available in the environment variable PATH for the **ESP-IDF: Launch QEMU Server** command and that a QEMU server is running for **ESP-IDF: Monitor QEMU Device** and **ESP-IDF: Launch QEMU Debug Session**. diff --git a/docs_espressif/en/additionalfeatures/unit-testing.rst b/docs_espressif/en/additionalfeatures/unit-testing.rst index c4c844d1b..8c21779d4 100644 --- a/docs_espressif/en/additionalfeatures/unit-testing.rst +++ b/docs_espressif/en/additionalfeatures/unit-testing.rst @@ -54,7 +54,7 @@ When it press the run button on a test, it will configure the current project be .. note:: Unit tests in this extension requires `ESP-IDF PyTest requirements `_ to be installed in your Python virtual environment. -2. Install ESP-IDF PyTest requirements if they are not found in the python current virtual environment specified in **idf.pythonBinPath** configuration setting in settings.json. +2. Install ESP-IDF PyTest requirements if they are not found in the python current virtual environment specified in **idf.toolsPath** configuration setting in settings.json. 3. Copy the unity-app from the extension template and add the test components to the main CMakeLists.txt ``TEST_COMPONENTS`` cmake variable. The extension unity-app is a basic ESP-IDF application with a unity menu that will be built and flashed on the current **idf.port** serial device with all test cases that were found during exploration step. diff --git a/docs_espressif/en/settings.rst b/docs_espressif/en/settings.rst index eef161d6b..50b3c72a1 100644 --- a/docs_espressif/en/settings.rst +++ b/docs_espressif/en/settings.rst @@ -33,8 +33,6 @@ These are the configuration settings that ESP-IDF extension contributes to your +-----------------------------------+-------------------------------------------------------------------------------------------+ | **idf.cmakeCompilerArgs** | Arguments for CMake compilation task | +-----------------------------------+-------------------------------------------------------------------------------------------+ -| **idf.customExtraPaths** | Paths to be appended to \$PATH | -+-----------------------------------+-------------------------------------------------------------------------------------------+ | **idf.customExtraVars** | Variables to be added to system environment variables | +-----------------------------------+-------------------------------------------------------------------------------------------+ | **idf.gitPath** | Path to git executable | @@ -51,9 +49,7 @@ These are the configuration settings that ESP-IDF extension contributes to your +-----------------------------------+-------------------------------------------------------------------------------------------+ | **idf.ninjaArgs** | Arguments for Ninja build task | +-----------------------------------+-------------------------------------------------------------------------------------------+ -| **idf.pythonBinPath** | Python absolute binary path used to execute ESP-IDF Python Scripts | -+-----------------------------------+-------------------------------------------------------------------------------------------+ -| **idf.pythonBinPathWin** | Python absolute binary path used to execute ESP-IDF Python Scripts in Windows | +| **idf.pythonInstallPath** | System python absolute path used to compute ESP-IDF python virtual environment | +-----------------------------------+-------------------------------------------------------------------------------------------+ | **idf.toolsPath** | Path to locate ESP-IDF Tools (IDF_TOOLS_PATH) | +-----------------------------------+-------------------------------------------------------------------------------------------+ @@ -63,14 +59,13 @@ These are the configuration settings that ESP-IDF extension contributes to your This is how the extension uses them: -1. **idf.customExtraPaths** is pre-appended to your system environment variable PATH within Visual Studio Code **(not modifying your system environment)** before executing any of our extension commands such as ``openocd`` or ``cmake`` (i.e. build your current project) else extension commands will try to use what is already in your system PATH. - > **NOTE:** In **ESP-IDF: Configure ESP-IDF Extension** you can download ESP-IDF Tools or skip IDF Tools download and manually enter all required ESP-IDF Tools as explain in [SETUP](./SETUP.md) which will be saved in **idf.customExtraPaths**. -2. **idf.customExtraVars** stores any custom environment variable such as OPENOCD_SCRIPTS, which is the openOCD scripts directory used in OpenOCD server startup. These variables are loaded to this extension commands process environment variables, choosing the extension variable if available, else extension commands will try to use what is already in your system PATH. **This doesn't modify your system environment outside Visual Studio Code.** -3. **idf.espIdfPath** (or **idf.espIdfPathWin** in Windows) is used to store ESP-IDF directory path within our extension. We override Visual Studio Code process IDF_PATH if this value is available. **This doesn't modify your system environment outside Visual Studio Code.** -4. **idf.pythonBinPath** (or **idf.espIdfPathWin** in Windows) is used to executed python scripts within the extension. In **ESP-IDF: Configure ESP-IDF Extension** we first select a system-wide python executable from which to create a python virtual environment and we save the executable from this virtual environment in **idf.pythonBinPath**. All required python packages by ESP-IDF are installed in this virtual environment, if using **ESP-IDF: Configure ESP-IDF Extension** -5. **idf.gitPath** (or **idf.gitPathWin** in Windows) is used in the extension to clone ESP-IDF master version or the additional supported frameworks such as ESP-ADF, ESP-MDF and Arduino-ESP32. +1. **idf.customExtraVars** stores any custom environment variable such as OPENOCD_SCRIPTS, which is the openOCD scripts directory used in OpenOCD server startup. These variables are loaded to this extension commands process environment variables, choosing the extension variable if available, else extension commands will try to use what is already in your system PATH. **This doesn't modify your system environment outside Visual Studio Code.** +2. **idf.espIdfPath** (or **idf.espIdfPathWin** in Windows) is used to store ESP-IDF directory path within our extension. We override Visual Studio Code process IDF_PATH if this value is available. **This doesn't modify your system environment outside Visual Studio Code.**. It is also used to compute the list of ESP-IDF tools to add to environment variable PATH and the python virtual environment path together from **idf.toolsPath** and **idf.pythonInstallPath**. +3. **idf.pythonInstallPath** is the system python absolute path used to compute ESP-IDF python virtual environment from **idf.toolsPath** and **idf.espIdfPath** where ESP-IDF python packages will be installed and used. +4. **idf.gitPath** (or **idf.gitPathWin** in Windows) is used in the extension to clone ESP-IDF master version or the additional supported frameworks such as ESP-ADF, ESP-MDF and Arduino-ESP32. +5. **idf.toolsPath** (or **idf.toolsPathWin** in Windows) is used to compute the list of ESP-IDF tools to add to environment variable PATH and the python virtual environment path together from **idf.pythonInstallPath** and **idf.espIdfPath**. -> **NOTE**: From Visual Studio Code extension context, we can't modify your system PATH or any other environment variable. We use a modified process environment in all of this extension tasks and child processes which should not affect any other system process or extension. Please review the content of **idf.customExtraPaths** and **idf.customExtraVars** in case you have issues with other extensions. +> **NOTE**: From Visual Studio Code extension context, we can't modify your system PATH or any other environment variable. We use a modified process environment in all of this extension tasks and child processes which should not affect any other system process or extension. Please review the content of **idf.customExtraVars** in case you have issues with other extensions. Board/Chip Specific Settings ------------------------------------------------------------------------- @@ -80,10 +75,6 @@ These settings are specific to the ESP32 Chip/Board +----------------------------------------------------+----------------------------------------------------------------------------------------+ | Setting | Description | +====================================================+========================================================================================+ -| **idf.adapterTargetName** | ESP-IDF Target Chip (Example: esp32) | -+----------------------------------------------------+----------------------------------------------------------------------------------------+ -| **idf.customAdapterTargetName** | Custom Target Name for ESP-IDF Debug Adapter | -+----------------------------------------------------+----------------------------------------------------------------------------------------+ | **idf.flashBaudRate** | Flash Baud rate | +----------------------------------------------------+----------------------------------------------------------------------------------------+ | **idf.monitorBaudRate** | Monitor Baud Rate (Empty by default to use SDKConfig CONFIG_ESP_CONSOLE_UART_BAUDRATE) | @@ -106,23 +97,17 @@ These settings are specific to the ESP32 Chip/Board +----------------------------------------------------+----------------------------------------------------------------------------------------+ | **openocd.jtag.command.force_unix_path_separator** | Forced to Use ``/`` as Path sep. for Win32 Based OS Instead of ``\\`` | +----------------------------------------------------+----------------------------------------------------------------------------------------+ -| **idf.listDfuDevices** | List of DFU Devices Connected to USB | -+----------------------------------------------------+----------------------------------------------------------------------------------------+ -| **idf.selectedDfuDevicePath** | Selected DFU Device Connected to USB | -+----------------------------------------------------+----------------------------------------------------------------------------------------+ | **idf.svdFilePath** | SVD File Absolute Path to Resolve Chip Debug Peripheral Tree view | +----------------------------------------------------+----------------------------------------------------------------------------------------+ This is how the extension uses them: -1. **idf.adapterTargetName** is used to select the chipset (esp32, esp32s2, esp32s3, esp32c3 and custom) on which to run the extension commands. -2. **idf.customAdapterTargetName** is used when **idf.adapterTargetName** is set to **custom**. -3. **idf.flashBaudRate** is the baud rate value used for the **ESP-IDF: Flash your Project** command and [ESP-IDF Debug](./DEBUGGING.md). -4. **idf.monitorBaudRate** is the ESP-IDF Monitor baud rate value and fallback from your project's skdconfig ``CONFIG_ESPTOOLPY_MONITOR_BAUD`` (idf.py monitor' baud rate). This value can also be override by setting the environment variable ``IDF_MONITOR_BAUD`` or ``MONITORBAUD`` in your system environment variables or this extension's **idf.customExtraVars** configuration setting. -5. **idf.openOcdConfigs** is used to store an string array of OpenOCD scripts directory relative path config files to use with OpenOCD server. (Example: ``["interface/ftdi/esp32_devkitj_v1.cfg", "board/esp32-wrover.cfg"]``). More information `OpenOCD JTAG Target configuration `_. -6. **idf.port** (or **idf.portWin** in Windows) is used as the serial port value for the extension commands. -7. **idf.openOcdDebugLevel**: Log level for OpenOCD Server output from 0 to 4. -8. **idf.openOcdLaunchArgs**: Launch arguments string array for OpenOCD. The resulting OpenOCD launch command looks like this: ``openocd -d${idf.openOcdDebugLevel} -f ${idf.openOcdConfigs} ${idf.openOcdLaunchArgs}``. +1. **idf.flashBaudRate** is the baud rate value used for the **ESP-IDF: Flash your Project** command and [ESP-IDF Debug](./DEBUGGING.md). +2. **idf.monitorBaudRate** is the ESP-IDF Monitor baud rate value and fallback from your project's skdconfig ``CONFIG_ESPTOOLPY_MONITOR_BAUD`` (idf.py monitor' baud rate). This value can also be override by setting the environment variable ``IDF_MONITOR_BAUD`` or ``MONITORBAUD`` in your system environment variables or this extension's **idf.customExtraVars** configuration setting. +3. **idf.openOcdConfigs** is used to store an string array of OpenOCD scripts directory relative path config files to use with OpenOCD server. (Example: ``["interface/ftdi/esp32_devkitj_v1.cfg", "board/esp32-wrover.cfg"]``). More information `OpenOCD JTAG Target configuration `_. +4. **idf.port** (or **idf.portWin** in Windows) is used as the serial port value for the extension commands. +5. **idf.openOcdDebugLevel**: Log level for OpenOCD Server output from 0 to 4. +6. **idf.openOcdLaunchArgs**: Launch arguments string array for OpenOCD. The resulting OpenOCD launch command looks like this: ``openocd -d${idf.openOcdDebugLevel} -f ${idf.openOcdConfigs} ${idf.openOcdLaunchArgs}``. .. note:: * When you use the command **ESP-IDF: Set Espressif Device Target** it will override **idf.adapterTargetName** with selected chip and **idf.openOcdConfigs** with its default OpenOCD Configuration Files. diff --git a/package.json b/package.json index 270760f16..74f386658 100644 --- a/package.json +++ b/package.json @@ -500,17 +500,11 @@ "description": "%param.port%", "scope": "resource" }, - "idf.pythonBinPath": { + "idf.pythonInstallPath": { "type": "string", "default": "python", "description": "%param.pythonBinPath%", - "scope": "resource" - }, - "idf.pythonBinPathWin": { - "type": "string", - "default": "python", - "description": "%param.pythonBinPath%", - "scope": "resource" + "scope": "application" }, "idf.flashBaudRate": { "type": "string", @@ -531,35 +525,10 @@ "board/esp32-wrover.cfg" ], "description": "%param.openOcdConfigFilesList%", - "scope": "resource" - }, - "idf.adapterTargetName": { - "type": "string", - "default": "esp32", - "enum": [ - "esp32", - "esp32c2", - "esp32c3", - "esp32c6", - "esp32h2", - "esp32p4", - "esp32s2", - "esp32s3", - "custom" - ], - "enumDescriptions": [ - "esp32", - "esp32 C2", - "esp32 C3", - "esp32 C6", - "esp32 H2", - "esp32 P4", - "esp32 S2", - "esp32 S3", - "custom" - ], - "description": "%param.adapterTargetName%", - "scope": "resource" + "scope": "resource", + "items": { + "type": "string" + } }, "idf.buildPath": { "type": "string", @@ -577,31 +546,28 @@ "type": "array", "default": [], "description": "%param.cmakeCompilerArgs%", - "scope": "resource" + "scope": "resource", + "items": { + "type": "string" + } }, "idf.sdkconfigDefaults": { "type": "array", "default": [], "description": "%param.sdkconfigDefaults%", - "scope": "resource" + "scope": "resource", + "items": { + "type": "string" + } }, "idf.ninjaArgs": { "type": "array", "default": [], "description": "%param.ninjaArgs%", - "scope": "resource" - }, - "idf.customAdapterTargetName": { - "type": "string", - "default": "", - "description": "%param.customAdapterTargetName%", - "scope": "resource" - }, - "idf.customExtraPaths": { - "type": "string", - "default": "", - "description": "%param.exportPaths%", - "scope": "resource" + "scope": "resource", + "items": { + "type": "string" + } }, "idf.customExtraVars": { "description": "%param.exportVars%", @@ -626,32 +592,36 @@ "description": "%param.showOnboardingOnInit%" }, "trace.poll_period": { - "type": "string", - "default": "1", + "type": "number", + "default": 1, "scope": "resource", "description": "%trace.poll_period.description%" }, "trace.trace_size": { - "type": "string", - "default": "2048", + "type": "number", + "default": 2048, "scope": "resource", "description": "%trace.trace_size.description%" }, "trace.stop_tmo": { - "type": "string", - "default": "5", + "type": "number", + "default": 5, "scope": "resource", "description": "%trace.stop_tmo.description%" }, "trace.wait4halt": { - "type": "string", - "default": "0", + "type": "number", + "default": 0, + "enum": [ + 0, + 1 + ], "scope": "resource", "description": "%trace.wait4halt.description%" }, "trace.skip_size": { - "type": "string", - "default": "0", + "type": "number", + "default": 0, "scope": "resource", "description": "%trace.skip_size.description%" }, @@ -772,14 +742,6 @@ "description": "%idf.flashType.description%", "scope": "resource" }, - "idf.selectedDfuDevicePath": { - "type": "string", - "default": "" - }, - "idf.listDfuDevices": { - "type": "array", - "default": [] - }, "openocd.tcl.host": { "type": "string", "description": "%openocd.tcl.host.description%", @@ -817,13 +779,13 @@ "idf.gitPath": { "type": "string", "description": "%param.gitPath.title%", - "scope": "resource", + "scope": "application", "default": "/usr/bin/git" }, "idf.gitPathWin": { "type": "string", "description": "%param.gitPath.title%", - "scope": "resource", + "scope": "application", "default": "${env:programfiles}\\Git\\cmd\\git.exe" }, "idf.enableUpdateSrcsToCMakeListsFile": { @@ -868,7 +830,10 @@ "type": "array", "default": [], "description": "%param.openOcdLaunchArgs%", - "scope": "resource" + "scope": "resource", + "items": { + "type": "string" + } }, "idf.preBuildTask": { "type": "string", @@ -958,7 +923,10 @@ "type": "array", "description": "%param.customTerminalExecutableArgs.title%", "scope": "resource", - "default": [] + "default": [], + "items": { + "type": "string" + } }, "idf.sdkconfigFilePath": { "type": "string", @@ -2149,7 +2117,7 @@ "genLocalizationBundle": "npx @vscode/l10n-dev export --outDir ./l10n ./src", "webpack": "webpack --mode production", "ui-test": "yarn compile && extest setup-and-run -y -i -u -l DEBUG -o testFiles/testWorkspace/.vscode/settings.json 'out/ui-test/*-test.js'", - "ci-test": "yarn compile && extest setup-and-run './out/ui-test/*-test.js' -u -s test-resources -l DEBUG" + "ci-test": "yarn compile && extest setup-and-run './out/ui-test/*-test.js' -u -s test-resources -o testFiles/testWorkspace/.vscode/settings.json -l DEBUG" }, "devDependencies": { "@babel/types": "^7.23.0", @@ -2207,7 +2175,7 @@ "typescript": "^5.2.2", "vite": "^4.5.3", "vsce": "^2.6.7", - "vscode-extension-tester": "^7.0.0", + "vscode-extension-tester": "7.3.2", "vue-hot-reload-api": "^2.3.2", "vue-loader": "^17.2.2", "vue-router": "^4.2.4", diff --git a/package.nls.es.json b/package.nls.es.json index 9540455c5..94be12966 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -120,7 +120,6 @@ "param.espMatterPath": "Ruta para localizar el framework ESP-Matter (ESP_MATTER_PATH)", "param.espMdfPath": "Ruta para localizar el framework ESP-MDF (MDF_PATH)", "param.espRainmakerPath": "Ruta para localizar el framework ESP-Rainmaker (RMAKER_PATH)", - "param.exportPaths": "Rutas que se agregarán a PATH", "param.exportVars": "Variables que se agregarán a las variables de entorno del sistema", "param.flashBaudRate": "Tasa de baudios de flasheo ESP-IDF", "param.gitPath.title": "Ruta del ejecutable de Git", @@ -183,6 +182,6 @@ "view.idf.idfSearchResults": "Resultados de búsqueda de documentación", "viewContainer.title": "ESP-IDF: Explorador", "viewWelcome.idfPartitionExplorer": "Muestra la lista de particiones de su dispositivo con la opción de flashear binarios (.bin) en la partición seleccionada.\n\nSeleccione el puerto serial de su dispositivo y haga clic en Actualizar tabla de particiones.", - "viewWelcome.idfSearchResults": "En cualquier editor de archivos abierto, seleccione un texto y haga clic con el botón derecho y seleccione ESP-IDF: Buscar en la documentación para obtener resultados coincidentes aquí.\n\nLos resultados se basan en su idioma actual de VS Code, versión de idf.espIdfPath (si no, la última) y idf.adapterTargetName.", + "viewWelcome.idfSearchResults": "En cualquier editor de archivos abierto, seleccione un texto y haga clic con el botón derecho y seleccione ESP-IDF: Buscar en la documentación para obtener resultados coincidentes aquí.\n\nLos resultados se basan en su idioma actual de VS Code, versión de idf.espIdfPath (si no, la última)", "viewWelcome.peripheralView": "Muestra los registros periféricos del archivo SVD definido en la configuración idf.svdFilePath durante la sesión de depuración activa" } \ No newline at end of file diff --git a/package.nls.json b/package.nls.json index 74b8162bd..7fae173d5 100644 --- a/package.nls.json +++ b/package.nls.json @@ -120,7 +120,6 @@ "param.espMatterPath": "Path to locate ESP-Matter framework (ESP_MATTER_PATH)", "param.espMdfPath": "Path to locate ESP-MDF framework (MDF_PATH)", "param.espRainmakerPath": "Path to locate ESP-Rainmaker framework (RMAKER_PATH)", - "param.exportPaths": "Paths to be appended to PATH", "param.exportVars": "Variables to be added to system environment variables", "param.flashBaudRate": "ESP-IDF Flash Baud rate", "param.gitPath.title": "Git executable path", @@ -183,6 +182,6 @@ "view.idf.idfSearchResults": "Documentation search results", "viewContainer.title": "ESP-IDF: Explorer", "viewWelcome.idfPartitionExplorer": "Show the partition list from your device with the option to flash binaries (.bin) to the selected partition.\n\nSelect your device serial port and click Refresh Partition Table.", - "viewWelcome.idfSearchResults": "On any opened file editor, select some text and right click and select ESP-IDF: Search in Documentation to get matching results here.\n\nResults are based on your current VS Code language, idf.espIdfPath version (latest otherwise) and idf.adapterTargetName.", + "viewWelcome.idfSearchResults": "On any opened file editor, select some text and right click and select ESP-IDF: Search in Documentation to get matching results here.\n\nResults are based on your current VS Code language, idf.espIdfPath version (latest otherwise)", "viewWelcome.peripheralView": "Show Peripherals Registers from SVD file defined in ESP-IDF Svd File Path (idf.svdFilePath) configuration setting during active debug session" } diff --git a/package.nls.pt.json b/package.nls.pt.json index ed3884bf6..31c533dcd 100644 --- a/package.nls.pt.json +++ b/package.nls.pt.json @@ -119,7 +119,6 @@ "param.espMatterPath": "Caminho para localizar a estrutura ESP-Matter (ESP_MATTER_PATH)", "param.espMdfPath": "Caminho para localizar a estrutura ESP-MDF (MDF_PATH)", "param.espRainmakerPath": "Caminho para localizar a estrutura ESP-Rainmaker (RMAKER_PATH)", - "param.exportPaths": "Caminhos a serem anexados ao PATH", "param.exportVars": "Variáveis ​​a serem adicionadas às variáveis ​​de ambiente do sistema", "param.flashBaudRate": "Taxa de transmissão de flash ESP-IDF", "param.gitPath.title": "Caminho executável do Git", diff --git a/package.nls.ru.json b/package.nls.ru.json index 054d8998d..31a6b692b 100644 --- a/package.nls.ru.json +++ b/package.nls.ru.json @@ -120,7 +120,6 @@ "param.espMatterPath": "Путь для поиска структуры ESP-Matter (ESP_MATTER_PATH)", "param.espMdfPath": "Путь для поиска платформы ESP-MDF (MDF_PATH)", "param.espRainmakerPath": "Путь к инфраструктуре ESP-Rainmaker (RMAKER_PATH)", - "param.exportPaths": "Пути для добавления в PATH", "param.exportVars": "Переменные, добавляемые в переменные системной среды", "param.flashBaudRate": "Скорость передачи флэш-памяти ESP-IDF", "param.gitPath.title": "Путь к исполняемому файлу Git", diff --git a/package.nls.zh-CN.json b/package.nls.zh-CN.json index 87fff46d6..b879bf5da 100644 --- a/package.nls.zh-CN.json +++ b/package.nls.zh-CN.json @@ -120,7 +120,6 @@ "param.espMatterPath": "定位 ESP-Matter 框架的路径 (ESP_MATTER_PATH)", "param.espMdfPath": "定位 ESP-MDF 框架的路径 (MDF_PATH)", "param.espRainmakerPath": "定位 ESP-Rainmaker 框架的路径 (RMAKER_PATH)", - "param.exportPaths": "要附加到 PATH 的路径", "param.exportVars": "要添加到系统环境变量的变量", "param.flashBaudRate": "ESP-IDF 烧录波特率", "param.gitPath.title": "Git 可执行文件路径", @@ -183,6 +182,6 @@ "view.idf.idfSearchResults": "文档搜索结果", "viewContainer.title": "ESP-IDF:资源管理器", "viewWelcome.idfPartitionExplorer": "显示您的设备的分区列表,选择要将二进制文件 (.bin) 烧录到的分区。\n\n选择您的设备串行端口,然后单击刷新分区表。", - "viewWelcome.idfSearchResults": "在任何已打开的文件编辑器中,选择一些文本,右键单击并选择 ESP-IDF:在文档中搜索以在此处获取匹配的结果。\n\n结果基于您当前的 VS Code 语言、idf.espIdfPath 版本 (否则为最新版本) 和 idf.adapterTargetName。", + "viewWelcome.idfSearchResults": "在任何已打开的文件编辑器中,选择一些文本,右键单击并选择 ESP-IDF:在文档中搜索以在此处获取匹配的结果。\n\n结果基于您当前的 VS Code 语言、idf.espIdfPath 版本 (否则为最新版本)", "viewWelcome.peripheralView": "显示在活动调试会话期间在 ESP-IDF Svd 文件路径 (idf.svdFilePath) 配置设置中定义的外围设备寄存器" } \ No newline at end of file diff --git a/src/build/buildCmd.ts b/src/build/buildCmd.ts index 5b7415d38..adc8af82b 100644 --- a/src/build/buildCmd.ts +++ b/src/build/buildCmd.ts @@ -23,7 +23,7 @@ import * as vscode from "vscode"; import { Logger } from "../logger/logger"; import { TaskManager } from "../taskManager"; import { join } from "path"; -import { updateIdfComponentsTree } from "../workspaceConfig"; +import { getIdfTargetFromSdkconfig, updateIdfComponentsTree } from "../workspaceConfig"; import { IdfSizeTask } from "../espIdf/size/idfSizeTask"; import { CustomTask, CustomTaskType } from "../customTasks/customTaskProvider"; import { readParameter } from "../idfConfiguration"; @@ -55,7 +55,7 @@ export async function buildCommand( buildTask.building(false); }); try { - customTask.addCustomTask(CustomTaskType.PreBuild); + await customTask.addCustomTask(CustomTaskType.PreBuild); await buildTask.build(); await TaskManager.runTasks(); const enableSizeTask = (await readParameter( @@ -66,7 +66,7 @@ export async function buildCommand( const sizeTask = new IdfSizeTask(workspace); await sizeTask.getSizeInfo(); } - customTask.addCustomTask(CustomTaskType.PostBuild); + await customTask.addCustomTask(CustomTaskType.PostBuild); await TaskManager.runTasks(); if (flashType === ESP.FlashType.DFU) { const buildPath = readParameter("idf.buildPath", workspace) as string; @@ -75,11 +75,8 @@ export async function buildCommand( "flasher_args.json file is missing from the build directory, can't proceed, please build properly!" ); } - const adapterTargetName = readParameter( - "idf.adapterTargetName", - workspace - ) as string; - if (adapterTargetName !== "esp32s2" && adapterTargetName !== "esp32s3") { + const adapterTargetName = await getIdfTargetFromSdkconfig(workspace); + if (adapterTargetName && adapterTargetName !== "esp32s2" && adapterTargetName !== "esp32s3") { return Logger.warnNotify( `The selected device target "${adapterTargetName}" is not compatible for DFU, as a result the DFU.bin was not created.` ); diff --git a/src/build/buildTask.ts b/src/build/buildTask.ts index 46bb62d80..c609296eb 100644 --- a/src/build/buildTask.ts +++ b/src/build/buildTask.ts @@ -29,16 +29,14 @@ import { } from "../utils"; import { TaskManager } from "../taskManager"; import { selectedDFUAdapterId } from "../flash/dfu"; +import { getVirtualEnvPythonPath } from "../pythonManager"; +import { getIdfTargetFromSdkconfig } from "../workspaceConfig"; export class BuildTask { public static isBuilding: boolean; private buildDirPath: string; private currentWorkspace: vscode.Uri; private idfPathDir: string; - private adapterTargetName: string; - private processOptions: vscode.ProcessExecutionOptions; - private modifiedEnv: { [key: string]: string }; - private pythonBinPath: string; constructor(workspaceUri: vscode.Uri) { this.currentWorkspace = workspaceUri; @@ -46,23 +44,10 @@ export class BuildTask { "idf.espIdfPath", workspaceUri ) as string; - this.adapterTargetName = idfConf.readParameter( - "idf.adapterTargetName", - workspaceUri - ) as string; this.buildDirPath = idfConf.readParameter( "idf.buildPath", workspaceUri ) as string; - this.modifiedEnv = appendIdfAndToolsToPath(workspaceUri); - this.processOptions = { - cwd: this.buildDirPath, - env: this.modifiedEnv, - }; - this.pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceUri - ) as string; } public building(flag: boolean) { @@ -93,15 +78,20 @@ export class BuildTask { } this.building(true); await ensureDir(this.buildDirPath); + const modifiedEnv = await appendIdfAndToolsToPath(this.currentWorkspace); + const processOptions = { + cwd: this.buildDirPath, + env: modifiedEnv, + }; const canAccessCMake = await isBinInPath( "cmake", this.currentWorkspace.fsPath, - this.modifiedEnv + modifiedEnv ); const canAccessNinja = await isBinInPath( "ninja", this.currentWorkspace.fsPath, - this.modifiedEnv + modifiedEnv ); const cmakeCachePath = join(this.buildDirPath, "CMakeCache.txt"); @@ -203,7 +193,7 @@ export class BuildTask { const compileExecution = new vscode.ProcessExecution( canAccessCMake, compilerArgs, - this.processOptions + processOptions ); const compilePresentationOptions = { reveal: showTaskOutput, @@ -234,7 +224,7 @@ export class BuildTask { const buildExecution = new vscode.ProcessExecution( ninjaCommand, buildArgs, - this.processOptions + processOptions ); const buildPresentationOptions = { reveal: showTaskOutput, @@ -254,7 +244,6 @@ export class BuildTask { public async buildDfu() { this.building(true); - const modifiedEnv = appendIdfAndToolsToPath(this.currentWorkspace); await ensureDir(this.buildDirPath); const currentWorkspaceFolder = vscode.workspace.workspaceFolders.find( @@ -265,6 +254,8 @@ export class BuildTask { "idf.notificationMode", this.currentWorkspace ) as string; + + const adapterTargetName = await getIdfTargetFromSdkconfig(this.currentWorkspace); const showTaskOutput = notificationMode === idfConf.NotificationMode.All || notificationMode === idfConf.NotificationMode.Output @@ -279,12 +270,18 @@ export class BuildTask { "--json", join(this.buildDirPath, "flasher_args.json"), "--pid", - selectedDFUAdapterId(this.adapterTargetName), + selectedDFUAdapterId(adapterTargetName).toString(), ]; + const pythonBinPath = await getVirtualEnvPythonPath(this.currentWorkspace); + const modifiedEnv = await appendIdfAndToolsToPath(this.currentWorkspace); + const processOptions = { + cwd: this.buildDirPath, + env: modifiedEnv, + }; const writeExecution = new vscode.ProcessExecution( - this.pythonBinPath, + pythonBinPath, args, - this.processOptions + processOptions ); const buildPresentationOptions = { reveal: showTaskOutput, diff --git a/src/cdtDebugAdapter/debugConfProvider.ts b/src/cdtDebugAdapter/debugConfProvider.ts index 53bf7f48b..40e9ec2b0 100644 --- a/src/cdtDebugAdapter/debugConfProvider.ts +++ b/src/cdtDebugAdapter/debugConfProvider.ts @@ -23,7 +23,7 @@ import { WorkspaceFolder, } from "vscode"; import { readParameter } from "../idfConfiguration"; -import { getProjectName } from "../workspaceConfig"; +import { getIdfTargetFromSdkconfig, getProjectName } from "../workspaceConfig"; import { join } from "path"; import { pathExists } from "fs-extra"; import { verifyAppBinary } from "../espIdf/debugAdapter/verifyApp"; @@ -73,10 +73,7 @@ export class CDTDebugConfigurationProvider } if (config.initCommands && Array.isArray(config.initCommands)) { - let idfTarget = readParameter("idf.adapterTargetName", folder); - if (idfTarget === "custom") { - idfTarget = readParameter("idf.customAdapterTargetName", folder); - } + let idfTarget = await getIdfTargetFromSdkconfig(folder.uri); type IdfTarget = | "esp32" | "esp32s2" diff --git a/src/changelog-viewer.ts b/src/changelog-viewer.ts index 33d62e98e..443ec21da 100644 --- a/src/changelog-viewer.ts +++ b/src/changelog-viewer.ts @@ -21,6 +21,7 @@ import { commands, ExtensionContext, Uri, window } from "vscode"; import { ESP } from "./config"; import { Logger } from "./logger/logger"; import { packageJson } from "./utils"; +import { NotificationMode, readParameter } from "./idfConfiguration"; export namespace ChangelogViewer { export async function showChangeLogAndUpdateVersion(cxt: ExtensionContext) { @@ -30,8 +31,12 @@ export namespace ChangelogViewer { ); //get current_version from package.json const currentVersion = packageJson.version; + const notificationMode = readParameter("idf.notificationMode") as string; + const enableNotification = + notificationMode === NotificationMode.All || + notificationMode === NotificationMode.Notifications; //check - if (currentVersion !== storedVersion) { + if (currentVersion !== storedVersion && enableNotification) { //new version update const msg = `It seems like the ESP-IDF Extension just got updated to version ${currentVersion}, checkout the changelog to see what new features got added`; const resp = await window.showInformationMessage( diff --git a/src/component-manager/utils.ts b/src/component-manager/utils.ts index 75a489954..606ba64dc 100644 --- a/src/component-manager/utils.ts +++ b/src/component-manager/utils.ts @@ -20,6 +20,7 @@ import { spawn, appendIdfAndToolsToPath } from "../utils"; import { CancellationToken, Uri, l10n } from "vscode"; import { readParameter } from "../idfConfiguration"; import { join } from "path"; +import { getVirtualEnvPythonPath } from "../pythonManager"; export async function addDependency( workspace: Uri, @@ -30,11 +31,8 @@ export async function addDependency( try { const idfPathDir = readParameter("idf.espIdfPath", workspace); const idfPy = join(idfPathDir, "tools", "idf.py"); - const modifiedEnv = appendIdfAndToolsToPath(workspace); - const pythonBinPath = readParameter( - "idf.pythonBinPath", - workspace - ) as string; + const modifiedEnv = await appendIdfAndToolsToPath(workspace); + const pythonBinPath = await getVirtualEnvPythonPath(workspace); const enableCCache = readParameter( "idf.enableCCache", workspace @@ -76,8 +74,8 @@ export async function createProject( try { const idfPathDir = readParameter("idf.espIdfPath"); const idfPy = join(idfPathDir, "tools", "idf.py"); - const modifiedEnv = appendIdfAndToolsToPath(workspace); - const pythonBinPath = readParameter("idf.pythonBinPath") as string; + const modifiedEnv = await appendIdfAndToolsToPath(workspace); + const pythonBinPath = await getVirtualEnvPythonPath(workspace); if ( !existsSync(idfPathDir) || diff --git a/src/coverage/configureProject.ts b/src/coverage/configureProject.ts index 5906b45ae..f7247f34e 100644 --- a/src/coverage/configureProject.ts +++ b/src/coverage/configureProject.ts @@ -28,33 +28,34 @@ import { CancellationToken, } from "vscode"; import { getDocsLocaleLang, getDocsVersion } from "../espIdf/documentation/getDocsVersion"; +import { getIdfTargetFromSdkconfig } from "../workspaceConfig"; export async function configureProjectWithGcov(workspacePath: Uri) { - const appTraceDestTrax = getConfigValueFromSDKConfig( + const appTraceDestTrax = await getConfigValueFromSDKConfig( "CONFIG_APPTRACE_DEST_TRAX", workspacePath ); - const appTraceEnable = getConfigValueFromSDKConfig( + const appTraceEnable = await getConfigValueFromSDKConfig( "CONFIG_APPTRACE_ENABLE", workspacePath ); - const appTraceLockEnable = getConfigValueFromSDKConfig( + const appTraceLockEnable = await getConfigValueFromSDKConfig( "CONFIG_APPTRACE_LOCK_ENABLE", workspacePath ); - const onPanicHostFlushTmo = getConfigValueFromSDKConfig( + const onPanicHostFlushTmo = await getConfigValueFromSDKConfig( "CONFIG_APPTRACE_ONPANIC_HOST_FLUSH_TMO", workspacePath ); - const postmortemFlushThresh = getConfigValueFromSDKConfig( + const postmortemFlushThresh = await getConfigValueFromSDKConfig( "CONFIG_APPTRACE_POSTMORTEM_FLUSH_THRESH", workspacePath ); - const appTracePendingDataSizeMax = getConfigValueFromSDKConfig( + const appTracePendingDataSizeMax = await getConfigValueFromSDKConfig( "CONFIG_APPTRACE_PENDING_DATA_SIZE_MAX", workspacePath ); - const appTraceGcovEnable = getConfigValueFromSDKConfig( + const appTraceGcovEnable = await getConfigValueFromSDKConfig( "CONFIG_APPTRACE_GCOV_ENABLE", workspacePath ); @@ -122,10 +123,7 @@ export async function openCoverageUrl(workspacePath: Uri) { const idfPath = readParameter("idf.espIdfPath", workspacePath) || process.env.IDF_PATH; let idfVersion = "v" + (await getEspIdfFromCMake(idfPath)); - let idfTarget = readParameter("idf.adapterTargetName", workspacePath); - if (idfTarget === "custom") { - idfTarget = readParameter("idf.customAdapterTargetName", workspacePath); - } + let idfTarget = await getIdfTargetFromSdkconfig(workspacePath); let docVersion = docsVersions.find( (docVer) => docVer.name === idfVersion ); diff --git a/src/coverage/gcdaPaths.ts b/src/coverage/gcdaPaths.ts index d749ce32a..2b27467c6 100644 --- a/src/coverage/gcdaPaths.ts +++ b/src/coverage/gcdaPaths.ts @@ -25,6 +25,7 @@ import { exec } from "child_process"; import { appendIdfAndToolsToPath } from "../utils"; import { IGcovOutput } from "./gcovData"; import { Logger } from "../logger/logger"; +import { getIdfTargetFromSdkconfig } from "../workspaceConfig"; export async function getGcdaPaths(workspaceFolder: Uri) { const gcdaPaths: Set = new Set(); @@ -52,7 +53,7 @@ export async function getGcdaPaths(workspaceFolder: Uri) { export async function getGcovData(workspaceFolder: Uri) { const idfTarget = - readParameter("idf.adapterTargetName", workspaceFolder) || "esp32"; + (await getIdfTargetFromSdkconfig(workspaceFolder)) || "esp32"; const gcovExecutable = getGcovExecutable(idfTarget); const gcdaPaths = await getGcdaPaths(workspaceFolder); @@ -62,8 +63,8 @@ export async function getGcovData(workspaceFolder: Uri) { command += ` "${path}"`; } - return new Promise((resolve, reject) => { - const modifiedEnv = appendIdfAndToolsToPath(workspaceFolder); + return new Promise(async (resolve, reject) => { + const modifiedEnv = await appendIdfAndToolsToPath(workspaceFolder); exec( command, { diff --git a/src/customTasks/customTaskProvider.ts b/src/customTasks/customTaskProvider.ts index 06570a367..74f52c030 100644 --- a/src/customTasks/customTaskProvider.ts +++ b/src/customTasks/customTaskProvider.ts @@ -54,7 +54,7 @@ export class CustomTask { return new ShellExecution(`${cmdString}`, options); } - public addCustomTask(taskType: CustomTaskType) { + public async addCustomTask(taskType: CustomTaskType) { let command: string; let taskName: string; switch (taskType) { @@ -83,7 +83,7 @@ export class CustomTask { if (!command) { return; } - const modifiedEnv = appendIdfAndToolsToPath(this.currentWorkspace); + const modifiedEnv = await appendIdfAndToolsToPath(this.currentWorkspace); const options: ShellExecutionOptions = { cwd: this.currentWorkspace.fsPath, env: modifiedEnv, @@ -163,7 +163,10 @@ export class CustomTask { ) as string; break; case CustomTaskType.Custom: - command = readParameter("idf.customTask", this.currentWorkspace) as string; + command = readParameter( + "idf.customTask", + this.currentWorkspace + ) as string; default: break; } diff --git a/src/efuse/index.ts b/src/efuse/index.ts index b560e1cef..83b6bdb05 100644 --- a/src/efuse/index.ts +++ b/src/efuse/index.ts @@ -23,6 +23,7 @@ import { tmpdir } from "os"; import { readJson, unlink } from "fs-extra"; import { Logger } from "../logger/logger"; import { Uri } from "vscode"; +import { getVirtualEnvPythonPath } from "../pythonManager"; export type ESPEFuseSummary = { [category: string]: [ @@ -46,19 +47,18 @@ export type ESPEFuseSummary = { }; export class ESPEFuseManager { - private pythonPath: string; private idfPath: string; constructor(private workspace: Uri) { - this.pythonPath = readParameter("idf.pythonBinPath", workspace) as string; this.idfPath = readParameter("idf.espIdfPath", workspace) || process.env.IDF_PATH; } async summary(): Promise { const tempFile = join(tmpdir(), "espefusejsondump.tmp"); + const pythonPath = await getVirtualEnvPythonPath(this.workspace); await spawn( - this.pythonPath, + pythonPath, [ this.toolPath, "-p", diff --git a/src/espBom/index.ts b/src/espBom/index.ts index cfdbb275f..70bc2c483 100644 --- a/src/espBom/index.ts +++ b/src/espBom/index.ts @@ -37,6 +37,7 @@ import { join } from "path"; import { pathExists, lstat, constants } from "fs-extra"; import { Logger } from "../logger/logger"; import { TaskManager } from "../taskManager"; +import { getVirtualEnvPythonPath } from "../pythonManager"; export async function createSBOM(workspaceUri: Uri) { try { @@ -51,7 +52,7 @@ export async function createSBOM(workspaceUri: Uri) { `${projectDescriptionJson} doesn't exists for ESP-IDF SBOM tasks.` ); } - const modifiedEnv = appendIdfAndToolsToPath(workspaceUri); + const modifiedEnv = await appendIdfAndToolsToPath(workspaceUri); const sbomFilePath = readParameter( "idf.sbomFilePath", workspaceUri @@ -141,8 +142,8 @@ export async function createSBOM(workspaceUri: Uri) { } export async function installEspSBOM(workspace: Uri) { - const pythonBinPath = readParameter("idf.pythonBinPath", workspace) as string; - const modifiedEnv = appendIdfAndToolsToPath(workspace); + const pythonBinPath = await getVirtualEnvPythonPath(workspace); + const modifiedEnv = await appendIdfAndToolsToPath(workspace); try { const showResult = await execChildProcess( pythonBinPath, diff --git a/src/espIdf/core-dump/esp-core-dump-py-tool.ts b/src/espIdf/core-dump/esp-core-dump-py-tool.ts index 5098d9028..04da1963c 100644 --- a/src/espIdf/core-dump/esp-core-dump-py-tool.ts +++ b/src/espIdf/core-dump/esp-core-dump-py-tool.ts @@ -49,7 +49,7 @@ export class ESPCoreDumpPyTool { public async generateCoreELFFile(options: CoreELFGenerationOptions) { let resp: Buffer; try { - const env = appendIdfAndToolsToPath(options.workspaceUri); + const env = await appendIdfAndToolsToPath(options.workspaceUri); resp = await spawn( options.pythonBinPath, [ diff --git a/src/espIdf/debugAdapter/checkPyReqs.ts b/src/espIdf/debugAdapter/checkPyReqs.ts index b3f92724f..99ca49c36 100644 --- a/src/espIdf/debugAdapter/checkPyReqs.ts +++ b/src/espIdf/debugAdapter/checkPyReqs.ts @@ -21,10 +21,11 @@ import { readParameter } from "../../idfConfiguration"; import { pathExists } from "fs-extra"; import { Uri } from "vscode"; import { extensionContext, startPythonReqsProcess } from "../../utils"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function checkDebugAdapterRequirements(workspaceFolder: Uri) { const idfPath = readParameter("idf.espIdfPath", workspaceFolder); - const pythonBinPath = readParameter("idf.pythonBinPath", workspaceFolder); + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); let requirementsPath = join( extensionContext.extensionPath, "esp_debug_adapter", diff --git a/src/espIdf/debugAdapter/debugAdapterManager.ts b/src/espIdf/debugAdapter/debugAdapterManager.ts index 9e07da021..0cd4668e0 100644 --- a/src/espIdf/debugAdapter/debugAdapterManager.ts +++ b/src/espIdf/debugAdapter/debugAdapterManager.ts @@ -33,6 +33,8 @@ import { EOL } from "os"; import { outputFile, constants } from "fs-extra"; import { createFlashModel } from "../../flash/flashModelBuilder"; import { OutputChannel } from "../../logger/outputChannel"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; +import { getIdfTargetFromSdkconfig } from "../../workspaceConfig"; export interface IDebugAdapterConfig { appOffset?: string; @@ -78,7 +80,7 @@ export class DebugAdapterManager extends EventEmitter { private constructor(context: vscode.ExtensionContext) { super(); - this.configureWithDefaultValues(context.extensionPath); + this.configureWithDefaultValues(context.extensionUri); OutputChannel.init(); this.chan = Buffer.alloc(0); } @@ -88,10 +90,7 @@ export class DebugAdapterManager extends EventEmitter { if (this.isRunning()) { return; } - const workspace = PreCheck.isWorkspaceFolderOpen() - ? vscode.workspace.workspaceFolders[0].uri.fsPath - : ""; - if (!isBinInPath("openocd", workspace, this.env)) { + if (!isBinInPath("openocd", this.currentWorkspace.fsPath, this.env)) { return reject( new Error("Invalid OpenOCD bin path or access is denied for the user") ); @@ -141,11 +140,7 @@ export class DebugAdapterManager extends EventEmitter { ); this.appOffset = model.app.address; } - - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - this.currentWorkspace - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(this.currentWorkspace); const toolchainPrefix = getToolchainToolName(this.target, ""); const adapterArgs = [ @@ -277,12 +272,12 @@ export class DebugAdapterManager extends EventEmitter { return this.adapter && !this.adapter.killed; } - private async configureWithDefaultValues(extensionPath: string) { + private async configureWithDefaultValues(extensionPath: vscode.Uri) { this.currentWorkspace = PreCheck.isWorkspaceFolderOpen() ? vscode.workspace.workspaceFolders[0].uri - : undefined; + : extensionPath; this.debugAdapterPath = path.join( - extensionPath, + extensionPath.fsPath, "esp_debug_adapter", "debug_adapter_main.py" ); @@ -290,20 +285,11 @@ export class DebugAdapterManager extends EventEmitter { this.isOocdDisabled = false; this.port = 43474; this.logLevel = 0; - let idfTarget = idfConf.readParameter( - "idf.adapterTargetName", - this.currentWorkspace - ); - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - this.currentWorkspace - ); - } + let idfTarget = await getIdfTargetFromSdkconfig(this.currentWorkspace); this.target = idfTarget; - this.env = appendIdfAndToolsToPath(this.currentWorkspace); + this.env = await appendIdfAndToolsToPath(this.currentWorkspace); this.env.PYTHONPATH = path.join( - extensionPath, + extensionPath.fsPath, "esp_debug_adapter", "debug_adapter" ); diff --git a/src/espIdf/debugAdapter/verifyApp.ts b/src/espIdf/debugAdapter/verifyApp.ts index c51d75dd7..b377193b4 100644 --- a/src/espIdf/debugAdapter/verifyApp.ts +++ b/src/espIdf/debugAdapter/verifyApp.ts @@ -23,16 +23,14 @@ import { readParameter } from "../../idfConfiguration"; import { Logger } from "../../logger/logger"; import { appendIdfAndToolsToPath, spawn } from "../../utils"; import { pathExists } from "fs-extra"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function verifyAppBinary(workspaceFolder: Uri) { - const modifiedEnv = appendIdfAndToolsToPath(workspaceFolder); + const modifiedEnv = await appendIdfAndToolsToPath(workspaceFolder); const serialPort = readParameter("idf.port", workspaceFolder); const flashBaudRate = readParameter("idf.flashBaudRate", workspaceFolder); const idfPath = readParameter("idf.espIdfPath", workspaceFolder); - const pythonBinPath = readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); const esptoolPath = join( idfPath, "components", diff --git a/src/espIdf/documentation/getSearchResults.ts b/src/espIdf/documentation/getSearchResults.ts index ae69d1c33..3fb5651e1 100644 --- a/src/espIdf/documentation/getSearchResults.ts +++ b/src/espIdf/documentation/getSearchResults.ts @@ -16,6 +16,7 @@ import { Uri } from "vscode"; import * as idfConf from "../../idfConfiguration"; import { getEspIdfFromCMake } from "../../utils"; import { getDocsBaseUrl, getDocsIndex, getDocsVersion } from "./getDocsVersion"; +import { getIdfTargetFromSdkconfig } from "../../workspaceConfig"; export class IDocResult { public name: string; @@ -47,18 +48,9 @@ export async function seachInEspDocs( idfConf.readParameter("idf.espIdfPath", workspaceFolder) || process.env.IDF_PATH; let idfVersion = "v" + (await getEspIdfFromCMake(idfPath)); - let idfTarget = idfConf.readParameter( - "idf.adapterTargetName", - workspaceFolder - ); - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - workspaceFolder - ); - } + let idfTarget = await getIdfTargetFromSdkconfig(workspaceFolder); let docVersion = docsVersions.find((docVer) => docVer.name === idfVersion); - let targetToUse: string; + let targetToUse: string = "esp32"; if (!docVersion) { docVersion = docsVersions.find((docVer) => docVer.name === "latest"); } diff --git a/src/espIdf/menuconfig/confServerProcess.ts b/src/espIdf/menuconfig/confServerProcess.ts index ffc63da2e..a3be54100 100644 --- a/src/espIdf/menuconfig/confServerProcess.ts +++ b/src/espIdf/menuconfig/confServerProcess.ts @@ -32,6 +32,7 @@ import { import { KconfigMenuLoader } from "./kconfigMenuLoader"; import { Menu, menuType } from "./Menu"; import { MenuConfigPanel } from "./MenuconfigPanel"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export class ConfserverProcess { public static async initWithProgress( @@ -69,12 +70,17 @@ export class ConfserverProcess { } public static async init(workspaceFolder: vscode.Uri, extensionPath: string) { - return new Promise((resolve) => { + return new Promise(async (resolve) => { + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); + const modifiedEnv = await appendIdfAndToolsToPath(workspaceFolder); if (!ConfserverProcess.instance) { ConfserverProcess.instance = new ConfserverProcess( workspaceFolder, - extensionPath + extensionPath, + pythonBinPath, + modifiedEnv ); + ConfserverProcess.instance.configFile = await getSDKConfigFilePath(workspaceFolder); } ConfserverProcess.instance.emitter.once("valuesLoaded", resolve); }); @@ -199,16 +205,13 @@ export class ConfserverProcess { progress.report({ increment: 10, message: "Deleting current values..." }); ConfserverProcess.instance.areValuesSaved = true; const currWorkspace = ConfserverProcess.instance.workspaceFolder; - delConfigFile(currWorkspace); + await delConfigFile(currWorkspace); const guiconfigEspPath = idfConf.readParameter("idf.espIdfPath", currWorkspace) || process.env.IDF_PATH; const idfPyPath = path.join(guiconfigEspPath, "tools", "idf.py"); - const modifiedEnv = appendIdfAndToolsToPath(currWorkspace); - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - currWorkspace - ) as string; + const modifiedEnv = await appendIdfAndToolsToPath(currWorkspace); + const pythonBinPath = await getVirtualEnvPythonPath(currWorkspace); const enableCCache = idfConf.readParameter( "idf.enableCCache", currWorkspace @@ -292,23 +295,20 @@ export class ConfserverProcess { private extensionPath: string; private kconfigsMenus: Menu[]; - constructor(workspaceFolder: vscode.Uri, extensionPath: string) { + constructor( + workspaceFolder: vscode.Uri, + extensionPath: string, + pythonBinPath: string, + modifiedEnv: { [key: string]: string } + ) { this.workspaceFolder = workspaceFolder; this.extensionPath = extensionPath; this.emitter = new EventEmitter(); this.espIdfPath = idfConf.readParameter("idf.espIdfPath", workspaceFolder).toString() || process.env.IDF_PATH; - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; - this.configFile = getSDKConfigFilePath(workspaceFolder); - - process.env.IDF_TARGET = "esp32"; - process.env.PYTHONUNBUFFERED = "0"; + modifiedEnv.PYTHONUNBUFFERED = "0"; const idfPath = path.join(this.espIdfPath, "tools", "idf.py"); - const modifiedEnv = appendIdfAndToolsToPath(this.workspaceFolder); const enableCCache = idfConf.readParameter( "idf.enableCCache", workspaceFolder diff --git a/src/espIdf/menuconfig/saveDefConfig.ts b/src/espIdf/menuconfig/saveDefConfig.ts index 43fdfd12e..ea16f7b18 100644 --- a/src/espIdf/menuconfig/saveDefConfig.ts +++ b/src/espIdf/menuconfig/saveDefConfig.ts @@ -33,6 +33,7 @@ import { Logger } from "../../logger/logger"; import { join } from "path"; import { appendIdfAndToolsToPath } from "../../utils"; import { pathExists } from "fs-extra"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function saveDefSdkconfig( workspaceFolder: Uri, @@ -91,16 +92,16 @@ export async function getSaveDefConfigExecution( wsFolder: Uri ) { const saveDefConfArgs = [join(idfPath, "tools", "idf.py"), "save-defconfig"]; - const modifiedEnv = appendIdfAndToolsToPath(wsFolder); + const modifiedEnv = await appendIdfAndToolsToPath(wsFolder); const options: ProcessExecutionOptions = { cwd: wsFolder.fsPath, env: modifiedEnv, }; - const pythonBinPath = readParameter("idf.pythonBinPath", wsFolder) as string; + const pythonBinPath = await getVirtualEnvPythonPath(wsFolder); const pythonBinExists = await pathExists(pythonBinPath); if (!pythonBinExists) { throw new Error( - `idf.pythonBinPath doesn't exist. Configure the extension first.` + `Virtual environment Python path doesn't exist. Configure the extension first.` ); } return new ProcessExecution(pythonBinPath, saveDefConfArgs, options); diff --git a/src/espIdf/monitor/checkWebsocketClient.ts b/src/espIdf/monitor/checkWebsocketClient.ts index 37dce24f4..1293af551 100644 --- a/src/espIdf/monitor/checkWebsocketClient.ts +++ b/src/espIdf/monitor/checkWebsocketClient.ts @@ -17,13 +17,13 @@ */ import { Uri } from "vscode"; -import { readParameter } from "../../idfConfiguration"; import { OutputChannel } from "../../logger/outputChannel"; import { appendIdfAndToolsToPath, execChildProcess } from "../../utils"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function installWebsocketClient(workspace: Uri) { - const pythonBinPath = readParameter("idf.pythonBinPath", workspace) as string; - const modifiedEnv = appendIdfAndToolsToPath(workspace); + const pythonBinPath = await getVirtualEnvPythonPath(workspace); + const modifiedEnv = await appendIdfAndToolsToPath(workspace); try { const showResult = await execChildProcess( pythonBinPath, diff --git a/src/espIdf/monitor/command.ts b/src/espIdf/monitor/command.ts index ec41c8920..41c72b392 100644 --- a/src/espIdf/monitor/command.ts +++ b/src/espIdf/monitor/command.ts @@ -23,9 +23,10 @@ import * as utils from "../../utils"; import { BuildTask } from "../../build/buildTask"; import { Logger } from "../../logger/logger"; import { R_OK } from "constants"; -import { getProjectName } from "../../workspaceConfig"; import { IDFMonitor, MonitorConfig } from "."; import { ESP } from "../../config"; +import { getIdfTargetFromSdkconfig, getProjectName } from "../../workspaceConfig"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function createNewIdfMonitor( workspaceFolder: Uri, @@ -54,19 +55,16 @@ export async function createNewIdfMonitor( new Error("NOT_SELECTED_PORT") ); } - const pythonBinPath = readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); if (!utils.canAccessFile(pythonBinPath, R_OK)) { Logger.errorNotify( "Python binary path is not defined", - new Error("idf.pythonBinPath is not defined") + new Error("Virtual environment Python path is not defined") ); } const idfPath = readParameter("idf.espIdfPath", workspaceFolder) as string; const idfVersion = await utils.getEspIdfFromCMake(idfPath); - let sdkMonitorBaudRate: string = utils.getMonitorBaudRate(workspaceFolder); + let sdkMonitorBaudRate: string = await utils.getMonitorBaudRate(workspaceFolder); const idfMonitorToolPath = join(idfPath, "tools", "idf_monitor.py"); if (!utils.canAccessFile(idfMonitorToolPath, R_OK)) { Logger.errorNotify( @@ -78,10 +76,7 @@ export async function createNewIdfMonitor( "idf.buildPath", workspaceFolder ) as string; - let idfTarget = readParameter("idf.adapterTargetName", workspaceFolder); - if (idfTarget === "custom") { - idfTarget = readParameter("idf.customAdapterTargetName", workspaceFolder); - } + let idfTarget = await getIdfTargetFromSdkconfig(workspaceFolder); const projectName = await getProjectName(buildDirPath); const elfFilePath = join(buildDirPath, `${projectName}.elf`); const toolchainPrefix = utils.getToolchainToolName(idfTarget, ""); diff --git a/src/espIdf/monitor/index.ts b/src/espIdf/monitor/index.ts index c483a6680..e803050c0 100644 --- a/src/espIdf/monitor/index.ts +++ b/src/espIdf/monitor/index.ts @@ -46,8 +46,8 @@ export class IDFMonitor { IDFMonitor.config = config; } - static start() { - const modifiedEnv = appendIdfAndToolsToPath(this.config.workspaceFolder); + static async start() { + const modifiedEnv = await appendIdfAndToolsToPath(this.config.workspaceFolder); if (!IDFMonitor.terminal) { IDFMonitor.terminal = window.createTerminal({ name: `ESP-IDF Monitor ${this.config.wsPort ? "(--ws enabled)" : ""}`, diff --git a/src/espIdf/nvs/partitionTable/panel.ts b/src/espIdf/nvs/partitionTable/panel.ts index 934bb47e2..8820cf5a3 100644 --- a/src/espIdf/nvs/partitionTable/panel.ts +++ b/src/espIdf/nvs/partitionTable/panel.ts @@ -22,6 +22,7 @@ import { Logger } from "../../../logger/logger"; import * as idfConf from "../../../idfConfiguration"; import { canAccessFile, execChildProcess } from "../../../utils"; import { OutputChannel } from "../../../logger/outputChannel"; +import { getVirtualEnvPythonPath } from "../../../pythonManager"; export class NVSPartitionTable { private static currentPanel: NVSPartitionTable; @@ -133,10 +134,8 @@ export class NVSPartitionTable { const idfPathDir = idfConf.readParameter("idf.espIdfPath", this.workspaceFolder) || process.env.IDF_PATH; - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - this.workspaceFolder - ) as string; + + const pythonBinPath = await getVirtualEnvPythonPath(this.workspaceFolder); const dirPath = dirname(this.filePath); const fileName = basename(this.filePath); const resultName = fileName.replace(".csv", ".bin"); @@ -150,7 +149,7 @@ export class NVSPartitionTable { if (!canAccessFile(pythonBinPath, constants.R_OK)) { Logger.errorNotify( "Python binary path is not defined", - new Error("idf.pythonBinPath is not defined") + new Error("Virtual environment Python path is not defined") ); } if (!canAccessFile(this.filePath, constants.R_OK)) { diff --git a/src/espIdf/openOcd/boardConfiguration.ts b/src/espIdf/openOcd/boardConfiguration.ts index 356244245..3f4c2396c 100644 --- a/src/espIdf/openOcd/boardConfiguration.ts +++ b/src/espIdf/openOcd/boardConfiguration.ts @@ -21,6 +21,7 @@ import { readJSON } from "fs-extra"; import { Logger } from "../../logger/logger"; import { Uri } from "vscode"; import { defaultBoards } from "./defaultBoards"; +import { IdfToolsManager } from "../../idfToolsManager"; export interface IdfBoard { name: string; @@ -29,15 +30,28 @@ export interface IdfBoard { configFiles: string[]; } -export function getOpenOcdScripts(workspace: Uri): string { - const customExtraVars = idfConf.readParameter( +export async function getOpenOcdScripts(workspace: Uri): Promise { + const idfPathDir = idfConf.readParameter( + "idf.espIdfPath", + workspace + ) as string; + const toolsPath = idfConf.readParameter("idf.toolsPath", workspace) as string; + const userExtraVars = idfConf.readParameter( "idf.customExtraVars", workspace ) as { [key: string]: string }; + const idfToolsManager = await IdfToolsManager.createIdfToolsManager( + idfPathDir + ); + const idfExtraVars = await idfToolsManager.exportVars( + join(toolsPath, "tools") + ); let openOcdScriptsPath: string; try { - openOcdScriptsPath = customExtraVars.hasOwnProperty("OPENOCD_SCRIPTS") - ? customExtraVars.OPENOCD_SCRIPTS + openOcdScriptsPath = idfExtraVars.hasOwnProperty("OPENOCD_SCRIPTS") + ? idfExtraVars.OPENOCD_SCRIPTS + : userExtraVars.hasOwnProperty("OPENOCD_SCRIPTS") + ? userExtraVars.OPENOCD_SCRIPTS : process.env.OPENOCD_SCRIPTS ? process.env.OPENOCD_SCRIPTS : undefined; diff --git a/src/espIdf/openOcd/openOcdManager.ts b/src/espIdf/openOcd/openOcdManager.ts index 42a778aac..a324529bc 100644 --- a/src/espIdf/openOcd/openOcdManager.ts +++ b/src/espIdf/openOcd/openOcdManager.ts @@ -55,7 +55,7 @@ export class OpenOCDManager extends EventEmitter { } public async version(): Promise { - const modifiedEnv = appendIdfAndToolsToPath(this.workspace); + const modifiedEnv = await appendIdfAndToolsToPath(this.workspace); if (!isBinInPath("openocd", this.workspace.fsPath, modifiedEnv)) { return ""; } @@ -151,7 +151,7 @@ export class OpenOCDManager extends EventEmitter { if (this.isRunning()) { return; } - const modifiedEnv = appendIdfAndToolsToPath(this.workspace); + const modifiedEnv = await appendIdfAndToolsToPath(this.workspace); if (!isBinInPath("openocd", this.workspace.fsPath, modifiedEnv)) { throw new Error( "Invalid OpenOCD bin path or access is denied for the user" diff --git a/src/espIdf/partition-table/partitionFlasher.ts b/src/espIdf/partition-table/partitionFlasher.ts index 03e27d6a0..99d09deaf 100644 --- a/src/espIdf/partition-table/partitionFlasher.ts +++ b/src/espIdf/partition-table/partitionFlasher.ts @@ -21,7 +21,7 @@ import { Progress, ProgressLocation, Uri, window } from "vscode"; import { NotificationMode, readParameter } from "../../idfConfiguration"; import { Logger } from "../../logger/logger"; import { appendIdfAndToolsToPath, spawn } from "../../utils"; -import { OutputChannel } from "../../logger/outputChannel"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function flashBinaryToPartition( offset: string, @@ -45,13 +45,10 @@ export async function flashBinaryToPartition( }, async (progress: Progress<{ message: string; increment: number }>) => { try { - const modifiedEnv = appendIdfAndToolsToPath(workspaceFolder); + const modifiedEnv = await appendIdfAndToolsToPath(workspaceFolder); const serialPort = readParameter("idf.port", workspaceFolder); const idfPath = readParameter("idf.espIdfPath", workspaceFolder); - const pythonBinPath = readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); const esptoolPath = join( idfPath, "components", diff --git a/src/espIdf/partition-table/tree.ts b/src/espIdf/partition-table/tree.ts index 6f7a53f10..9dd683813 100644 --- a/src/espIdf/partition-table/tree.ts +++ b/src/espIdf/partition-table/tree.ts @@ -39,6 +39,7 @@ import { spawn, } from "../../utils"; import { CSV2JSON } from "../../views/partition-table/util"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export class PartitionItem extends TreeItem { name: string; @@ -80,10 +81,10 @@ export class PartitionTreeDataProvider public async populatePartitionItems(workspace: Uri) { this.partitionItems = Array(0); try { - const modifiedEnv = appendIdfAndToolsToPath(workspace); + const modifiedEnv = await appendIdfAndToolsToPath(workspace); const serialPort = readParameter("idf.port", workspace) as string; const idfPath = readParameter("idf.espIdfPath", workspace); - const pythonBinPath = readParameter("idf.pythonBinPath", workspace) as string; + const pythonBinPath = await getVirtualEnvPythonPath(workspace); const partitionTableOffsetOption = await window.showQuickPick( [ { @@ -102,7 +103,7 @@ export class PartitionTreeDataProvider } let partitionTableOffset = ""; if (partitionTableOffsetOption.target.indexOf("sdkconfig") !== -1) { - partitionTableOffset = getConfigValueFromSDKConfig( + partitionTableOffset = await getConfigValueFromSDKConfig( "CONFIG_PARTITION_TABLE_OFFSET", workspace ); diff --git a/src/espIdf/reconfigure/task.ts b/src/espIdf/reconfigure/task.ts index a4485a73d..188415d2e 100644 --- a/src/espIdf/reconfigure/task.ts +++ b/src/espIdf/reconfigure/task.ts @@ -30,25 +30,21 @@ import { NotificationMode, readParameter } from "../../idfConfiguration"; import { appendIdfAndToolsToPath } from "../../utils"; import { join } from "path"; import { TaskManager } from "../../taskManager"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export class IdfReconfigureTask { private buildDirPath: string; private curWorkspace: Uri; private idfPathDir: string; - private pythonBinPath: string; constructor(workspace: Uri) { this.curWorkspace = workspace; this.idfPathDir = readParameter("idf.espIdfPath", workspace) as string; - this.pythonBinPath = readParameter( - "idf.pythonBinPath", - workspace - ) as string; this.buildDirPath = readParameter("idf.buildPath", workspace) as string; } public async reconfigure() { - const modifiedEnv = appendIdfAndToolsToPath(this.curWorkspace); + const modifiedEnv = await appendIdfAndToolsToPath(this.curWorkspace); const options: ProcessExecutionOptions = { cwd: this.curWorkspace.fsPath, env: modifiedEnv, @@ -101,8 +97,10 @@ export class IdfReconfigureTask { reconfigureArgs.push("reconfigure"); + const pythonBinPath = await getVirtualEnvPythonPath(this.curWorkspace); + const reconfigureExecution = new ProcessExecution( - this.pythonBinPath, + pythonBinPath, reconfigureArgs, options ); diff --git a/src/espIdf/serial/serialPort.ts b/src/espIdf/serial/serialPort.ts index 8d87c537f..222a56e60 100644 --- a/src/espIdf/serial/serialPort.ts +++ b/src/espIdf/serial/serialPort.ts @@ -24,7 +24,7 @@ import { spawn } from "../../utils"; import { SerialPortDetails } from "./serialPortDetails"; import { OutputChannel } from "../../logger/outputChannel"; import * as SerialPortLib from "serialport"; -import { ESP } from "../../config"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export class SerialPort { public static shared(): SerialPort { @@ -102,10 +102,8 @@ export class SerialPort { item.productId ); }); - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; + + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); const idfPath = idfConf.readParameter( "idf.espIdfPath", workspaceFolder diff --git a/src/espIdf/setTarget/getTargets.ts b/src/espIdf/setTarget/getTargets.ts index 4f996ed4d..3d6df2743 100644 --- a/src/espIdf/setTarget/getTargets.ts +++ b/src/espIdf/setTarget/getTargets.ts @@ -20,6 +20,7 @@ import { join } from "path"; import { Uri } from "vscode"; import { readParameter } from "../../idfConfiguration"; import { appendIdfAndToolsToPath, spawn } from "../../utils"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export interface IdfTarget { label: string; @@ -30,11 +31,8 @@ export interface IdfTarget { export async function getTargetsFromEspIdf(workspaceFolder: Uri) { const idfPathDir = readParameter("idf.espIdfPath", workspaceFolder); const idfPyPath = join(idfPathDir, "tools", "idf.py"); - const modifiedEnv = appendIdfAndToolsToPath(workspaceFolder); - const pythonBinPath = readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; + const modifiedEnv = await appendIdfAndToolsToPath(workspaceFolder); + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); const resultTargetArray: IdfTarget[] = []; const listTargetsResult = await spawn( @@ -83,10 +81,5 @@ export async function getTargetsFromEspIdf(workspaceFolder: Uri) { isPreview: true, } as IdfTarget); } - resultTargetArray.push({ - isPreview: false, - label: "Custom target", - target: "custom", - } as IdfTarget); return resultTargetArray; } diff --git a/src/espIdf/setTarget/index.ts b/src/espIdf/setTarget/index.ts index 99bb8eb1b..0306d5dfc 100644 --- a/src/espIdf/setTarget/index.ts +++ b/src/espIdf/setTarget/index.ts @@ -62,41 +62,7 @@ export async function setIdfTarget(placeHolderMsg: string, workspaceFolder: Work if (!selectedTarget) { return; } - if (selectedTarget.target === "custom") { - const currentValue = readParameter( - "idf.customAdapterTargetName", - workspaceFolder.uri - ) as string; - const customIdfTarget = await window.showInputBox({ - placeHolder: placeHolderMsg, - value: currentValue, - }); - if (!customIdfTarget) { - return; - } - await writeParameter( - "idf.adapterTargetName", - selectedTarget.target, - configurationTarget, - workspaceFolder.uri - ); - await writeParameter( - "idf.customAdapterTargetName", - customIdfTarget, - configurationTarget, - workspaceFolder.uri - ); - return Logger.infoNotify( - `IDF_TARGET has been set to custom. Remember to set the configuration files for OpenOCD` - ); - } - await writeParameter( - "idf.adapterTargetName", - selectedTarget.target, - configurationTarget, - workspaceFolder.uri - ); - const openOcdScriptsPath = getOpenOcdScripts(workspaceFolder.uri); + const openOcdScriptsPath = await getOpenOcdScripts(workspaceFolder.uri); const boards = await getBoards( openOcdScriptsPath, selectedTarget.target diff --git a/src/espIdf/setTarget/setTargetInIdf.ts b/src/espIdf/setTarget/setTargetInIdf.ts index 5c1a56a6d..c8b0d8c59 100644 --- a/src/espIdf/setTarget/setTargetInIdf.ts +++ b/src/espIdf/setTarget/setTargetInIdf.ts @@ -28,6 +28,7 @@ import { } from "../../utils"; import { ConfserverProcess } from "../menuconfig/confServerProcess"; import { IdfTarget } from "./getTargets"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function setTargetInIDF( workspaceFolder: WorkspaceFolder, @@ -42,7 +43,7 @@ export async function setTargetInIDF( workspaceFolder.uri ) as string; const idfPy = join(idfPathDir, "tools", "idf.py"); - const modifiedEnv = appendIdfAndToolsToPath(workspaceFolder.uri); + const modifiedEnv = await appendIdfAndToolsToPath(workspaceFolder.uri); modifiedEnv.IDF_TARGET = undefined; const enableCCache = readParameter( "idf.enableCCache", @@ -59,10 +60,7 @@ export async function setTargetInIDF( modifiedEnv.IDF_CCACHE_ENABLE = undefined; } setTargetArgs.push("set-target", selectedTarget.target); - const pythonBinPath = readParameter( - "idf.pythonBinPath", - workspaceFolder.uri - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder.uri); const setTargetResult = await spawn(pythonBinPath, setTargetArgs, { cwd: workspaceFolder.uri.fsPath, env: modifiedEnv, diff --git a/src/espIdf/size/idfSize.ts b/src/espIdf/size/idfSize.ts index b78ecdee9..a291433b9 100644 --- a/src/espIdf/size/idfSize.ts +++ b/src/espIdf/size/idfSize.ts @@ -2,13 +2,13 @@ * Project: ESP-IDF VSCode Extension * File Created: Friday, 21st June 2019 10:57:18 am * Copyright 2019 Espressif Systems (Shanghai) CO LTD - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -23,12 +23,13 @@ import { Logger } from "../../logger/logger"; import { fileExists, spawn } from "../../utils"; import { getProjectName } from "../../workspaceConfig"; import * as utils from "../../utils"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export class IDFSize { - private readonly workspaceRoot: vscode.Uri; + private readonly workspaceFolderUri: vscode.Uri; private isCanceled: boolean; constructor(workspaceRoot: vscode.Uri) { - this.workspaceRoot = workspaceRoot; + this.workspaceFolderUri = workspaceRoot; } public cancel() { this.isCanceled = true; @@ -55,7 +56,7 @@ export class IDFSize { let locMsg = vscode.l10n.t("Gathering Overview"); const espIdfPath = idfConf.readParameter( "idf.espIdfPath", - this.workspaceRoot + this.workspaceFolderUri ) as string; const version = await utils.getEspIdfFromCMake(espIdfPath); const formatArgs = @@ -96,7 +97,7 @@ export class IDFSize { private async mapFilePath() { const buildDirPath = idfConf.readParameter( "idf.buildPath", - this.workspaceRoot + this.workspaceFolderUri ) as string; const projectName = await getProjectName(buildDirPath); return path.join(buildDirPath, `${projectName}.map`); @@ -105,7 +106,7 @@ export class IDFSize { private idfPath(): string { const idfPathDir = idfConf.readParameter( "idf.espIdfPath", - this.workspaceRoot + this.workspaceFolderUri ); return path.join(idfPathDir, "tools"); } @@ -117,10 +118,9 @@ export class IDFSize { private async idfCommandInvoker(args: string[]) { const idfPath = this.idfPath(); try { - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - this.workspaceRoot - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath( + this.workspaceFolderUri + ); const buffOut = await spawn(pythonBinPath, args, { cwd: idfPath, }); diff --git a/src/espIdf/size/idfSizeTask.ts b/src/espIdf/size/idfSizeTask.ts index 9e6ef8cad..e2fb730cc 100644 --- a/src/espIdf/size/idfSizeTask.ts +++ b/src/espIdf/size/idfSizeTask.ts @@ -32,29 +32,18 @@ import { NotificationMode, readParameter } from "../../idfConfiguration"; import { TaskManager } from "../../taskManager"; import { appendIdfAndToolsToPath } from "../../utils"; import { getProjectName } from "../../workspaceConfig"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export class IdfSizeTask { private currentWorkspace: Uri; - private pythonBinPath: string; private idfSizePath: string; private buildDirPath: string; - private processOptions: ProcessExecutionOptions; - private modifiedEnv: { [key: string]: string }; constructor(workspaceUri: Uri) { this.currentWorkspace = workspaceUri; - this.pythonBinPath = readParameter( - "idf.pythonBinPath", - workspaceUri - ) as string; const idfPathDir = readParameter("idf.espIdfPath", workspaceUri) as string; this.idfSizePath = join(idfPathDir, "tools", "idf_size.py"); this.buildDirPath = readParameter("idf.buildPath", workspaceUri) as string; - this.modifiedEnv = appendIdfAndToolsToPath(this.currentWorkspace); - this.processOptions = { - cwd: this.buildDirPath, - env: this.modifiedEnv, - }; } private async mapFilePath() { @@ -64,11 +53,17 @@ export class IdfSizeTask { public async getSizeInfo() { await ensureDir(this.buildDirPath); - const pythonCommand = this.pythonBinPath; + const pythonCommand = await getVirtualEnvPythonPath(this.currentWorkspace);; const mapFilePath = await this.mapFilePath(); const args = [this.idfSizePath, mapFilePath]; - const sizeExecution = new ProcessExecution(pythonCommand, args, this.processOptions); + const modifiedEnv = await appendIdfAndToolsToPath(this.currentWorkspace); + const processOptions = { + cwd: this.buildDirPath, + env: modifiedEnv, + }; + + const sizeExecution = new ProcessExecution(pythonCommand, args, processOptions); const notificationMode = readParameter( "idf.notificationMode", this.currentWorkspace diff --git a/src/espIdf/tracing/appTraceManager.ts b/src/espIdf/tracing/appTraceManager.ts index cf8fb8253..d002de61b 100644 --- a/src/espIdf/tracing/appTraceManager.ts +++ b/src/espIdf/tracing/appTraceManager.ts @@ -81,7 +81,7 @@ export class AppTraceManager extends EventEmitter { "0 = Starts Immediately; else wait", "trace.wait4halt", (value: string): string => { - if (value.match(/^[0-9]*$/g)) { + if (value.match(/^[0-1]$/g)) { return ""; } return "Invalid wait4halt value, please enter only number"; @@ -109,7 +109,7 @@ export class AppTraceManager extends EventEmitter { validatorFunction: (value: string) => string, workspace: vscode.Uri ) { - const savedConf = idfConf.readParameter(paramName, workspace); + const savedConf = idfConf.readParameter(paramName, workspace) as string; const userInput = await vscode.window.showInputBox({ placeHolder: placeholder, value: savedConf, @@ -157,10 +157,10 @@ export class AppTraceManager extends EventEmitter { workspace ); this.workspaceFolder = workspace; - const traceSize = idfConf.readParameter("trace.trace_size", workspace); - const stopTmo = idfConf.readParameter("trace.stop_tmo", workspace); - const wait4halt = idfConf.readParameter("trace.wait4halt", workspace); - const skipSize = idfConf.readParameter("trace.skip_size", workspace); + const traceSize = idfConf.readParameter("trace.trace_size", workspace) as string; + const stopTmo = idfConf.readParameter("trace.stop_tmo", workspace) as string; + const wait4halt = idfConf.readParameter("trace.wait4halt", workspace) as string; + const skipSize = idfConf.readParameter("trace.skip_size", workspace) as string; const startTrackingHandler = this.sendCommandToTCLSession( [ "esp", diff --git a/src/espIdf/tracing/gdbHeapTraceManager.ts b/src/espIdf/tracing/gdbHeapTraceManager.ts index 8012976ca..1eda353bc 100644 --- a/src/espIdf/tracing/gdbHeapTraceManager.ts +++ b/src/espIdf/tracing/gdbHeapTraceManager.ts @@ -63,7 +63,7 @@ export class GdbHeapTraceManager { "/" )}/htrace_${new Date().getTime()}.svdat`; await this.createGdbinitFile(fileName, workspace.fsPath); - const modifiedEnv = appendIdfAndToolsToPath(workspace); + const modifiedEnv = await appendIdfAndToolsToPath(workspace); const idfTarget = modifiedEnv.IDF_TARGET || "esp32"; const gdbTool = getToolchainToolName(idfTarget, "gdb"); const isGdbToolInPath = await isBinInPath( diff --git a/src/espIdf/tracing/tools/abstractTracingToolManager.ts b/src/espIdf/tracing/tools/abstractTracingToolManager.ts index e87c2396e..bce8de76c 100644 --- a/src/espIdf/tracing/tools/abstractTracingToolManager.ts +++ b/src/espIdf/tracing/tools/abstractTracingToolManager.ts @@ -42,7 +42,7 @@ export abstract class AbstractTracingToolManager { args?: string[], option?: any ) { - const modifiedEnv = appendIdfAndToolsToPath(this.workspaceRoot); + const modifiedEnv = await appendIdfAndToolsToPath(this.workspaceRoot); option.env = option.env || modifiedEnv; return await spawn(command, args, option); } diff --git a/src/espIdf/tracing/tools/xtensa/abstractXtensaTools.ts b/src/espIdf/tracing/tools/xtensa/abstractXtensaTools.ts index ee235a128..be26da128 100644 --- a/src/espIdf/tracing/tools/xtensa/abstractXtensaTools.ts +++ b/src/espIdf/tracing/tools/xtensa/abstractXtensaTools.ts @@ -20,20 +20,20 @@ import * as vscode from "vscode"; import * as idfConf from "../../../../idfConfiguration"; import { Logger } from "../../../../logger/logger"; import { appendIdfAndToolsToPath, getToolchainToolName, spawn } from "../../../../utils"; +import { getIdfTargetFromSdkconfig } from "../../../../workspaceConfig"; export abstract class XtensaTools { protected readonly workspaceRoot: vscode.Uri; - protected readonly toolName: string; - constructor(workspaceRoot: vscode.Uri, toolName: string) { + constructor(workspaceRoot: vscode.Uri, private toolName: string) { this.workspaceRoot = workspaceRoot; - this.toolName = this.toolNameForTarget(toolName); } - + protected async call(args: string[]): Promise { - const env = appendIdfAndToolsToPath(this.workspaceRoot); + const env = await appendIdfAndToolsToPath(this.workspaceRoot); + const toolName = await this.toolNameForTarget(this.toolName); try { - return await spawn(this.toolName, args, { env }); + return await spawn(toolName, args, { env }); } catch (error) { Logger.errorNotify( `Make sure ${this.toolName} is set in the Path with proper permission`, @@ -42,17 +42,8 @@ export abstract class XtensaTools { } } - private toolNameForTarget(toolName: string): string { - let idfTarget = idfConf.readParameter( - "idf.adapterTargetName", - this.workspaceRoot - ); - if (idfTarget == "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - this.workspaceRoot - ); - } + private async toolNameForTarget(toolName: string) { + let idfTarget = await getIdfTargetFromSdkconfig(this.workspaceRoot); const toolNameResult = getToolchainToolName(idfTarget, toolName); return toolNameResult ? toolNameResult : `unknown-tracing-tool`; } diff --git a/src/espIdf/unitTest/configure.ts b/src/espIdf/unitTest/configure.ts index 89de77abb..ba713ef19 100644 --- a/src/espIdf/unitTest/configure.ts +++ b/src/espIdf/unitTest/configure.ts @@ -29,6 +29,7 @@ import { jtagFlashCommand } from "../../flash/jtagCmd"; import { flashCommand } from "../../flash/uartFlash"; import { OutputChannel } from "../../logger/outputChannel"; import { Logger } from "../../logger/logger"; +import { getVirtualEnvPythonPath } from "../../pythonManager"; export async function configurePyTestUnitApp( workspaceFolder: Uri, @@ -91,7 +92,7 @@ export async function updateTestComponents( export async function checkPytestRequirements(workspaceFolder: Uri) { const idfPath = readParameter("idf.espIdfPath", workspaceFolder); - const pythonBinPath = readParameter("idf.pythonBinPath", workspaceFolder); + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); let requirementsPath = join( idfPath, "tools", @@ -126,7 +127,7 @@ export async function installPyTestPackages( cancelToken?: CancellationToken ) { const idfPath = readParameter("idf.espIdfPath", workspaceFolder); - const pythonBinPath = readParameter("idf.pythonBinPath", workspaceFolder); + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); let requirementsPath = join( idfPath, "tools", diff --git a/src/espIdf/unitTest/testExecution.ts b/src/espIdf/unitTest/testExecution.ts index d559c0ce3..c77cbf88d 100644 --- a/src/espIdf/unitTest/testExecution.ts +++ b/src/espIdf/unitTest/testExecution.ts @@ -87,7 +87,7 @@ export async function runTaskForCommand( cancelToken.onCancellationRequested(() => { TaskManager.cancelTasks(); }); - const modifiedEnv = appendIdfAndToolsToPath(workspaceFolder); + const modifiedEnv = await appendIdfAndToolsToPath(workspaceFolder); const options: ShellExecutionOptions = { cwd: workspaceFolder.fsPath, diff --git a/src/espMatter/espMatterDownload.ts b/src/espMatter/espMatterDownload.ts index 01f04ed9d..112625891 100644 --- a/src/espMatter/espMatterDownload.ts +++ b/src/espMatter/espMatterDownload.ts @@ -38,7 +38,7 @@ import { Logger } from "../logger/logger"; import { TaskManager } from "../taskManager"; import { OutputChannel } from "../logger/outputChannel"; import { PackageProgress } from "../PackageProgress"; -import { installEspMatterPyReqs } from "../pythonManager"; +import { getVirtualEnvPythonPath, installEspMatterPyReqs } from "../pythonManager"; import { platform } from "os"; export class EspMatterCloning extends AbstractCloning { @@ -259,7 +259,7 @@ export async function installPythonReqs( workspace?: Uri ) { const espIdfPath = readParameter("idf.espIdfPath", workspace); - const pyPath = readParameter("idf.pythonBinPath", workspace); + const pythonBinPath = await getVirtualEnvPythonPath(workspace); const containerPath = process.platform === "win32" ? process.env.USERPROFILE : process.env.HOME; const confToolsPath = readParameter("idf.toolsPath", workspace); @@ -293,7 +293,7 @@ export async function installPythonReqs( espIdfPath, toolsPath, espMatterPath, - pyPath, + pythonBinPath, undefined, cancelToken ); diff --git a/src/extension.ts b/src/extension.ts index 72f730cf1..68b40979d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -78,6 +78,7 @@ import { SetupPanel } from "./setup/SetupPanel"; import { ChangelogViewer } from "./changelog-viewer"; import { getSetupInitialValues, ISetupInitArgs } from "./setup/setupInit"; import { + getVirtualEnvPythonPath, installEspMatterPyReqs, installExtensionPyReqs, } from "./pythonManager"; @@ -120,7 +121,6 @@ import { CustomTask, CustomTaskType } from "./customTasks/customTaskProvider"; import { TaskManager } from "./taskManager"; import { WelcomePanel } from "./welcome/panel"; import { getWelcomePageInitialValues } from "./welcome/welcomeInit"; -import { selectDfuDevice } from "./flash/dfu"; import { getEspMatter } from "./espMatter/espMatterDownload"; import { setIdfTarget } from "./espIdf/setTarget"; import { PeripheralTreeView } from "./espIdf/debugAdapter/peripheralTreeView"; @@ -417,11 +417,12 @@ export async function activate(context: vscode.ExtensionContext) { false, false ); - const updateGuiValues = (e: vscode.Uri) => { + const updateGuiValues = async (e: vscode.Uri) => { if (ConfserverProcess.exists() && !ConfserverProcess.isSavedByUI()) { ConfserverProcess.loadGuiConfigValues(); } ConfserverProcess.resetSavedByUI(); + await getIdfTargetFromSdkconfig(workspaceRoot, statusBarItems["target"]); }; const sdkCreateWatchDisposable = sdkconfigWatcher.onDidCreate( updateGuiValues @@ -620,10 +621,7 @@ export async function activate(context: vscode.ExtensionContext) { if (IDFMonitor.terminal) { IDFMonitor.terminal.sendText(ESP.CTRL_RBRACKET); } - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceRoot - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(workspaceRoot); const idfPathDir = idfConf.readParameter( "idf.espIdfPath", workspaceRoot @@ -863,7 +861,7 @@ export async function activate(context: vscode.ExtensionContext) { registerIDFCommand("espIdf.customTask", async () => { try { const customTask = new CustomTask(workspaceRoot); - customTask.addCustomTask(CustomTaskType.Custom); + await customTask.addCustomTask(CustomTaskType.Custom); await TaskManager.runTasks(); } catch (error) { const errMsg = @@ -1100,24 +1098,6 @@ export async function activate(context: vscode.ExtensionContext) { statusBarItems[statusItem] = undefined; } } - } else if (e.affectsConfiguration("idf.adapterTargetName")) { - let idfTarget = idfConf.readParameter( - "idf.adapterTargetName", - workspaceRoot - ) as string; - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - workspaceRoot - ) as string; - } - const debugAdapterConfig = { - target: idfTarget, - } as IDebugAdapterConfig; - debugAdapterManager.configureAdapter(debugAdapterConfig); - if (statusBarItems && statusBarItems["target"]) { - statusBarItems["target"].text = "$(chip) " + idfTarget; - } } else if (e.affectsConfiguration("idf.espIdfPath" + winFlag)) { ESP.URL.Docs.IDF_INDEX = undefined; } else if (e.affectsConfiguration("idf.qemuTcpPort")) { @@ -1129,24 +1109,6 @@ export async function activate(context: vscode.ExtensionContext) { statusBarItems["port"].text = "$(plug) " + idfConf.readParameter("idf.port", workspaceRoot); } - } else if (e.affectsConfiguration("idf.customAdapterTargetName")) { - let idfTarget = idfConf.readParameter( - "idf.adapterTargetName", - workspaceRoot - ) as string; - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - workspaceRoot - ) as string; - const debugAdapterConfig = { - target: idfTarget, - } as IDebugAdapterConfig; - debugAdapterManager.configureAdapter(debugAdapterConfig); - if (statusBarItems && statusBarItems["target"]) { - statusBarItems["target"].text = "$(chip) " + idfTarget; - } - } } else if (e.affectsConfiguration("idf.flashType")) { let flashType = idfConf.readParameter( "idf.flashType", @@ -1424,10 +1386,7 @@ export async function activate(context: vscode.ExtensionContext) { confToolsPath || process.env.IDF_TOOLS_PATH || path.join(containerPath, ".espressif"); - const pyPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceRoot - ) as string; + const pyPath = await getVirtualEnvPythonPath(workspaceRoot); progress.report({ message: vscode.l10n.t( `Installing ESP-IDF extension Python Requirements...` @@ -1502,10 +1461,7 @@ export async function activate(context: vscode.ExtensionContext) { "idf.espMatterPath", workspaceRoot ) as string; - const pyPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceRoot - ) as string; + const pyPath = await getVirtualEnvPythonPath(workspaceRoot); progress.report({ message: vscode.l10n.t( `Installing ESP-Matter Python Requirements...` @@ -2017,8 +1973,8 @@ export async function activate(context: vscode.ExtensionContext) { progress, workspaceRoot ); - if (!newProjectArgs || !newProjectArgs.targetList) { - throw new Error("Could not find ESP-IDF Targets"); + if (!newProjectArgs || !newProjectArgs.boards) { + throw new Error("Could not get ESP-IDF: New project arguments"); } NewProjectPanel.createOrShow(context.extensionPath, newProjectArgs); } catch (error) { @@ -2052,16 +2008,11 @@ export async function activate(context: vscode.ExtensionContext) { registerIDFCommand("espIdf.selectOpenOcdConfigFiles", async () => { try { - const openOcdScriptsPath = getOpenOcdScripts(workspaceRoot); - let idfTarget = idfConf.readParameter( - "idf.adapterTargetName", - workspaceRoot - ) as string; - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - workspaceRoot - ) as string; + const openOcdScriptsPath = await getOpenOcdScripts(workspaceRoot); + let idfTarget = await getIdfTargetFromSdkconfig(workspaceRoot); + if (!idfTarget) { + vscode.commands.executeCommand("espIdf.setTarget"); + return; } const boards = await getBoards(openOcdScriptsPath, idfTarget); const choices = boards.map((b) => { @@ -2107,11 +2058,6 @@ export async function activate(context: vscode.ExtensionContext) { selectedBoard.target.configFiles, target ); - await idfConf.writeParameter( - "idf.adapterTargetName", - selectedBoard.target.target, - target - ); Logger.infoNotify( vscode.l10n.t("OpenOCD Board configuration files are updated.") ); @@ -2123,8 +2069,8 @@ export async function activate(context: vscode.ExtensionContext) { } }); - registerIDFCommand("espIdf.getOpenOcdScriptValue", () => { - return getOpenOcdScripts(workspaceRoot); + registerIDFCommand("espIdf.getOpenOcdScriptValue", async () => { + return await getOpenOcdScripts(workspaceRoot); }); registerIDFCommand("espIdf.size", () => { @@ -2944,14 +2890,12 @@ export async function activate(context: vscode.ExtensionContext) { new Error("NOT_SELECTED_PORT") ); } - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceRoot - ) as string; + + const pythonBinPath = await getVirtualEnvPythonPath(workspaceRoot); if (!utils.canAccessFile(pythonBinPath, constants.R_OK)) { Logger.errorNotify( vscode.l10n.t("Python binary path is not defined"), - new Error("idf.pythonBinPath is not defined") + new Error("The Python Binary Path is not defined") ); } const idfPath = idfConf.readParameter( @@ -2974,15 +2918,10 @@ export async function activate(context: vscode.ExtensionContext) { "idf.buildPath", workspaceRoot ) as string; - let idfTarget = idfConf.readParameter( - "idf.adapterTargetName", - workspaceRoot - ); - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - workspaceRoot - ); + let idfTarget = await getIdfTargetFromSdkconfig(workspaceRoot); + if (!idfTarget) { + Logger.infoNotify("IDF_TARGET is not defined."); + return; } const toolchainPrefix = utils.getToolchainToolName(idfTarget, ""); const projectName = await getProjectName(buildDirPath); @@ -2990,7 +2929,7 @@ export async function activate(context: vscode.ExtensionContext) { const elfFilePath = path.join(buildDirPath, `${projectName}.elf`); const wsPort = idfConf.readParameter("idf.wssPort", workspaceRoot); const idfVersion = await utils.getEspIdfFromCMake(idfPath); - let sdkMonitorBaudRate: string = utils.getMonitorBaudRate( + let sdkMonitorBaudRate: string = await utils.getMonitorBaudRate( workspaceRoot ); const noReset = idfConf.readParameter( @@ -3189,7 +3128,9 @@ export async function activate(context: vscode.ExtensionContext) { if (!args) { // try to get the partition table name from sdkconfig and if not found create one try { - const sdkconfigFilePath = utils.getSDKConfigFilePath(workspaceRoot); + const sdkconfigFilePath = await utils.getSDKConfigFilePath( + workspaceRoot + ); const sdkconfigFileExists = await pathExists(sdkconfigFilePath); if (!sdkconfigFileExists) { const buildProject = await vscode.window.showInformationMessage( @@ -3203,7 +3144,7 @@ export async function activate(context: vscode.ExtensionContext) { } return; } - const isCustomPartitionTableEnabled = utils.getConfigValueFromSDKConfig( + const isCustomPartitionTableEnabled = await utils.getConfigValueFromSDKConfig( "CONFIG_PARTITION_TABLE_CUSTOM", workspaceRoot ); @@ -3236,7 +3177,7 @@ export async function activate(context: vscode.ExtensionContext) { } } - let partitionTableFilePath = utils.getConfigValueFromSDKConfig( + let partitionTableFilePath = await utils.getConfigValueFromSDKConfig( "CONFIG_PARTITION_TABLE_CUSTOM_FILENAME", workspaceRoot ); @@ -3328,10 +3269,7 @@ export async function activate(context: vscode.ExtensionContext) { }, async () => { try { - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceRoot - ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(workspaceRoot); const ninjaSummaryScript = path.join( context.extensionPath, "external", @@ -3721,8 +3659,15 @@ async function createCmdsStatusBarItems() { if (!enableStatusBar) { return {}; } + if (!workspaceRoot) { + workspaceRoot = + vscode.workspace.workspaceFolders && + vscode.workspace.workspaceFolders.length + ? vscode.workspace.workspaceFolders[0].uri + : undefined; + } const port = idfConf.readParameter("idf.port", workspaceRoot) as string; - let idfTarget = idfConf.readParameter("idf.adapterTargetName", workspaceRoot); + let idfTarget = await getIdfTargetFromSdkconfig(workspaceRoot); let flashType = idfConf.readParameter( "idf.flashType", workspaceRoot @@ -3730,12 +3675,6 @@ async function createCmdsStatusBarItems() { let projectConf = ESP.ProjectConfiguration.store.get( ESP.ProjectConfiguration.SELECTED_CONFIG ); - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - workspaceRoot - ); - } let currentIdfVersion = await getCurrentIdfSetup(workspaceRoot, false); const statusBarItems: { [key: string]: vscode.StatusBarItem } = {}; @@ -4074,13 +4013,6 @@ async function startFlashing( } return await jtagFlashCommand(workspaceRoot); } else { - const arrDfuDevices = idfConf.readParameter( - "idf.listDfuDevices", - workspaceRoot - ) as string[]; - if (flashType === ESP.FlashType.DFU && arrDfuDevices.length > 1) { - await selectDfuDevice(arrDfuDevices); - } const idfPathDir = idfConf.readParameter( "idf.espIdfPath", workspaceRoot @@ -4098,8 +4030,8 @@ async function startFlashing( } function createIdfTerminal() { - PreCheck.perform([webIdeCheck, openFolderCheck], () => { - const modifiedEnv = utils.appendIdfAndToolsToPath(workspaceRoot); + PreCheck.perform([webIdeCheck, openFolderCheck], async () => { + const modifiedEnv = await utils.appendIdfAndToolsToPath(workspaceRoot); const espIdfTerminal = vscode.window.createTerminal({ name: "ESP-IDF Terminal", env: modifiedEnv, diff --git a/src/flash/dfu.ts b/src/flash/dfu.ts index a6d37217d..b445b5878 100644 --- a/src/flash/dfu.ts +++ b/src/flash/dfu.ts @@ -15,8 +15,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import { readParameter, writeParameter } from "../idfConfiguration"; import * as vscode from "vscode"; import { appendIdfAndToolsToPath, execChildProcess } from "../utils"; import { OutputChannel } from "../logger/outputChannel"; @@ -32,8 +30,8 @@ function deviceLabel(selectedDevice: string) { } export async function getDfuList(workspaceUri: vscode.Uri) { - const modifiedEnv = appendIdfAndToolsToPath(workspaceUri); - return await execChildProcess( + const modifiedEnv = await appendIdfAndToolsToPath(workspaceUri); + const dfuListStr = await execChildProcess( "dfu-util", ["--list"], process.cwd(), @@ -44,19 +42,15 @@ export async function getDfuList(workspaceUri: vscode.Uri) { cwd: process.cwd(), } ); + const arrayDfuDevices = listAvailableDfuDevices(dfuListStr); + return arrayDfuDevices; } -export async function listAvailableDfuDevices(text) { - const target = readParameter("idf.saveScope"); +export function listAvailableDfuDevices(text: string) { const regex = new RegExp( /\[([0-9a-fA-F]{4}\:[0-9a-fA-F]{4}\]) ver=.+, devnum=[0-9]+, cfg=.+, intf=.+, path=".+", alt=.+, name=".+", serial=".+"/g ); const arrayDfuDevices = text.match(regex); - if (arrayDfuDevices) { - await writeParameter("idf.listDfuDevices", arrayDfuDevices, target); - } else { - await writeParameter("idf.listDfuDevices", [], target); - } return arrayDfuDevices; } @@ -65,19 +59,18 @@ export async function listAvailableDfuDevices(text) { * @param {string} chip - String to identify the chip (IDF_TARGET) * @returns {number} PID Number for DFU */ - export function selectedDFUAdapterId(chip: string): string { + export function selectedDFUAdapterId(chip: string): number { switch (chip) { case "esp32s2": - return "2"; + return 2; case "esp32s3": - return "9"; + return 9; default: - return "-1"; + return -1; } } export async function selectDfuDevice(arrDfuDevices: string[]) { - const target = readParameter("idf.saveScope"); let options = []; for (let i = 0; i < arrDfuDevices.length; i++) { options.push( @@ -97,13 +90,8 @@ export async function selectDfuDevice(arrDfuDevices: string[]) { if (selectedDfuDevice) { const regex = new RegExp(/path="[0-9.]+-[0-9.]+"/g); const pathValue = selectedDfuDevice.detail.match(regex)[0].slice(6, -1); - - await writeParameter( - "idf.selectedDfuDevicePath", - pathValue, - target - ); + return pathValue; } else { - await writeParameter("idf.selectedDfuDevicePath", "", target); + throw new Error("NO_DFU_DEVICE_SELECTED"); } } diff --git a/src/flash/flashCmd.ts b/src/flash/flashCmd.ts index 49a4d5a03..a624206c6 100644 --- a/src/flash/flashCmd.ts +++ b/src/flash/flashCmd.ts @@ -24,7 +24,7 @@ import { FlashTask } from "./flashTask"; import { BuildTask } from "../build/buildTask"; import { Logger } from "../logger/logger"; import { getProjectName } from "../workspaceConfig"; -import { getDfuList, listAvailableDfuDevices } from "./dfu"; +import { getDfuList } from "./dfu"; import { ESP } from "../config"; import { OutputChannel } from "../logger/outputChannel"; @@ -92,8 +92,7 @@ export async function verifyCanFlash( workspace ) as ESP.FlashType; if (selectedFlashType === ESP.FlashType.DFU) { - const data = await getDfuList(workspace); - const listDfu = await listAvailableDfuDevices(data); + const listDfu = await getDfuList(workspace); if (!listDfu) { const errStr = "No DFU capable USB device available found"; OutputChannel.show(); diff --git a/src/flash/flashTask.ts b/src/flash/flashTask.ts index 8d58f83fc..d6b529a3c 100644 --- a/src/flash/flashTask.ts +++ b/src/flash/flashTask.ts @@ -23,8 +23,9 @@ import * as idfConf from "../idfConfiguration"; import { FlashModel } from "./flashModel"; import { appendIdfAndToolsToPath, canAccessFile } from "../utils"; import { TaskManager } from "../taskManager"; -import { selectedDFUAdapterId } from "./dfu"; +import { getDfuList, selectDfuDevice, selectedDFUAdapterId } from "./dfu"; import { ESP } from "../config"; +import { getVirtualEnvPythonPath } from "../pythonManager"; export class FlashTask { public static isFlashing: boolean; @@ -34,7 +35,6 @@ export class FlashTask { private buildDirPath: string; private encryptPartitions: boolean; private idfPathDir: string; - private pythonBinPath: string; private modifiedEnv: { [key: string]: string }; private processOptions: vscode.ProcessExecutionOptions; @@ -42,7 +42,7 @@ export class FlashTask { workspaceUri: vscode.Uri, idfPath: string, model: FlashModel, - encryptPartitions: boolean, + encryptPartitions: boolean ) { this.currentWorkspace = workspaceUri; this.flashScriptPath = join( @@ -62,15 +62,6 @@ export class FlashTask { "idf.espIdfPath", this.currentWorkspace ) as string; - this.pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - this.currentWorkspace - ) as string; - this.modifiedEnv = appendIdfAndToolsToPath(workspaceUri); - this.processOptions = { - cwd: this.buildDirPath, - env: this.modifiedEnv, - }; } public flashing(flag: boolean) { @@ -102,6 +93,7 @@ export class FlashTask { "idf.notificationMode", this.currentWorkspace ) as string; + const pythonBinPath = await getVirtualEnvPythonPath(this.currentWorkspace); const currentWorkspaceFolder = vscode.workspace.workspaceFolders.find( (w) => w.uri === this.currentWorkspace ); @@ -111,12 +103,17 @@ export class FlashTask { ? vscode.TaskRevealKind.Always : vscode.TaskRevealKind.Silent; let flashExecution: vscode.ProcessExecution; + this.modifiedEnv = await appendIdfAndToolsToPath(this.currentWorkspace); + this.processOptions = { + cwd: this.buildDirPath, + env: this.modifiedEnv, + }; switch (flashType) { case "UART": - flashExecution = this._flashExecution(); + flashExecution = this._flashExecution(pythonBinPath); break; case "DFU": - flashExecution = this._dfuFlashing(); + flashExecution = await this._dfuFlashing(pythonBinPath); break; default: break; @@ -137,41 +134,41 @@ export class FlashTask { ); } - public _flashExecution() { + public _flashExecution(pythonBinPath: string) { this.flashing(true); const flasherArgs = this.getFlasherArgs(this.flashScriptPath); - return new vscode.ProcessExecution(this.pythonBinPath, flasherArgs, this.processOptions); + return new vscode.ProcessExecution( + pythonBinPath, + flasherArgs, + this.processOptions + ); } - public _dfuFlashing() { + public async _dfuFlashing(pythonBinPath: string) { this.flashing(true); - const selectedDfuPath = idfConf.readParameter( - "idf.selectedDfuDevicePath", - this.currentWorkspace - ); - const listDfuDevices = idfConf.readParameter( - "idf.listDfuDevices", + const listDfuDevices = (await getDfuList( this.currentWorkspace - ); - if (listDfuDevices.length > 1) { - const pythonCommand = this.pythonBinPath; + )) as string[]; + let cmd: string; + let args: string[] = []; + if (listDfuDevices.length > 0) { + const selectedDfuPath = await selectDfuDevice(listDfuDevices); + if (!selectDfuDevice) { + return; + } + cmd = pythonBinPath; const idfPy = path.join(this.idfPathDir, "tools", "idf.py"); - const args = [ - idfPy, - 'dfu-flash', - '--path', - selectedDfuPath + args = [idfPy, "dfu-flash", "--path", selectedDfuPath]; + } else { + cmd = "dfu-util"; + args = [ + "-d", + `303a:${selectedDFUAdapterId(this.model.chip).toString(16)}`, + "-D", + join(this.buildDirPath, "dfu.bin"), ]; - return new vscode.ProcessExecution(pythonCommand, args, this.processOptions); } - const dfuCommand = "dfu-util"; - const args = [ - "-d", - `303a:${Number(selectedDFUAdapterId(this.model.chip)).toString(16)}`, - "-D", - join(this.buildDirPath, "dfu.bin") - ]; - return new vscode.ProcessExecution(dfuCommand, args, this.processOptions); + return new vscode.ProcessExecution(cmd, args, this.processOptions); } public getFlasherArgs(toolPath: string, replacePathSep: boolean = false) { diff --git a/src/flash/jtagCmd.ts b/src/flash/jtagCmd.ts index 0eccad407..e63180e79 100644 --- a/src/flash/jtagCmd.ts +++ b/src/flash/jtagCmd.ts @@ -55,7 +55,7 @@ export async function jtagFlashCommand(workspace: Uri) { buildPath = buildPath.replace(/\\/g, "/"); } try { - customTask.addCustomTask(CustomTaskType.PreFlash); + await customTask.addCustomTask(CustomTaskType.PreFlash); await customTask.runTasks(CustomTaskType.PreFlash); await jtag.flash( "program_esp_bins", @@ -64,7 +64,7 @@ export async function jtagFlashCommand(workspace: Uri) { "verify", "reset" ); - customTask.addCustomTask(CustomTaskType.PostFlash); + await customTask.addCustomTask(CustomTaskType.PostFlash); await customTask.runTasks(CustomTaskType.PostFlash); const msg = "⚡️ Flashed Successfully (JTag)"; OutputChannel.appendLineAndShow(msg, "Flash"); diff --git a/src/flash/uartFlash.ts b/src/flash/uartFlash.ts index d145bd51d..3e0a43755 100644 --- a/src/flash/uartFlash.ts +++ b/src/flash/uartFlash.ts @@ -71,9 +71,9 @@ export async function flashCommand( cancelToken.onCancellationRequested(() => { FlashTask.isFlashing = false; }); - customTask.addCustomTask(CustomTaskType.PreFlash); + await customTask.addCustomTask(CustomTaskType.PreFlash); await flashTask.flash(flashType); - customTask.addCustomTask(CustomTaskType.PostFlash); + await customTask.addCustomTask(CustomTaskType.PostFlash); await TaskManager.runTasks(); if (!cancelToken.isCancellationRequested) { FlashTask.isFlashing = false; @@ -89,6 +89,11 @@ export async function flashCommand( return Logger.errorNotify(errStr, error); } FlashTask.isFlashing = false; + if (error.message === "NO_DFU_DEVICE_SELECTED") { + const errStr = "No DFU was selected"; + OutputChannel.appendLineAndShow(errStr, "Flash"); + return Logger.infoNotify(errStr); + } if (error.message === "Task ESP-IDF Flash exited with code 74") { const errStr = "No DFU capable USB device available found"; OutputChannel.appendLineAndShow(errStr, "Flash"); diff --git a/src/idfConfiguration.ts b/src/idfConfiguration.ts index 9cd68ab31..496399b99 100644 --- a/src/idfConfiguration.ts +++ b/src/idfConfiguration.ts @@ -69,8 +69,6 @@ export function parameterToProjectConfigMap(param: string) { return currentProjectConf.env; case "idf.flashBaudRate": return currentProjectConf.flashBaudRate; - case "idf.adapterTargetName": - return currentProjectConf.idfTarget; case "idf.monitorBaudRate": return currentProjectConf.monitorBaudRate; case "idf.openOcdDebugLevel": diff --git a/src/logger/logger.ts b/src/logger/logger.ts index d8d65c22c..13da13cc5 100644 --- a/src/logger/logger.ts +++ b/src/logger/logger.ts @@ -2,13 +2,13 @@ * Project: ESP-IDF VSCode Extension * File Created: Wednesday, 5th June 2019 2:03:34 pm * Copyright 2019 Espressif Systems (Shanghai) CO LTD - *  + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *  + * * http://www.apache.org/licenses/LICENSE-2.0 - *  + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. diff --git a/src/newProject/newProjectInit.ts b/src/newProject/newProjectInit.ts index de3d5cb0e..f5f0bfc8e 100644 --- a/src/newProject/newProjectInit.ts +++ b/src/newProject/newProjectInit.ts @@ -23,7 +23,6 @@ import { getOpenOcdScripts, IdfBoard, } from "../espIdf/openOcd/boardConfiguration"; -import { defaultBoards } from "../espIdf/openOcd/defaultBoards"; export interface INewProjectArgs { espIdfPath: string; @@ -35,7 +34,6 @@ export interface INewProjectArgs { boards: IdfBoard[]; components: IComponent[]; serialPortList: string[]; - targetList: IdfBoard[]; templates: { [key: string]: IExampleCategory }; workspaceFolder: Uri; } @@ -63,10 +61,9 @@ export async function getNewProjectArgs( serialPortList = ["no port"]; } progress.report({ increment: 10, message: "Loading ESP-IDF Boards list..." }); - const openOcdScriptsPath = getOpenOcdScripts(workspace); - const espBoards = await getBoards(openOcdScriptsPath); + const openOcdScriptsPath = await getOpenOcdScripts(workspace); + let espBoards = await getBoards(openOcdScriptsPath); progress.report({ increment: 10, message: "Loading ESP-IDF Target list..." }); - const targetList = defaultBoards; const espIdfPath = idfConf.readParameter( "idf.espIdfPath", workspace @@ -134,7 +131,6 @@ export async function getNewProjectArgs( espHomeKitSdkPath: homekitSdkExists ? espHomeKitSdkPath : undefined, espRainmakerPath: rainmakerExists ? espRainmakerPath : undefined, serialPortList, - targetList, templates, } as INewProjectArgs; } diff --git a/src/newProject/newProjectPanel.ts b/src/newProject/newProjectPanel.ts index dba8f68eb..b7bf8ee69 100644 --- a/src/newProject/newProjectPanel.ts +++ b/src/newProject/newProjectPanel.ts @@ -120,12 +120,11 @@ export class NewProjectPanel { message.containerFolder && message.port && message.projectName && - message.target && + message.openOcdConfigFiles && message.template ) { this.createProject( JSON.parse(message.components), - message.target, message.port, message.containerFolder, message.projectName, @@ -165,22 +164,19 @@ export class NewProjectPanel { case "requestInitValues": if ( newProjectArgs && - newProjectArgs.targetList && - newProjectArgs.targetList.length > 0 && newProjectArgs.serialPortList && newProjectArgs.serialPortList.length > 0 ) { const defConfigFiles = newProjectArgs.boards && newProjectArgs.boards.length > 0 ? newProjectArgs.boards[0].configFiles.join(",") - : newProjectArgs.targetList[0].configFiles.join(","); + : ["interface/ftdi/esp32_devkitj_v1.cfg", "target/esp32.cfg"].join(","); this.panel.webview.postMessage({ boards: newProjectArgs.boards, command: "initialLoad", containerDirectory: containerPath, projectName: "project-name", serialPortList: newProjectArgs.serialPortList, - targetList: newProjectArgs.targetList, openOcdConfigFiles: defConfigFiles, templates: newProjectArgs.templates, }); @@ -202,7 +198,6 @@ export class NewProjectPanel { private async createProject( components: IComponent[], - idfTarget: string, port: string, projectDirectory: string, projectName: string, @@ -288,7 +283,6 @@ export class NewProjectPanel { ); const settingsJson = await setCurrentSettingsInTemplate( settingsJsonPath, - idfTarget, port, openOcdConfigs, workspaceFolder diff --git a/src/newProject/utils.ts b/src/newProject/utils.ts index 68856b351..01225c676 100644 --- a/src/newProject/utils.ts +++ b/src/newProject/utils.ts @@ -22,7 +22,6 @@ import { Uri } from "vscode"; export async function setCurrentSettingsInTemplate( settingsJsonPath: string, - idfTarget: string, port: string, openOcdConfigs?: string, workspace?: Uri @@ -31,18 +30,8 @@ export async function setCurrentSettingsInTemplate( const idfPathDir = readParameter("idf.espIdfPath", workspace); const adfPathDir = readParameter("idf.espAdfPath", workspace); const mdfPathDir = readParameter("idf.espMdfPath", workspace); - const extraPaths = readParameter("idf.customExtraPaths", workspace); - const extraVars = readParameter("idf.customExtraVars", workspace); const toolsDir = readParameter("idf.toolsPath", workspace); - const pyPath = readParameter("idf.pythonBinPath", workspace); const isWin = process.platform === "win32" ? "Win" : ""; - settingsJson["idf.adapterTargetName"] = idfTarget || "esp32"; - if (extraPaths) { - settingsJson["idf.customExtraPaths"] = extraPaths; - } - if (extraVars) { - settingsJson["idf.customExtraVars"] = extraVars; - } if (idfPathDir) { settingsJson["idf.espIdfPath" + isWin] = idfPathDir; } @@ -61,9 +50,6 @@ export async function setCurrentSettingsInTemplate( if (port.indexOf("no port") === -1) { settingsJson["idf.port" + isWin] = port; } - if (pyPath) { - settingsJson["idf.pythonBinPath" + isWin] = pyPath; - } if (toolsDir) { settingsJson["idf.toolsPath" + isWin] = toolsDir; } diff --git a/src/pythonManager.ts b/src/pythonManager.ts index 0417989ac..3d9fe17ca 100644 --- a/src/pythonManager.ts +++ b/src/pythonManager.ts @@ -13,12 +13,19 @@ // limitations under the License. import { PyReqLog } from "./PyReqLog"; -import { CancellationToken, ExtensionContext } from "vscode"; +import { + CancellationToken, + ConfigurationTarget, + ExtensionContext, + Uri, +} from "vscode"; import * as utils from "./utils"; import { constants, pathExists } from "fs-extra"; import { Logger } from "./logger/logger"; import { delimiter, dirname, join, sep } from "path"; import { OutputChannel } from "./logger/outputChannel"; +import { readParameter, writeParameter } from "./idfConfiguration"; +import { ESP } from "./config"; export async function installEspIdfToolFromIdf( espDir: string, @@ -96,7 +103,11 @@ export async function installPythonEnvFromIdfTools( }); } - const pyEnvPath = await getPythonEnvPath(espDir, idfToolsDir, pythonBinPath); + await writeParameter( + "idf.pythonInstallPath", + pythonBinPath, + ConfigurationTarget.Global + ); await execProcessWithLog( pythonBinPath, @@ -106,11 +117,11 @@ export async function installPythonEnvFromIdfTools( cancelToken ); - const pyDir = - process.platform === "win32" - ? ["Scripts", "python.exe"] - : ["bin", "python"]; - const virtualEnvPython = join(pyEnvPath, ...pyDir); + const virtualEnvPython = await getPythonEnvPath( + espDir, + idfToolsDir, + pythonBinPath + ); return virtualEnvPython; } @@ -193,12 +204,11 @@ export async function installEspMatterPyReqs( Object.assign({}, process.env) ); const opts = { env: modifiedEnv, cwd: idfToolsDir }; - const pyEnvPath = await getPythonEnvPath(espDir, idfToolsDir, pythonBinPath); - const pyDir = - process.platform === "win32" - ? ["Scripts", "python.exe"] - : ["bin", "python"]; - const virtualEnvPython = join(pyEnvPath, ...pyDir); + const virtualEnvPython = await getPythonEnvPath( + espDir, + idfToolsDir, + pythonBinPath + ); const reqDoesNotExists = " doesn't exist. Make sure the path is correct."; const matterRequirements = join(espMatterDir, "requirements.txt"); @@ -255,6 +265,81 @@ export async function execProcessWithLog( } } +export async function getVirtualEnvPythonPath(workspaceFolder: Uri) { + let pythonPath = readParameter("idf.pythonInstallPath") as string; + let espIdfDir = readParameter("idf.espIdfPath", workspaceFolder) as string; + let idfToolsDir = readParameter("idf.toolsPath", workspaceFolder) as string; + const virtualEnvPython = await getPythonEnvPath( + espIdfDir, + idfToolsDir, + pythonPath + ); + return virtualEnvPython; +} + +export async function getPythonPath(workspaceFolder: Uri) { + let sysPythonBinPath = readParameter("idf.pythonInstallPath") as string; + const doesSysPythonBinPathExist = await pathExists(sysPythonBinPath); + if (!doesSysPythonBinPathExist) { + sysPythonBinPath = await getSystemPython(workspaceFolder); + if (sysPythonBinPath) { + await writeParameter( + "idf.pythonInstallPath", + sysPythonBinPath, + ConfigurationTarget.Global + ); + } + } + return sysPythonBinPath; +} + +export async function getSystemPython(workspaceFolder: Uri) { + let pythonBinPath = readParameter( + "idf.pythonBinPath", + workspaceFolder + ) as string; + const pythonBinPathExists = await pathExists(pythonBinPath); + if (pythonBinPathExists) { + const pythonCode = `import sys; print('{}'.format(sys.base_prefix))`; + const args = ["-c", pythonCode]; + const workingDir = + workspaceFolder && workspaceFolder.fsPath + ? workspaceFolder.fsPath + : __dirname; + const pythonVersion = ( + await utils.execChildProcess(pythonBinPath, args, workingDir) + ).replace(/(\n|\r|\r\n)/gm, ""); + const pyDir = + process.platform === "win32" ? ["python.exe"] : ["bin", "python3"]; + const sysPythonBinPath = join(pythonVersion, ...pyDir); + return sysPythonBinPath; + } + + if (process.platform !== "win32") { + const sysPythonBinPathList = await getUnixPythonList(__dirname); + return sysPythonBinPathList.length ? sysPythonBinPathList[0] : "python3"; + } else { + const idfPathDir = readParameter("idf.espIdfPath", workspaceFolder); + const idfToolsDir = readParameter( + "idf.toolsPath", + workspaceFolder + ) as string; + const idfVersion = await utils.getEspIdfFromCMake(idfPathDir); + const pythonVersionToUse = + idfVersion >= "5.0" + ? ESP.URL.IDF_EMBED_PYTHON.VERSION + : ESP.URL.OLD_IDF_EMBED_PYTHON.VERSION; + const idfPyDestPath = join( + idfToolsDir, + "tools", + "idf-python", + pythonVersionToUse, + "python.exe" + ); + return idfPyDestPath; + } +} + export async function getPythonEnvPath( espIdfDir: string, idfToolsDir: string, @@ -273,8 +358,13 @@ export async function getPythonEnvPath( : "x.x"; const resultVersion = `idf${espIdfVersion}_py${pythonVersion}_env`; const idfPyEnvPath = join(idfToolsDir, "python_env", resultVersion); + const pyDir = + process.platform === "win32" + ? ["Scripts", "python.exe"] + : ["bin", "python"]; + const fullIdfPyEnvPath = join(idfPyEnvPath, ...pyDir); - return idfPyEnvPath; + return fullIdfPyEnvPath; } export async function checkPythonExists(pythonBin: string, workingDir: string) { diff --git a/src/qemu/mergeFlashBin.ts b/src/qemu/mergeFlashBin.ts index 4498b073a..3f448ad28 100644 --- a/src/qemu/mergeFlashBin.ts +++ b/src/qemu/mergeFlashBin.ts @@ -36,6 +36,7 @@ import { NotificationMode, readParameter } from "../idfConfiguration"; import { Logger } from "../logger/logger"; import { TaskManager } from "../taskManager"; import { appendIdfAndToolsToPath, canAccessFile } from "../utils"; +import { getVirtualEnvPythonPath } from "../pythonManager"; export async function validateReqs( buildDirPath: string, @@ -152,17 +153,17 @@ export async function getMergeExecution( model: FlashModel, wsFolder: Uri ) { - const modifiedEnv = appendIdfAndToolsToPath(wsFolder); + const modifiedEnv = await appendIdfAndToolsToPath(wsFolder); const mergeArgs = getMergeArgs(esptoolPath, model); const options: ProcessExecutionOptions = { cwd: buildDir, env: modifiedEnv, }; - const pythonBinPath = readParameter("idf.pythonBinPath", wsFolder) as string; + const pythonBinPath = await getVirtualEnvPythonPath(wsFolder); const pythonBinExists = await pathExists(pythonBinPath); if (!pythonBinExists) { throw new Error( - `idf.pythonBinPath doesn't exist. Configure the extension first.` + `Virtual environment Python path doesn't exist. Configure the extension first.` ); } return new ProcessExecution(pythonBinPath, mergeArgs, options); diff --git a/src/qemu/qemuManager.ts b/src/qemu/qemuManager.ts index c023add84..69c66b0a6 100644 --- a/src/qemu/qemuManager.ts +++ b/src/qemu/qemuManager.ts @@ -161,7 +161,7 @@ export class QemuManager extends EventEmitter { if (this.isRunning()) { return; } - const modifiedEnv = appendIdfAndToolsToPath(this.options.workspaceFolder); + const modifiedEnv = await appendIdfAndToolsToPath(this.options.workspaceFolder); const isQemuBinInPath = await isBinInPath( this.execString, this.options.workspaceFolder.fsPath, diff --git a/src/setup/SetupPanel.ts b/src/setup/SetupPanel.ts index 9d88e1835..b08e897eb 100644 --- a/src/setup/SetupPanel.ts +++ b/src/setup/SetupPanel.ts @@ -246,9 +246,6 @@ export class SetupPanel { message.tools && message.saveScope ) { - const { exportedPaths, exportedVars } = this.getCustomSetupSettings( - JSON.parse(message.tools) - ); this.panel.webview.postMessage({ command: "updateEspIdfToolsStatus", status: StatusType.installed, @@ -257,8 +254,6 @@ export class SetupPanel { message.espIdfPath, message.toolsPath, message.pyBinPath, - exportedPaths, - exportedVars, setupArgs.gitPath, message.saveScope, context, @@ -472,9 +467,7 @@ export class SetupPanel { toolsPath, idfVersion, progress, - cancelToken, - saveScope, - workspaceFolderUri + cancelToken ); idfGitPath = embedPaths.idfGitPath; idfPythonPath = embedPaths.idfPythonPath; @@ -549,23 +542,6 @@ export class SetupPanel { }); } - private getCustomSetupSettings(toolsInfo: IEspIdfTool[]) { - const exportedPaths = toolsInfo - .reduce((prev, curr, i) => { - return prev + path.delimiter + curr.path; - }, "") - .slice(1); - const exportedVars: { [key: string]: string } = {}; - for (let tool of toolsInfo) { - for (let envKey of Object.keys(tool.env)) { - if (Object.keys(exportedVars).indexOf(envKey) === -1) { - exportedVars[envKey] = tool.env[envKey]; - } - } - } - return { exportedPaths, exportedVars }; - } - private async installEspIdfTools( idfPath: string, pyPath: string, @@ -610,9 +586,7 @@ export class SetupPanel { toolsPath, idfVersion, progress, - cancelToken, - saveScope, - workspaceFolderUri + cancelToken ); idfGitPath = embedPaths.idfGitPath; idfPythonPath = embedPaths.idfPythonPath; @@ -643,8 +617,6 @@ export class SetupPanel { idfPath: string, toolsPath: string, pyPath: string, - exportPaths: string, - exportVars: { [key: string]: string }, gitPath: string, saveScope: ConfigurationTarget, context: ExtensionContext, @@ -679,8 +651,6 @@ export class SetupPanel { idfPath, toolsPath, pyPath, - exportPaths, - exportVars, gitPath, saveScope, context, @@ -700,9 +670,7 @@ export class SetupPanel { toolsPath: string, idfVersion: string, progress: Progress<{ message: string; increment?: number }>, - cancelToken: CancellationToken, - saveScope: ConfigurationTarget, - workspaceFolderUri: Uri + cancelToken: CancellationToken ) { const idfGitPath = await installIdfGit(toolsPath, progress, cancelToken); SetupPanel.postMessage({ @@ -719,14 +687,15 @@ export class SetupPanel { command: "updateIdfPythonStatus", status: StatusType.installed, }); - const confTarget = idfConf.readParameter( - "idf.saveScope" - ) as ConfigurationTarget; + await idfConf.writeParameter( + "idf.pythonInstallPath", + idfPythonPath, + ConfigurationTarget.Global + ); await idfConf.writeParameter( "idf.gitPath", idfGitPath, - saveScope, - workspaceFolderUri + ConfigurationTarget.Global ); return { idfPythonPath, idfGitPath }; } diff --git a/src/setup/addOpenOcdRules.ts b/src/setup/addOpenOcdRules.ts index 8373e4727..f6303bbaf 100644 --- a/src/setup/addOpenOcdRules.ts +++ b/src/setup/addOpenOcdRules.ts @@ -26,7 +26,7 @@ export async function getOpenOcdRules(workspace: Uri) { if (process.platform !== "linux") { return; } - const modifiedEnv = appendIdfAndToolsToPath(workspace); + const modifiedEnv = await appendIdfAndToolsToPath(workspace); if (!modifiedEnv.OPENOCD_SCRIPTS) { throw new Error("OPENOCD_SCRIPTS environment variables is not defined"); } diff --git a/src/setup/espIdfJson.ts b/src/setup/espIdfJson.ts index 5f7d187c1..21abab127 100644 --- a/src/setup/espIdfJson.ts +++ b/src/setup/espIdfJson.ts @@ -2,13 +2,13 @@ * Project: ESP-IDF VSCode Extension * File Created: Monday, 31st May 2021 7:18:37 pm * Copyright 2021 Espressif Systems (Shanghai) CO LTD - *  + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *  + * * http://www.apache.org/licenses/LICENSE-2.0 - *  + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -19,7 +19,7 @@ import { createHash } from "crypto"; import { pathExists, readJson, writeJson } from "fs-extra"; import { join } from "path"; -import { isBinInPath } from "../utils"; +import { getEspIdfFromCMake, isBinInPath } from "../utils"; export interface EspIdfJson { $schema: string; @@ -77,17 +77,18 @@ export async function loadEspIdfJson(toolsPath: string) { export async function addIdfPath( idfPath: string, pythonPath: string, - version: string, toolsPath: string, gitPath: string ) { + const idfVersion = await getEspIdfFromCMake(idfPath); const newIdfPathObj: IdfInstalled = { - version, + version: idfVersion, python: pythonPath, path: idfPath, }; const idfId = getIdfMd5sum(idfPath); const espIdfObj = await loadEspIdfJson(toolsPath); + espIdfObj["idfInstalled"][idfId] = newIdfPathObj; espIdfObj["idfSelectedId"] = idfId; if (!espIdfObj.gitPath) { diff --git a/src/setup/existingIdfSetups.ts b/src/setup/existingIdfSetups.ts index a5d899b2a..45161317f 100644 --- a/src/setup/existingIdfSetups.ts +++ b/src/setup/existingIdfSetups.ts @@ -59,7 +59,6 @@ export async function clearPreviousIdfSetups() { export async function createIdfSetup( idfPath: string, toolsPath: string, - pythonPath: string, gitPath: string ) { const idfSetupId = getIdfMd5sum(idfPath); @@ -69,12 +68,12 @@ export async function createIdfSetup( idfPath, gitPath, toolsPath, - python: pythonPath, version: idfVersion, isValid: false, }; newIdfSetup.isValid = await checkIdfSetup(newIdfSetup); addIdfSetup(newIdfSetup); + return newIdfSetup; } export function addIdfSetup(newIdfSetup: IdfSetup) { @@ -99,7 +98,6 @@ export async function loadIdfSetupsFromEspIdfJson(toolsPath: string) { id: idfInstalledKey, idfPath: espIdfJson.idfInstalled[idfInstalledKey].path, gitPath: espIdfJson.gitPath, - python: espIdfJson.idfInstalled[idfInstalledKey].python, version: espIdfJson.idfInstalled[idfInstalledKey].version, toolsPath: toolsPath, isValid: false, diff --git a/src/setup/installPyReqs.ts b/src/setup/installPyReqs.ts index 7464a36fc..438414a67 100644 --- a/src/setup/installPyReqs.ts +++ b/src/setup/installPyReqs.ts @@ -86,10 +86,6 @@ export async function installPyReqs( const msg = "Python requirements has been installed"; OutputChannel.appendLine(msg); Logger.info(msg); - SetupPanel.postMessage({ - command: "load_python_bin_path", - pythonBinPath: virtualEnvPyBin, - }); return virtualEnvPyBin; } } diff --git a/src/setup/pyReqsInstallStep.ts b/src/setup/pyReqsInstallStep.ts index 444a9cb4d..cf489169c 100644 --- a/src/setup/pyReqsInstallStep.ts +++ b/src/setup/pyReqsInstallStep.ts @@ -17,16 +17,14 @@ import { StatusType } from "../views/setup/types"; import { installPyReqs } from "./installPyReqs"; import { SetupPanel } from "./SetupPanel"; import { saveSettings } from "./setupInit"; -import { getEspIdfFromCMake } from "../utils"; -import { addIdfPath } from "./espIdfJson"; import { getOpenOcdRules } from "./addOpenOcdRules"; +import { addIdfPath } from "./espIdfJson"; +import { writeParameter } from "../idfConfiguration"; export async function createPyReqs( idfPath: string, toolsPath: string, pyPath: string, - exportPaths: string, - exportVars: { [key: string]: string }, gitPath: string, saveScope: vscode.ConfigurationTarget, context: vscode.ExtensionContext, @@ -48,19 +46,20 @@ export async function createPyReqs( progress, cancelToken ); + await writeParameter( + "idf.pythonInstallPath", + pyPath, + vscode.ConfigurationTarget.Global + ); await saveSettings( idfPath, - virtualEnvPath, - exportPaths, - exportVars, toolsPath, gitPath, saveScope, workspaceFolderUri, espIdfStatusBar ); - let idfPathVersion = await getEspIdfFromCMake(idfPath); - await addIdfPath(idfPath, virtualEnvPath, idfPathVersion, toolsPath, gitPath); + await addIdfPath(idfPath, virtualEnvPath, toolsPath, gitPath); SetupPanel.postMessage({ command: "updatePyVEnvStatus", status: StatusType.installed, diff --git a/src/setup/setupInit.ts b/src/setup/setupInit.ts index cecb3e3b8..ff7014db6 100644 --- a/src/setup/setupInit.ts +++ b/src/setup/setupInit.ts @@ -22,7 +22,7 @@ import { pathExists } from "fs-extra"; import path from "path"; import { Logger } from "../logger/logger"; import * as idfConf from "../idfConfiguration"; -import { getPropertyFromJson, getSelectedIdfInstalled } from "./espIdfJson"; +import { addIdfPath, getPropertyFromJson, getSelectedIdfInstalled } from "./espIdfJson"; import { createIdfSetup, getPreviousIdfSetups, @@ -30,7 +30,7 @@ import { } from "./existingIdfSetups"; import { checkPyVenv } from "./setupValidation/pythonEnv"; import { packageJson } from "../utils"; -import { getCurrentIdfSetup } from "../versionSwitcher"; +import { getPythonPath, getVirtualEnvPythonPath } from "../pythonManager"; export interface ISetupInitArgs { downloadMirror: IdfMirror; @@ -214,30 +214,6 @@ export async function getSetupInitialValues( return setupInitArgs; } -function updateCustomExtraVars(workspaceFolder: Uri) { - const extraVars = idfConf.readParameter( - "idf.customExtraVars", - workspaceFolder - ); - if (typeof extraVars === "string") { - try { - const extraVarsObj = JSON.parse(extraVars); - const target = idfConf.readParameter("idf.saveScope"); - idfConf.writeParameter( - "idf.customExtraVars", - extraVarsObj, - target, - workspaceFolder - ); - } catch (err) { - const msg = err.message - ? err.message - : "Error changing idf.customExtraVars from string to object"; - Logger.errorNotify(msg, err); - } - } -} - export async function isCurrentInstallValid(workspaceFolder: Uri) { const containerPath = process.platform === "win32" ? process.env.USERPROFILE : process.env.HOME; @@ -249,18 +225,12 @@ export async function isCurrentInstallValid(workspaceFolder: Uri) { confToolsPath || process.env.IDF_TOOLS_PATH || path.join(containerPath, ".espressif"); - const extraPaths = idfConf.readParameter( - "idf.customExtraPaths", - workspaceFolder - ) as string; - const pythonBinPath = idfConf.readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; + + // FIX use system Python path as setting instead venv + // REMOVE this line after next release + const sysPythonBinPath = await getPythonPath(workspaceFolder); - // FIX idf.customExtraVars from string to object - // REMOVE THIS LINE after next release - updateCustomExtraVars(workspaceFolder); + const pythonBinPath = await getVirtualEnvPythonPath(workspaceFolder); let espIdfPath = idfConf.readParameter("idf.espIdfPath", workspaceFolder); let idfPathVersion = await utils.getEspIdfFromCMake(espIdfPath); @@ -293,6 +263,10 @@ export async function isCurrentInstallValid(workspaceFolder: Uri) { extraReqPaths.push("ninja"); } } + const extraPaths = await idfToolsManager.exportPathsInString( + path.join(toolsPath, "tools"), + extraReqPaths + ); const toolsInfo = await idfToolsManager.getRequiredToolsInfo( path.join(toolsPath, "tools"), extraPaths, @@ -314,9 +288,6 @@ export async function isCurrentInstallValid(workspaceFolder: Uri) { export async function saveSettings( espIdfPath: string, - pythonBinPath: string, - exportedPaths: string, - exportedVars: { [key: string]: string }, toolsPath: string, gitPath: string, saveScope: ConfigurationTarget, @@ -336,38 +307,18 @@ export async function saveSettings( confTarget, workspaceFolder ); - await idfConf.writeParameter( - "idf.pythonBinPath", - pythonBinPath, - confTarget, - workspaceFolder - ); await idfConf.writeParameter( "idf.toolsPath", toolsPath, confTarget, workspaceFolder ); - await idfConf.writeParameter( - "idf.customExtraPaths", - exportedPaths, - confTarget, - workspaceFolder - ); - await idfConf.writeParameter( - "idf.customExtraVars", - exportedVars, - confTarget, - workspaceFolder - ); await idfConf.writeParameter( "idf.gitPath", gitPath, - confTarget, - workspaceFolder + ConfigurationTarget.Global ); - let currentIdfVersion = await getCurrentIdfSetup(workspaceFolder); - espIdfStatusBar.text = "$(octoface) ESP-IDF v" + currentIdfVersion.version; - await createIdfSetup(espIdfPath, toolsPath, pythonBinPath, gitPath); + let currentIdfSetup = await createIdfSetup(espIdfPath, toolsPath, gitPath); + espIdfStatusBar.text = "$(octoface) ESP-IDF v" + currentIdfSetup.version; Logger.infoNotify("ESP-IDF has been configured"); } diff --git a/src/setup/setupValidation/espIdfSetup.ts b/src/setup/setupValidation/espIdfSetup.ts index db543a9e0..99b77670e 100644 --- a/src/setup/setupValidation/espIdfSetup.ts +++ b/src/setup/setupValidation/espIdfSetup.ts @@ -24,6 +24,8 @@ import { pathExists } from "fs-extra"; import { Logger } from "../../logger/logger"; import { checkPyVenv } from "./pythonEnv"; import { ConfigurationTarget, StatusBarItem, Uri } from "vscode"; +import { getPythonEnvPath, getVirtualEnvPythonPath } from "../../pythonManager"; +import { readParameter } from "../../idfConfiguration"; export async function useIdfSetupSettings( setupConf: IdfSetup, @@ -31,22 +33,8 @@ export async function useIdfSetupSettings( workspaceFolderUri: Uri, espIdfStatusBar: StatusBarItem ) { - const idfToolsManager = await IdfToolsManager.createIdfToolsManager( - setupConf.idfPath - ); - - const exportedToolsPaths = await idfToolsManager.exportPathsInString( - join(setupConf.toolsPath, "tools"), - ["cmake", "ninja"] - ); - const exportedVars = await idfToolsManager.exportVars( - join(setupConf.toolsPath, "tools") - ); await saveSettings( setupConf.idfPath, - setupConf.python, - exportedToolsPaths, - exportedVars, setupConf.toolsPath, setupConf.gitPath, saveScope, @@ -87,8 +75,10 @@ export async function checkIdfSetup(setupConf: IdfSetup, if (failedToolsResult.length) { return false; } + let sysPythonBinPath = readParameter("idf.pythonInstallPath") as string; + const virtualEnvPython = await getPythonEnvPath(setupConf.idfPath, setupConf.toolsPath, sysPythonBinPath); - const pyEnvReqs = checkPyVenv(setupConf.python, setupConf.idfPath); + const pyEnvReqs = checkPyVenv(virtualEnvPython, setupConf.idfPath); return pyEnvReqs; } catch (error) { const msg = diff --git a/src/setup/toolsDownloadStep.ts b/src/setup/toolsDownloadStep.ts index 0b05662c1..ef24ba77f 100644 --- a/src/setup/toolsDownloadStep.ts +++ b/src/setup/toolsDownloadStep.ts @@ -36,14 +36,6 @@ export async function downloadIdfTools( onReqPkgs?: string[], ) { const idfToolsManager = await IdfToolsManager.createIdfToolsManager(idfPath); - const exportPaths = await idfToolsManager.exportPathsInString( - path.join(toolsPath, "tools"), - onReqPkgs - ); - const exportVars = await idfToolsManager.exportVars( - path.join(toolsPath, "tools"), - onReqPkgs - ); const requiredTools = await idfToolsManager.getRequiredToolsInfo( toolsPath, undefined, @@ -70,8 +62,6 @@ export async function downloadIdfTools( idfPath, toolsPath, pyPath, - exportPaths, - exportVars, gitPath, saveScope, context, diff --git a/src/support/checkSpacesInSettings.ts b/src/support/checkSpacesInSettings.ts index 47f17c419..0109b4be1 100644 --- a/src/support/checkSpacesInSettings.ts +++ b/src/support/checkSpacesInSettings.ts @@ -40,6 +40,10 @@ export function checkSpacesInSettings(reportedResult: reportObj) { reportedResult.configurationSettings.espHomeKitPath ); + reportedResult.configurationSpacesValidation.sysPythonBinPath = checkSpacesInPath( + reportedResult.configurationSettings.sysPythonBinPath + ); + reportedResult.configurationSpacesValidation.pythonBinPath = checkSpacesInPath( reportedResult.configurationSettings.pythonBinPath ); diff --git a/src/support/configurationAccess.ts b/src/support/configurationAccess.ts index 2de83a07a..fe6382269 100644 --- a/src/support/configurationAccess.ts +++ b/src/support/configurationAccess.ts @@ -50,6 +50,10 @@ export async function getConfigurationAccess( reportedResult.configurationSettings.espHomeKitPath, constants.R_OK ); + reportedResult.configurationAccess.sysPythonBinPath = canAccessFile( + reportedResult.configurationSettings.sysPythonBinPath, + constants.X_OK + ); reportedResult.configurationAccess.pythonBinPath = canAccessFile( reportedResult.configurationSettings.pythonBinPath, constants.X_OK diff --git a/src/support/configurationSettings.ts b/src/support/configurationSettings.ts index 153d1b57c..e9bc5bed7 100644 --- a/src/support/configurationSettings.ts +++ b/src/support/configurationSettings.ts @@ -15,16 +15,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { join } from "path"; +import { IdfToolsManager } from "../idfToolsManager"; +import { getVirtualEnvPythonPath } from "../pythonManager"; import { reportObj } from "./types"; import { Uri, workspace } from "vscode"; -export function getConfigurationSettings( +export async function getConfigurationSettings( reportedResult: reportObj, scope?: Uri ) { const winFlag = process.platform === "win32" ? "Win" : ""; const conf = workspace.getConfiguration("", scope); reportedResult.workspaceFolder = scope ? scope.fsPath: "No workspace folder is open"; + const pythonVenvPath = await getVirtualEnvPythonPath(scope); + const idfToolsManager = await IdfToolsManager.createIdfToolsManager( + conf.get("idf.espIdfPath" + winFlag) + ); + const extraPaths = await idfToolsManager.exportPathsInString( + join(conf.get("idf.toolsPath" + winFlag), "tools"), + ["cmake", "ninja"] + ); + const customVars = await idfToolsManager.exportVars( + join(conf.get("idf.toolsPath" + winFlag), "tools") + ); reportedResult.configurationSettings = { espAdfPath: conf.get("idf.espAdfPath" + winFlag), espIdfPath: conf.get("idf.espIdfPath" + winFlag), @@ -33,10 +47,11 @@ export function getConfigurationSettings( espHomeKitPath: conf.get("idf.espHomeKitSdkPath" + winFlag), customTerminalExecutable: conf.get("idf.customTerminalExecutable"), customTerminalExecutableArgs: conf.get("idf.customTerminalExecutableArgs"), - customExtraPaths: conf.get("idf.customExtraPaths"), - customExtraVars: conf.get("idf.customExtraVars"), + customExtraPaths: extraPaths, + idfExtraVars: customVars, + userExtraVars: conf.get("idf.customExtraVars"), notificationMode: conf.get("idf.notificationMode"), - pythonBinPath: conf.get("idf.pythonBinPath" + winFlag), + pythonBinPath: pythonVenvPath, pythonPackages: [], serialPort: conf.get("idf.port" + winFlag), openOcdConfigs: @@ -45,6 +60,7 @@ export function getConfigurationSettings( toolsPath: conf.get("idf.toolsPath" + winFlag), systemEnvPath: process.platform === "win32" ? process.env.Path : process.env.PATH, + sysPythonBinPath: conf.get("idf.pythonInstallPath"), gitPath: conf.get("idf.gitPath" + winFlag) }; } diff --git a/src/support/index.ts b/src/support/index.ts index 3d9bc01a5..487cec995 100644 --- a/src/support/index.ts +++ b/src/support/index.ts @@ -42,7 +42,7 @@ export async function generateConfigurationReport( currentWorkspace: vscode.Uri, reportedResult: reportObj ) { - getConfigurationSettings(reportedResult, currentWorkspace); + await getConfigurationSettings(reportedResult, currentWorkspace); await checkSystemInfo(reportedResult); await getConfigurationAccess(reportedResult, context); checkSpacesInSettings(reportedResult); diff --git a/src/support/initReportObj.ts b/src/support/initReportObj.ts index 2fe99d83a..14f6c3291 100644 --- a/src/support/initReportObj.ts +++ b/src/support/initReportObj.ts @@ -27,13 +27,15 @@ export function initializeReportObject() { espMatterPath: undefined, espHomeKitPath: undefined, customExtraPaths: undefined, - customExtraVars: undefined, + idfExtraVars: undefined, + userExtraVars: undefined, customTerminalExecutable: undefined, customTerminalExecutableArgs: undefined, notificationMode: undefined, pythonBinPath: undefined, pythonPackages: undefined, serialPort: undefined, + sysPythonBinPath: undefined, openOcdConfigs: undefined, toolsPath: undefined, gitPath: undefined, @@ -50,6 +52,7 @@ export function initializeReportObject() { cmakeInEnv: undefined, ninjaInEnv: undefined, toolsPath: undefined, + sysPythonBinPath: undefined, }; report.configurationSpacesValidation = { customExtraPaths: undefined, @@ -62,6 +65,7 @@ export function initializeReportObject() { pythonBinPath: undefined, toolsPath: undefined, systemEnvPath: undefined, + sysPythonBinPath: undefined, }; report.debugAdapterRequirements = { output: undefined, diff --git a/src/support/types.ts b/src/support/types.ts index 3ba954234..2cb26172d 100644 --- a/src/support/types.ts +++ b/src/support/types.ts @@ -29,6 +29,7 @@ export class ConfigurationAccess { cmakeInEnv: boolean; ninjaInEnv: boolean; toolsPath: boolean; + sysPythonBinPath: boolean; } export class Configuration { systemEnvPath: string; @@ -38,11 +39,13 @@ export class Configuration { espMatterPath: string; espHomeKitPath: string; customExtraPaths: string; - customExtraVars: { [key: string]: string }; + idfExtraVars: { [key: string]: string }; + userExtraVars: { [key: string]: string }; notificationMode: string; pythonBinPath: string; pythonPackages: pyPkgVersion[]; serialPort: string; + sysPythonBinPath: string; openOcdConfigs: string[]; toolsPath: string; gitPath: string; @@ -59,6 +62,7 @@ export class ConfigurationSpacesValidation { espHomeKitPath: boolean; customExtraPaths: { [key: string]: boolean }; pythonBinPath: boolean; + sysPythonBinPath: boolean; toolsPath: boolean; gitPath: boolean; } diff --git a/src/support/writeReport.ts b/src/support/writeReport.ts index a0375c1c1..b566afcda 100644 --- a/src/support/writeReport.ts +++ b/src/support/writeReport.ts @@ -45,17 +45,27 @@ export async function writeTextReport( output += `ESP-MDF Path (idf.espMdfPath) ${reportedResult.configurationSettings.espMdfPath}${EOL}`; output += `ESP-Matter Path (idf.espMatterPath) ${reportedResult.configurationSettings.espMatterPath}${EOL}`; output += `ESP-HomeKit-SDK Path (idf.espHomeKitSdkPath) ${reportedResult.configurationSettings.espHomeKitPath}${EOL}`; - output += `Custom extra paths (idf.customExtraPaths) ${reportedResult.configurationSettings.customExtraPaths}${EOL}`; + output += `Custom extra paths ${reportedResult.configurationSettings.customExtraPaths}${EOL}`; if ( - reportedResult.configurationSettings.customExtraVars && - Object.keys(reportedResult.configurationSettings.customExtraVars) + reportedResult.configurationSettings.idfExtraVars && + Object.keys(reportedResult.configurationSettings.idfExtraVars) ) { - output += `Custom extra vars (idf.customExtraVars)${EOL}`; - for (let key in reportedResult.configurationSettings.customExtraVars) { - output += ` ${key}: ${reportedResult.configurationSettings.customExtraVars[key]}${EOL}`; + output += `ESP-IDF extra vars${EOL}`; + for (let key in reportedResult.configurationSettings.idfExtraVars) { + output += ` ${key}: ${reportedResult.configurationSettings.idfExtraVars[key]}${EOL}`; } } - output += `Virtual env Python Path (idf.pythonBinPath) ${reportedResult.configurationSettings.pythonBinPath}${EOL}`; + if ( + reportedResult.configurationSettings.userExtraVars && + Object.keys(reportedResult.configurationSettings.userExtraVars) + ) { + output += `User extra vars (idf.customExtraVars)${EOL}`; + for (let key in reportedResult.configurationSettings.userExtraVars) { + output += ` ${key}: ${reportedResult.configurationSettings.userExtraVars[key]}${EOL}`; + } + } + output += `System python Path (idf.pythonInstallPath) ${reportedResult.configurationSettings.sysPythonBinPath}${EOL}`; + output += `Virtual environment Python path (computed) ${reportedResult.configurationSettings.pythonBinPath}${EOL}`; output += `Serial port (idf.port) ${reportedResult.configurationSettings.serialPort}${EOL}`; output += `OpenOCD Configs (idf.openOcdConfigs) ${reportedResult.configurationSettings.openOcdConfigs}${EOL}`; output += `ESP-IDF Tools Path (idf.toolsPath) ${reportedResult.configurationSettings.toolsPath}${EOL}`; @@ -80,7 +90,8 @@ export async function writeTextReport( for (let key in reportedResult.configurationAccess.espIdfToolsPaths) { output += `Access to ${key}: ${reportedResult.configurationAccess.espIdfToolsPaths[key]}${EOL}`; } - output += `Access to Virtual env Python Path (idf.pythonBinPath) ${reportedResult.configurationAccess.pythonBinPath}${EOL}`; + output += `Access to System python Path (idf.pythonInstallPath) ${reportedResult.configurationAccess.sysPythonBinPath}${EOL}`; + output += `Access to Virtual environment Python path (computed) ${reportedResult.configurationAccess.pythonBinPath}${EOL}`; output += `Access to CMake in environment PATH ${reportedResult.configurationAccess.cmakeInEnv}${EOL}`; output += `Access to Ninja in environment PATH ${reportedResult.configurationAccess.ninjaInEnv}${EOL}`; output += `Access to ESP-IDF Tools Path (idf.toolsPath) ${reportedResult.configurationAccess.toolsPath}${EOL}`; @@ -96,7 +107,8 @@ export async function writeTextReport( .customExtraPaths) { output += `Spaces in ${key}: ${reportedResult.configurationSpacesValidation.customExtraPaths[key]}${EOL}`; } - output += `Spaces in Virtual env Python Path (idf.pythonBinPath) ${reportedResult.configurationSpacesValidation.pythonBinPath}${EOL}`; + output += `Spaces in System python Path (idf.pythonInstallPath) ${reportedResult.configurationSpacesValidation.sysPythonBinPath}${EOL}`; + output += `Spaces in Virtual environment Python path (computed) ${reportedResult.configurationSpacesValidation.pythonBinPath}${EOL}`; output += `Spaces in ESP-IDF Tools Path (idf.toolsPath) ${reportedResult.configurationSpacesValidation.toolsPath}${EOL}`; output += `----------------------------------------------------------- Executables Versions -----------------------------------------------------------${EOL}`; output += `Git version ${ @@ -161,7 +173,7 @@ export async function writeTextReport( } } } - output += `-------------------------------------------------- Python packages in idf.pythonBinPath ----------------------------------------------------${EOL}`; + output += `-------------------------------------------------- Python packages in Virtual environment Python path (computed) ---------------------------${EOL}`; if (reportedResult.configurationSettings.pythonPackages) { for (let pkg of reportedResult.configurationSettings.pythonPackages) { output += `${pkg.name} version: ${pkg.version}${EOL}`; diff --git a/src/test/doctor.test.ts b/src/test/doctor.test.ts index eecc458b0..3cc0d7539 100644 --- a/src/test/doctor.test.ts +++ b/src/test/doctor.test.ts @@ -143,7 +143,7 @@ suite("Doctor Command tests", () => { const settingsJsonObj = await readJSON( join(__dirname, "../../testFiles/testWorkspace/.vscode/settings.json") ); - getConfigurationSettings( + await getConfigurationSettings( reportObj, vscode.Uri.file(join(__dirname, "../../testFiles/testWorkspace")) ); @@ -159,22 +159,10 @@ suite("Doctor Command tests", () => { reportObj.configurationSettings.espMdfPath, settingsJsonObj["idf.espMdfPath"] ); - assert.equal( - reportObj.configurationSettings.customExtraPaths, - settingsJsonObj["idf.customExtraPaths"] - ); - assert.deepEqual( - reportObj.configurationSettings.customExtraVars, - settingsJsonObj["idf.customExtraVars"] - ); assert.equal( reportObj.configurationSettings.serialPort, settingsJsonObj["idf.port"] ); - assert.equal( - reportObj.configurationSettings.pythonBinPath, - settingsJsonObj["idf.pythonBinPath"] - ); assert.deepEqual( reportObj.configurationSettings.openOcdConfigs, settingsJsonObj["idf.openOcdConfigs"] @@ -291,17 +279,29 @@ suite("Doctor Command tests", () => { expectedOutput += `ESP-MDF Path (idf.espMdfPath) ${reportObj.configurationSettings.espMdfPath}${os.EOL}`; expectedOutput += `ESP-Matter Path (idf.espMatterPath) ${reportObj.configurationSettings.espMatterPath}${os.EOL}`; expectedOutput += `ESP-HomeKit-SDK Path (idf.espHomeKitSdkPath) ${reportObj.configurationSettings.espHomeKitPath}${os.EOL}`; - expectedOutput += `Custom extra paths (idf.customExtraPaths) ${customExtraPaths}${os.EOL}`; + expectedOutput += `Custom extra paths ${customExtraPaths}${os.EOL}`; if ( - reportObj.configurationSettings.customExtraVars && - Object.keys(reportObj.configurationSettings.customExtraVars) + reportObj.configurationSettings.idfExtraVars && + Object.keys(reportObj.configurationSettings.idfExtraVars) ) { - expectedOutput += `Custom extra vars (idf.customExtraVars)${os.EOL}`; - for (let key in reportObj.configurationSettings.customExtraVars) { - expectedOutput += ` ${key}: ${reportObj.configurationSettings.customExtraVars[key]}${os.EOL}`; + expectedOutput += `ESP-IDF extra vars${os.EOL}`; + for (let key in reportObj.configurationSettings.idfExtraVars) { + expectedOutput += ` ${key}: ${reportObj.configurationSettings.idfExtraVars[key]}${os.EOL}`; } } - expectedOutput += `Virtual env Python Path (idf.pythonBinPath) ${ + if ( + reportObj.configurationSettings.userExtraVars && + Object.keys(reportObj.configurationSettings.userExtraVars) + ) { + expectedOutput += `User extra vars (idf.customExtraVars)${os.EOL}`; + for (let key in reportObj.configurationSettings.userExtraVars) { + expectedOutput += ` ${key}: ${reportObj.configurationSettings.userExtraVars[key]}${os.EOL}`; + } + } + expectedOutput += `System python Path (idf.pythonInstallPath) ${ + reportObj.configurationSettings.sysPythonBinPath + }${os.EOL}`; + expectedOutput += `Virtual environment Python path (computed) ${ process.env.IDF_PYTHON_ENV_PATH + "/bin/python" }${os.EOL}`; expectedOutput += `Serial port (idf.port) ${reportObj.configurationSettings.serialPort}${os.EOL}`; diff --git a/src/test/project.test.ts b/src/test/project.test.ts index 60eb42be7..aad095684 100644 --- a/src/test/project.test.ts +++ b/src/test/project.test.ts @@ -51,7 +51,6 @@ suite("Project tests", () => { assert.equal(resultFiles.includes("c_cpp_properties.json"), true); assert.equal(resultFiles.includes("launch.json"), true); assert.equal(resultFiles.includes("settings.json"), true); - assert.equal(resultFiles.includes("tasks.json"), true); }); test("Launch.json content", async () => { @@ -107,7 +106,6 @@ suite("Project tests", () => { assert.equal(resultVscodeFiles.includes("c_cpp_properties.json"), true); assert.equal(resultVscodeFiles.includes("launch.json"), true); assert.equal(resultVscodeFiles.includes("settings.json"), true); - assert.equal(resultVscodeFiles.includes("tasks.json"), true); }); test("Update project name", async () => { @@ -151,7 +149,6 @@ suite("Project tests", () => { "interface/ftdi/esp32_devkitj_v1.cfg,target/esp32.cfg"; const newSettingsJson = await setCurrentSettingsInTemplate( settingsJsonPath, - "esp32", "no port", openOcdConfigs, Uri.file(projectPath) @@ -160,13 +157,7 @@ suite("Project tests", () => { assert.equal(newSettingsJson["idf.espAdfPath"], "/test/esp-adf"); assert.equal(newSettingsJson["idf.espMdfPath"], "/test/esp-mdf"); assert.equal(newSettingsJson["idf.toolsPath"], process.env.IDF_TOOLS_PATH); - assert.ok(newSettingsJson["idf.pythonBinPath"].indexOf("python") !== -1); assert.equal(newSettingsJson["idf.openOcdConfigs"], openOcdConfigs); - assert.equal(newSettingsJson["idf.customExtraPaths"], process.env.PATH); - assert.equal( - newSettingsJson["idf.customExtraVars"]["OPENOCD_SCRIPTS"], - "${env:OPENOCD_SCRIPTS}" - ); }); suiteTeardown(async () => { diff --git a/src/ui-test/configure-test.ts b/src/ui-test/configure-test.ts index b7c634582..16de06b53 100644 --- a/src/ui-test/configure-test.ts +++ b/src/ui-test/configure-test.ts @@ -212,7 +212,6 @@ describe("Configure extension", () => { const modifiedEnv: { [key: string]: string } = <{ [key: string]: string }>( Object.assign({}, process.env) ); - modifiedEnv.PATH = `${settingsJsonObj["idf.customExtraPaths"]}${delimiter}${modifiedEnv.PATH}`; // openOCD-esp32 const openOCDPath = await isBinInPath("openocd", __dirname, modifiedEnv); const openOcdTool = await view.findWebElement(By.id("openocd-esp32")); diff --git a/src/utils.ts b/src/utils.ts index 7cf98b56c..bd0edf8d4 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -36,10 +36,12 @@ import * as vscode from "vscode"; import { IdfComponent } from "./idfComponent"; import * as idfConf from "./idfConfiguration"; import { Logger } from "./logger/logger"; -import { getProjectName } from "./workspaceConfig"; +import { getIdfTargetFromSdkconfig, getProjectName } from "./workspaceConfig"; import { OutputChannel } from "./logger/outputChannel"; import { ESP } from "./config"; import * as sanitizedHtml from "sanitize-html"; +import { getPythonPath, getVirtualEnvPythonPath } from "./pythonManager"; +import { IdfToolsManager } from "./idfToolsManager"; const currentFolderMsg = vscode.l10n.t("ESP-IDF: Current Project"); @@ -248,7 +250,7 @@ export async function setCCppPropertiesJsonCompilerPath( if (!doesPathExists) { return; } - const modifiedEnv = appendIdfAndToolsToPath(curWorkspaceFsPath); + const modifiedEnv = await appendIdfAndToolsToPath(curWorkspaceFsPath); const idfTarget = modifiedEnv.IDF_TARGET || "esp32"; const gccTool = getToolchainToolName(idfTarget, "gcc"); const compilerAbsolutePath = await isBinInPath( @@ -282,13 +284,13 @@ export async function getToolchainPath( workspaceUri: vscode.Uri, tool: string = "gcc" ) { - const modifiedEnv = appendIdfAndToolsToPath(workspaceUri); + const modifiedEnv = await appendIdfAndToolsToPath(workspaceUri); const idfTarget = modifiedEnv.IDF_TARGET || "esp32"; const gccTool = getToolchainToolName(idfTarget, tool); try { return await isBinInPath(gccTool, workspaceUri.fsPath, modifiedEnv); } catch (error) { - Logger.errorNotify(`${tool} is not found in idf.customExtraPaths`, error); + Logger.errorNotify(`${tool} is not found in idf.toolsPath`, error); return; } } @@ -364,7 +366,7 @@ export function getVariableFromCMakeLists(workspacePath: string, key: string) { return match ? match[1] : ""; } -export function getSDKConfigFilePath(workspacePath: vscode.Uri) { +export async function getSDKConfigFilePath(workspacePath: vscode.Uri) { let sdkconfigFilePath = ""; try { sdkconfigFilePath = getVariableFromCMakeLists( @@ -390,8 +392,13 @@ export function getSDKConfigFilePath(workspacePath: vscode.Uri) { .replace(/"/g, ""); } if (!sdkconfigFilePath) { - const modifiedEnv = appendIdfAndToolsToPath(workspacePath); - sdkconfigFilePath = modifiedEnv.SDKCONFIG; + sdkconfigFilePath = idfConf.readParameter( + "idf.sdkconfigFilePath", + workspacePath + ) as string; + } + if (!workspacePath) { + return; } if (!sdkconfigFilePath) { sdkconfigFilePath = path.join(workspacePath.fsPath, "sdkconfig"); @@ -402,11 +409,11 @@ export function getSDKConfigFilePath(workspacePath: vscode.Uri) { return sdkconfigFilePath; } -export function getConfigValueFromSDKConfig( +export async function getConfigValueFromSDKConfig( key: string, workspacePath: vscode.Uri -): string { - const sdkconfigFilePath = getSDKConfigFilePath(workspacePath); +): Promise { + const sdkconfigFilePath = await getSDKConfigFilePath(workspacePath); if (!canAccessFile(sdkconfigFilePath, fs.constants.R_OK)) { throw new Error("sdkconfig file doesn't exists or can't be read"); } @@ -416,7 +423,7 @@ export function getConfigValueFromSDKConfig( return match ? match[1] : ""; } -export function getMonitorBaudRate(workspacePath: vscode.Uri) { +export async function getMonitorBaudRate(workspacePath: vscode.Uri) { let sdkMonitorBaudRate = ""; try { sdkMonitorBaudRate = idfConf.readParameter( @@ -424,7 +431,7 @@ export function getMonitorBaudRate(workspacePath: vscode.Uri) { workspacePath ) as string; if (!sdkMonitorBaudRate) { - sdkMonitorBaudRate = getConfigValueFromSDKConfig( + sdkMonitorBaudRate = await getConfigValueFromSDKConfig( "CONFIG_ESP_CONSOLE_UART_BAUDRATE", workspacePath ); @@ -438,8 +445,8 @@ export function getMonitorBaudRate(workspacePath: vscode.Uri) { return sdkMonitorBaudRate; } -export function delConfigFile(workspaceRoot: vscode.Uri) { - const sdkconfigFile = getSDKConfigFilePath(workspaceRoot); +export async function delConfigFile(workspaceRoot: vscode.Uri) { + const sdkconfigFile = await getSDKConfigFilePath(workspaceRoot); fs.unlinkSync(sdkconfigFile); } @@ -812,7 +819,7 @@ export async function cleanDirtyGitRepository( return; } const workingDirUri = vscode.Uri.file(workingDir); - const modifiedEnv = appendIdfAndToolsToPath(workingDirUri); + const modifiedEnv = await appendIdfAndToolsToPath(workingDirUri); const resetResult = await execChildProcess( gitPath, ["reset", "--hard", "--recurse-submodule"], @@ -838,7 +845,7 @@ export async function fixFileModeGitRepository( return; } const workingDirUri = vscode.Uri.file(workingDir); - const modifiedEnv = appendIdfAndToolsToPath(workingDirUri); + const modifiedEnv = await appendIdfAndToolsToPath(workingDirUri); const fixFileModeResult = await execChildProcess( gitPath, ["config", "--local", "core.fileMode", "false"], @@ -926,30 +933,10 @@ export function validateFileSizeAndChecksum( }); } -export function appendIdfAndToolsToPath(curWorkspace: vscode.Uri) { +export async function appendIdfAndToolsToPath(curWorkspace: vscode.Uri) { const modifiedEnv: { [key: string]: string } = <{ [key: string]: string }>( Object.assign({}, process.env) ); - const extraPaths = idfConf.readParameter( - "idf.customExtraPaths", - curWorkspace - ); - - const customVars = idfConf.readParameter( - "idf.customExtraVars", - curWorkspace - ) as { [key: string]: string }; - if (customVars) { - try { - for (const envVar in customVars) { - if (envVar) { - modifiedEnv[envVar] = customVars[envVar]; - } - } - } catch (error) { - Logger.errorNotify("Invalid custom environment variables format", error); - } - } const containerPath = process.platform === "win32" ? modifiedEnv.USERPROFILE : modifiedEnv.HOME; @@ -983,9 +970,51 @@ export function appendIdfAndToolsToPath(curWorkspace: vscode.Uri) { curWorkspace ) as string; modifiedEnv.IDF_TOOLS_PATH = toolsPath || defaultToolsPath; - const matterPathDir = idfConf.readParameter("idf.espMatterPath") as string; + const matterPathDir = idfConf.readParameter( + "idf.espMatterPath", + curWorkspace + ) as string; modifiedEnv.ESP_MATTER_PATH = matterPathDir || modifiedEnv.ESP_MATTER_PATH; + const idfToolsManager = await IdfToolsManager.createIdfToolsManager( + modifiedEnv.IDF_PATH + ); + + const extraPaths = await idfToolsManager.exportPathsInString( + path.join(modifiedEnv.IDF_TOOLS_PATH, "tools"), + ["cmake", "ninja"] + ); + const customExtraVars = idfConf.readParameter( + "idf.customExtraVars", + curWorkspace + ) as { [key: string]: string }; + if (customExtraVars) { + try { + for (const envVar in customExtraVars) { + if (envVar) { + modifiedEnv[envVar] = customExtraVars[envVar]; + } + } + } catch (error) { + Logger.errorNotify("Invalid user environment variables format", error); + } + } + const customVars = await idfToolsManager.exportVars( + path.join(modifiedEnv.IDF_TOOLS_PATH, "tools") + ); + + if (customVars) { + try { + for (const envVar in customVars) { + if (envVar) { + modifiedEnv[envVar] = customVars[envVar]; + } + } + } catch (error) { + Logger.errorNotify("Invalid ESP-IDF environment variables format", error); + } + } + let pathToPigweed: string; if (modifiedEnv.ESP_MATTER_PATH) { @@ -1008,14 +1037,15 @@ export function appendIdfAndToolsToPath(curWorkspace: vscode.Uri) { "zap" ); } - + const sysPythonPath = await getPythonPath(curWorkspace); + const pythonBinPath = await getVirtualEnvPythonPath(curWorkspace); modifiedEnv.PYTHON = - `${idfConf.readParameter("idf.pythonBinPath", curWorkspace)}` || + pythonBinPath || `${process.env.PYTHON}` || `${path.join(process.env.IDF_PYTHON_ENV_PATH, "bin", "python")}`; modifiedEnv.IDF_PYTHON_ENV_PATH = - path.dirname(path.dirname(modifiedEnv.PYTHON)) || + path.dirname(path.dirname(pythonBinPath)) || process.env.IDF_PYTHON_ENV_PATH; const gitPath = idfConf.readParameter("idf.gitPath", curWorkspace) as string; @@ -1064,14 +1094,10 @@ export function appendIdfAndToolsToPath(curWorkspace: vscode.Uri) { pathNameInEnv ] = `${IDF_ADD_PATHS_EXTRAS}${path.delimiter}${modifiedEnv[pathNameInEnv]}`; - let idfTarget = idfConf.readParameter("idf.adapterTargetName", curWorkspace); - if (idfTarget === "custom") { - idfTarget = idfConf.readParameter( - "idf.customAdapterTargetName", - curWorkspace - ); + let idfTarget = await getIdfTargetFromSdkconfig(curWorkspace); + if (idfTarget) { + modifiedEnv.IDF_TARGET = idfTarget || process.env.IDF_TARGET; } - modifiedEnv.IDF_TARGET = idfTarget || process.env.IDF_TARGET; let enableComponentManager = idfConf.readParameter( "idf.enableIdfComponentManager", @@ -1126,7 +1152,9 @@ export async function startPythonReqsProcess( "tools", "check_python_dependencies.py" ); - const modifiedEnv = appendIdfAndToolsToPath(extensionContext.extensionUri); + const modifiedEnv = await appendIdfAndToolsToPath( + extensionContext.extensionUri + ); return execChildProcess( pythonBinPath, [reqFilePath, "-r", requirementsPath], diff --git a/src/versionSwitcher/index.ts b/src/versionSwitcher/index.ts index 03e345604..d9de344da 100644 --- a/src/versionSwitcher/index.ts +++ b/src/versionSwitcher/index.ts @@ -26,6 +26,7 @@ import { readParameter } from "../idfConfiguration"; import { getIdfMd5sum } from "../setup/espIdfJson"; import { getEspIdfFromCMake } from "../utils"; import { IdfSetup } from "../views/setup/types"; +import { getPythonPath } from "../pythonManager"; export async function selectIdfSetup( workspaceFolder: Uri, @@ -65,10 +66,10 @@ export async function getCurrentIdfSetup(workspaceFolder: Uri, const idfPath = readParameter("idf.espIdfPath", workspaceFolder); const toolsPath = readParameter("idf.toolsPath", workspaceFolder) as string; const gitPath = readParameter("idf.gitPath", workspaceFolder); - const pythonPath = readParameter( - "idf.pythonBinPath", - workspaceFolder - ) as string; + + // FIX use system Python path as setting instead venv + // REMOVE this line after neext release + const sysPythonBinPath = await getPythonPath(workspaceFolder); const idfSetupId = getIdfMd5sum(idfPath); const idfVersion = await getEspIdfFromCMake(idfPath); @@ -77,7 +78,6 @@ export async function getCurrentIdfSetup(workspaceFolder: Uri, idfPath, gitPath, toolsPath, - python: pythonPath, version: idfVersion, isValid: false, }; diff --git a/src/views/new-project/Configure.vue b/src/views/new-project/Configure.vue index cc3bd0dc3..d516e9d0f 100644 --- a/src/views/new-project/Configure.vue +++ b/src/views/new-project/Configure.vue @@ -14,8 +14,6 @@ const { selectedBoard, selectedPort, serialPortList, - target, - targetList, } = storeToRefs(store); function setContainerDirectory(newPath: string) { @@ -71,19 +69,6 @@ onMounted(() => { -
- -
-
- -
-
-
-
diff --git a/src/views/new-project/main.ts b/src/views/new-project/main.ts index 5590f53cd..de0788e6f 100644 --- a/src/views/new-project/main.ts +++ b/src/views/new-project/main.ts @@ -67,10 +67,6 @@ window.addEventListener("message", (event) => { store.serialPortList = msg.serialPortList; store.selectedPort = msg.serialPortList[0]; } - if (msg.targetList) { - store.targetList = msg.targetList; - store.target = msg.targetList[0]; - } if (msg.templates) { store.templatesRootPath = msg.templates; } diff --git a/src/views/new-project/store.ts b/src/views/new-project/store.ts index c4d765212..32811a53e 100644 --- a/src/views/new-project/store.ts +++ b/src/views/new-project/store.ts @@ -47,26 +47,22 @@ export const useNewProjectStore = defineStore("newProject", () => { const selectedPort: Ref = ref(""); const selectedTemplate: Ref = ref({ name: "", path: "" }); const serialPortList: Ref = ref([]); - const target: Ref = ref({ - name: "", - description: "", - target: "", - configFiles: [], - }); - const targetList: Ref = ref([]); const templateDetail: Ref = ref(""); const templatesRootPath: Ref<{ [key: string]: IExampleCategory }> = ref({}); const searchString = ref(""); function createProject() { + const configFiles = + selectedBoard && selectedBoard.value.name === "Custom board" + ? openOcdConfigFiles.value + : selectedBoard.value.configFiles.join(","); vscode.postMessage({ command: "createProject", components: JSON.stringify(components.value), containerFolder: containerDirectory.value, - openOcdConfigFiles: openOcdConfigFiles.value, + openOcdConfigFiles: configFiles, port: selectedPort.value, projectName: projectName.value, - target: target.value.target, template: JSON.stringify(selectedTemplate.value), }); } @@ -110,8 +106,6 @@ export const useNewProjectStore = defineStore("newProject", () => { selectedPort, selectedTemplate, serialPortList, - target, - targetList, templateDetail, templatesRootPath, createProject, diff --git a/src/views/setup/ExistingSetup.vue b/src/views/setup/ExistingSetup.vue index 7ea720187..475373e55 100644 --- a/src/views/setup/ExistingSetup.vue +++ b/src/views/setup/ExistingSetup.vue @@ -50,7 +50,6 @@ function goTo(route: string, setupMode: SetupMode) { {{ prevSetup.idfPath }}

IDF Version: {{ prevSetup.version }}

-

Python path: {{ prevSetup.python }}

IDF Tools path: {{ prevSetup.toolsPath }}

Git path: {{ prevSetup.gitPath }}

diff --git a/src/views/setup/types.ts b/src/views/setup/types.ts index 2d57ee678..cdacae4cc 100644 --- a/src/views/setup/types.ts +++ b/src/views/setup/types.ts @@ -26,7 +26,6 @@ export interface IEspIdfLink { export interface IdfSetup { id: string; version: string; - python: string; toolsPath: string; idfPath: string; gitPath: string; diff --git a/src/workspaceConfig.ts b/src/workspaceConfig.ts index 1e7a3777b..181cb510b 100644 --- a/src/workspaceConfig.ts +++ b/src/workspaceConfig.ts @@ -17,7 +17,6 @@ import { pathExists } from "fs-extra"; import * as path from "path"; import * as vscode from "vscode"; import { IdfTreeDataProvider } from "./idfComponentsDataProvider"; -import { writeParameter } from "./idfConfiguration"; import { Logger } from "./logger/logger"; import * as utils from "./utils"; import { getSDKConfigFilePath } from "./utils"; @@ -83,24 +82,21 @@ export async function getIdfTargetFromSdkconfig( workspacePath: vscode.Uri, statusItem?: vscode.StatusBarItem ) { - let sdkConfigPath = getSDKConfigFilePath(workspacePath); + let sdkConfigPath = await getSDKConfigFilePath(workspacePath); const doesSdkconfigExists = await pathExists(sdkConfigPath); if (!doesSdkconfigExists) { return; } - const idfTarget = utils - .getConfigValueFromSDKConfig("CONFIG_IDF_TARGET", workspacePath) - .replace(/\"/g, ""); + const configIdfTarget = await utils.getConfigValueFromSDKConfig( + "CONFIG_IDF_TARGET", + workspacePath + ); + const idfTarget = configIdfTarget.replace(/\"/g, ""); if (!idfTarget) { return; } - await writeParameter( - "idf.adapterTargetName", - idfTarget, - vscode.ConfigurationTarget.WorkspaceFolder, - workspacePath - ); if (statusItem) { statusItem.text = "$(chip) " + idfTarget; } + return idfTarget; } diff --git a/templates/.devcontainer/devcontainer.json b/templates/.devcontainer/devcontainer.json index 09d3b422a..2d8816380 100644 --- a/templates/.devcontainer/devcontainer.json +++ b/templates/.devcontainer/devcontainer.json @@ -8,21 +8,18 @@ "settings": { "terminal.integrated.defaultProfile.linux": "bash", "idf.espIdfPath": "/opt/esp/idf", - "idf.customExtraPaths": "", - "idf.pythonBinPath": "/opt/esp/python_env/idf5.4_py3.12_env/bin/python", "idf.toolsPath": "/opt/esp", "idf.gitPath": "/usr/bin/git" }, "extensions": [ - "espressif.esp-idf-extension" + "espressif.esp-idf-extension", + "espressif.esp-idf-web" ] }, "codespaces": { "settings": { "terminal.integrated.defaultProfile.linux": "bash", "idf.espIdfPath": "/opt/esp/idf", - "idf.customExtraPaths": "", - "idf.pythonBinPath": "/opt/esp/python_env/idf5.4_py3.12_env/bin/python", "idf.toolsPath": "/opt/esp", "idf.gitPath": "/usr/bin/git" }, diff --git a/templates/.vscode/tasks.json b/templates/.vscode/tasks.json deleted file mode 100644 index 1dc791585..000000000 --- a/templates/.vscode/tasks.json +++ /dev/null @@ -1,259 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Build - Build project", - "type": "shell", - "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py build", - "windows": { - "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py build", - "options": { - "env": { - "PATH": "${env:PATH};${config:idf.customExtraPaths}" - } - } - }, - "options": { - "env": { - "PATH": "${env:PATH}:${config:idf.customExtraPaths}" - } - }, - "problemMatcher": [ - { - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - } - } - ], - "group": { - "kind": "build", - "isDefault": true - } - }, - { - "label": "Set ESP-IDF Target", - "type": "shell", - "command": "${command:espIdf.setTarget}", - "problemMatcher": { - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - } - } - }, - { - "label": "Clean - Clean the project", - "type": "shell", - "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py fullclean", - "windows": { - "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py fullclean", - "options": { - "env": { - "PATH": "${env:PATH};${config:idf.customExtraPaths}" - } - } - }, - "options": { - "env": { - "PATH": "${env:PATH}:${config:idf.customExtraPaths}" - } - }, - "problemMatcher": [ - { - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - } - } - ] - }, - { - "label": "Flash - Flash the device", - "type": "shell", - "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} -b ${config:idf.flashBaudRate} flash", - "windows": { - "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py flash -p ${config:idf.portWin} -b ${config:idf.flashBaudRate}", - "options": { - "env": { - "PATH": "${env:PATH};${config:idf.customExtraPaths}" - } - } - }, - "options": { - "env": { - "PATH": "${env:PATH}:${config:idf.customExtraPaths}" - } - }, - "problemMatcher": [ - { - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - } - } - ] - }, - { - "label": "Monitor: Start the monitor", - "type": "shell", - "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} monitor", - "windows": { - "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py -p ${config:idf.portWin} monitor", - "options": { - "env": { - "PATH": "${env:PATH};${config:idf.customExtraPaths}" - } - } - }, - "options": { - "env": { - "PATH": "${env:PATH}:${config:idf.customExtraPaths}" - } - }, - "problemMatcher": [ - { - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - } - } - ], - "dependsOn": "Flash - Flash the device" - }, - { - "label": "OpenOCD: Start openOCD", - "type": "shell", - "presentation": { - "echo": true, - "reveal": "never", - "focus": false, - "panel": "new" - }, - "command": "openocd -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}", - "windows": { - "command": "openocd.exe -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}", - "options": { - "env": { - "PATH": "${env:PATH};${config:idf.customExtraPaths}" - } - } - }, - "options": { - "env": { - "PATH": "${env:PATH}:${config:idf.customExtraPaths}" - } - }, - "problemMatcher": { - "owner": "cpp", - "fileLocation": [ - "autoDetect", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - } - } - }, - { - "label": "adapter", - "type": "shell", - "command": "${config:idf.pythonBinPath}", - "isBackground": true, - "options": { - "env": { - "PATH": "${env:PATH}:${config:idf.customExtraPaths}", - "PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter" - } - }, - "problemMatcher": { - "background": { - "beginsPattern": "\bDEBUG_ADAPTER_STARTED\b", - "endsPattern": "DEBUG_ADAPTER_READY2CONNECT", - "activeOnStart": true - }, - "pattern": { - "regexp": "(\\d+)-(\\d+)-(\\d+)\\s(\\d+):(\\d+):(\\d+),(\\d+)\\s-(.+)\\s(ERROR)", - "file": 8, - "line": 2, - "column": 3, - "severity": 4, - "message": 9 - } - }, - "args": [ - "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter_main.py", - "-e", - "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", - "-s", - "$OPENOCD_SCRIPTS", - "-dn", - "esp32", - "-om", - "connect_to_instance", - "-t", - "xtensa-esp32-elf-" - - ], - "windows": { - "command": "${config:idf.pythonBinPathWin}", - "options": { - "env": { - "PATH": "${env:PATH};${config:idf.customExtraPaths}", - "PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter" - } - } - } - } - ] -} \ No newline at end of file diff --git a/testFiles/testWorkspace/.vscode/settings.json b/testFiles/testWorkspace/.vscode/settings.json index 0e609a0f8..c8fecd193 100644 --- a/testFiles/testWorkspace/.vscode/settings.json +++ b/testFiles/testWorkspace/.vscode/settings.json @@ -3,7 +3,6 @@ "idf.espIdfPath": "${env:IDF_PATH}", "idf.espMdfPath": "/test/esp-mdf", "idf.port": "/serialport", - "idf.pythonBinPath": "/opt/esp/python_env/idf4.4_py3.8_env/bin/python", "idf.openOcdConfigs": [ "board/esp32-wrover-kit-3.3v.cfg" ], @@ -11,10 +10,7 @@ "idf.gitPath": "/usr/bin/git", "files.simpleDialog.enable": true, "window.dialogStyle": "custom", - "idf.customExtraPaths": "${env:PATH}", - "idf.customExtraVars": { - "OPENOCD_SCRIPTS": "${env:OPENOCD_SCRIPTS}" - }, "idf.notificationMode": "Output", - "idf.showOnboardingOnInit": false + "idf.showOnboardingOnInit": false, + "idf.pythonInstallPath": "python" } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index c967cfb34..d3b6780f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25,6 +25,13 @@ "@azure/core-util" "^1.0.0" tslib "^2.6.2" +"@azure/abort-controller@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" + integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== + dependencies: + tslib "^2.2.0" + "@azure/abort-controller@^2.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" @@ -32,7 +39,7 @@ dependencies: tslib "^2.6.2" -"@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0": +"@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0", "@azure/core-auth@^1.5.0": version "1.7.2" resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.7.2.tgz#558b7cb7dd12b00beec07ae5df5907d74df1ebd9" integrity sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g== @@ -41,6 +48,33 @@ "@azure/core-util" "^1.1.0" tslib "^2.6.2" +"@azure/core-client@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74" + integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.4.0" + "@azure/core-rest-pipeline" "^1.9.1" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.6.1" + "@azure/logger" "^1.0.0" + tslib "^2.6.2" + +"@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.9.1": + version "1.16.2" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.2.tgz#3f71b09e45a65926cc598478b4f1bcd0fe67bf4b" + integrity sha512-Hnhm/PG9/SQ07JJyLDv3l9Qr8V3xgAe1hFoBYzt6LaalMxfL/ZqFaZf/bz5VN3pMcleCPwl8ivlS2Fjxq/iC8Q== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.4.0" + "@azure/core-tracing" "^1.0.1" + "@azure/core-util" "^1.9.0" + "@azure/logger" "^1.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + tslib "^2.6.2" + "@azure/core-rest-pipeline@^1.5.0", "@azure/core-rest-pipeline@^1.8.0": version "1.15.2" resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.2.tgz#421729bbd8cd5f9f50b403e79941f27ac1bdc302" @@ -55,7 +89,7 @@ https-proxy-agent "^7.0.0" tslib "^2.6.2" -"@azure/core-tracing@^1.0.1": +"@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.1.2.tgz#065dab4e093fb61899988a1cdbc827d9ad90b4ee" integrity sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA== @@ -70,6 +104,34 @@ "@azure/abort-controller" "^2.0.0" tslib "^2.6.2" +"@azure/core-util@^1.6.1", "@azure/core-util@^1.9.0": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.1.tgz#05ea9505c5cdf29c55ccf99a648c66ddd678590b" + integrity sha512-OLsq0etbHO1MA7j6FouXFghuHrAFGk+5C1imcpQ2e+0oZhYF07WLA+NW2Vqs70R7d+zOAWiWM3tbE1sXcDN66g== + dependencies: + "@azure/abort-controller" "^2.0.0" + tslib "^2.6.2" + +"@azure/identity@^4.1.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.4.1.tgz#490fa2ad26786229afa36411892bb53dfa3478d3" + integrity sha512-DwnG4cKFEM7S3T+9u05NstXU/HN0dk45kPOinUyNKsn5VWwpXd9sbPKEg6kgJzGbm1lMuhx9o31PVbCtM5sfBA== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-auth" "^1.5.0" + "@azure/core-client" "^1.9.2" + "@azure/core-rest-pipeline" "^1.1.0" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.3.0" + "@azure/logger" "^1.0.0" + "@azure/msal-browser" "^3.14.0" + "@azure/msal-node" "^2.9.2" + events "^3.0.0" + jws "^4.0.0" + open "^8.0.0" + stoppable "^1.1.0" + tslib "^2.2.0" + "@azure/logger@^1.0.0": version "1.1.2" resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.2.tgz#3f4b876cefad328dc14aff8b850d63b611e249dc" @@ -77,6 +139,27 @@ dependencies: tslib "^2.6.2" +"@azure/msal-browser@^3.14.0": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.20.0.tgz#12ae45d0d398dac25b2b37710277103539c23994" + integrity sha512-ErsxbfCGIwdqD8jipqdxpfAGiUEQS7MWUe39Rjhl0ZVPsb1JEe9bZCe2+0g23HDH6DGyCAtnTNN9scPtievrMQ== + dependencies: + "@azure/msal-common" "14.14.0" + +"@azure/msal-common@14.14.0": + version "14.14.0" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.14.0.tgz#31a015070d5864ebcf9ebb988fcbc5c5536f22d1" + integrity sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ== + +"@azure/msal-node@^2.9.2": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.12.0.tgz#57ee6b6011a320046d72dc0828fec46278f2ab2c" + integrity sha512-jmk5Im5KujRA2AcyCb0awA3buV8niSrwXZs+NBJWIvxOz76RvNlusGIqi43A0h45BPUy93Qb+CPdpJn82NFTIg== + dependencies: + "@azure/msal-common" "14.14.0" + jsonwebtoken "^9.0.0" + uuid "^8.3.0" + "@babel/helper-string-parser@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" @@ -101,6 +184,11 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@bazel/runfiles@^5.8.1": + version "5.8.1" + resolved "https://registry.yarnpkg.com/@bazel/runfiles/-/runfiles-5.8.1.tgz#737d5b3dc9739767054820265cfe432a80564c82" + integrity sha512-NDdfpdQ6rZlylgv++iMn5FkObC/QlBQvipinGLSOguTYpRywmieOyJ29XHvUilspwTFSILWpoE9CqMGkHXug1g== + "@creativebulma/bulma-tooltip@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@creativebulma/bulma-tooltip/-/bulma-tooltip-1.2.0.tgz#84dcdd59d94c09c2975fadbec1d3d765ae29c471" @@ -309,6 +397,11 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + "@serialport/binding-mock@10.2.2": version "10.2.2" resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-10.2.2.tgz#d322a8116a97806addda13c62f50e73d16125874" @@ -405,10 +498,10 @@ "@serialport/bindings-interface" "1.2.2" debug "4.3.4" -"@sindresorhus/is@^5.2.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" - integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== +"@sindresorhus/is@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-7.0.0.tgz#af4d8061cd325782355e7716633e03f7758d4f17" + integrity sha512-WDTlVTyvFivSOuyvMeedzg2hdoBLZ3f1uNVuEida2Rl9BrfjrIRjWA/VZIrMRLvSwJYCAlCRA3usDt1THytxWQ== "@szmarczak/http-timer@^5.0.1": version "5.0.1" @@ -473,7 +566,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/http-cache-semantics@^4.0.2": +"@types/http-cache-semantics@^4.0.4": version "4.0.4" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== @@ -520,7 +613,14 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^20.7.0": +"@types/node@*": + version "22.0.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.0.2.tgz#9fb1a2b31970871e8bf696f0e8a40d2e6d2bd04e" + integrity sha512-yPL6DyFwY5PiMVEwymNeqUTKsDczQBJ/5T7W/46RwLU/VH+AA8aT5TZkvBviLKLbbm0hlfftEkGrNzfRk/fofQ== + dependencies: + undici-types "~6.11.1" + +"@types/node@^20.7.0": version "20.11.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.5.tgz#be10c622ca7fcaa3cf226cf80166abc31389d86e" integrity sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w== @@ -553,11 +653,12 @@ dependencies: htmlparser2 "^8.0.0" -"@types/selenium-webdriver@^4.1.21": - version "4.1.21" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.1.21.tgz#79fe31faf9953a4143c3e32944d98d5146bbe185" - integrity sha512-QGURnImvxYlIQz5DVhvHdqpYNLBjhJ2Vm+cnQI2G9QZzkWlZm0LkLcvDcHp+qE6N2KBz4CeuvXgPO7W3XQ0Tyw== +"@types/selenium-webdriver@^4.1.22": + version "4.1.24" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-4.1.24.tgz#f19f4c73fa176ef6076805cf433a0c991bab9cd7" + integrity sha512-oR5MVATv+P2dmhceZJPDm99MmOC9yAK8YpIgJbHEFQ/MbSPC1lA6Ohw441WNUcQ6B1fMAOMu0u59fRKKj9AGGg== dependencies: + "@types/node" "*" "@types/ws" "*" "@types/tar-fs@^2.0.1": @@ -586,9 +687,9 @@ integrity sha512-CF/RBon/GXwdfmnjZj0WTUMZN5H6YITOfBCP4iEZlOtVQXuzw6t7Le7+cR+7JzdMrnlm7Mfp49Oj2TuSXIWo3g== "@types/ws@*": - version "8.5.10" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" @@ -678,16 +779,80 @@ jszip "^3.10.1" semver "^7.5.2" -"@vscode/vsce@^2.22.0": - version "2.22.0" - resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.22.0.tgz#1eb3ebc6b89581a150bb44dd7d731a064019b617" - integrity sha512-8df4uJiM3C6GZ2Sx/KilSKVxsetrTBBIUb3c0W4B1EWHcddioVs5mkyDKtMNP0khP/xBILVSzlXxhV+nm2rC9A== - dependencies: - azure-devops-node-api "^11.0.1" +"@vscode/vsce-sign-alpine-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz#4accc485e55aa6ff04b195b47f722ead57daa58e" + integrity sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ== + +"@vscode/vsce-sign-alpine-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz#4a4b7b505b4cc0f58596394897c49a0bce0e540c" + integrity sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw== + +"@vscode/vsce-sign-darwin-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz#10aa69feb7f81a3dc68c242038ca03eaff19c12e" + integrity sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ== + +"@vscode/vsce-sign-darwin-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz#3315528f3ea1007a648b3320bff36a33a9e07aa5" + integrity sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw== + +"@vscode/vsce-sign-linux-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz#ce5c5cfc99e3454b4fb770405812b46bd6dca870" + integrity sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA== + +"@vscode/vsce-sign-linux-arm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz#4142fda83e7130b31aedd8aa81e4daa6334323c2" + integrity sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ== + +"@vscode/vsce-sign-linux-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz#59ab93f322efb3cf49166d4e2e812789c3117428" + integrity sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg== + +"@vscode/vsce-sign-win32-arm64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz#d095704a14b0404c0b6f696e9889e9a51b31a86c" + integrity sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ== + +"@vscode/vsce-sign-win32-x64@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz#294ea72b44fedd694d49f5cef4c55bf3876dc257" + integrity sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg== + +"@vscode/vsce-sign@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign/-/vsce-sign-2.0.4.tgz#b4bf155d16f2a4badc069df850dc86f756124842" + integrity sha512-0uL32egStKYfy60IqnynAChMTbL0oqpqk0Ew0YHiIb+fayuGZWADuIPHWUcY1GCnAA+VgchOPDMxnc2R3XGWEA== + optionalDependencies: + "@vscode/vsce-sign-alpine-arm64" "2.0.2" + "@vscode/vsce-sign-alpine-x64" "2.0.2" + "@vscode/vsce-sign-darwin-arm64" "2.0.2" + "@vscode/vsce-sign-darwin-x64" "2.0.2" + "@vscode/vsce-sign-linux-arm" "2.0.2" + "@vscode/vsce-sign-linux-arm64" "2.0.2" + "@vscode/vsce-sign-linux-x64" "2.0.2" + "@vscode/vsce-sign-win32-arm64" "2.0.2" + "@vscode/vsce-sign-win32-x64" "2.0.2" + +"@vscode/vsce@^2.24.0": + version "2.31.1" + resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.31.1.tgz#2420167e5b5ac49ff8fd1aeebfadde43711fbe55" + integrity sha512-LwEQFKXV21C4/brvGPH/9+7ZOUM5cbK7oJ4fVmy0YG75NIy1HV8eMSoBZrl+u23NxpAhor62Cu1aI+JFtCtjSg== + dependencies: + "@azure/identity" "^4.1.0" + "@vscode/vsce-sign" "^2.0.0" + azure-devops-node-api "^12.5.0" chalk "^2.4.2" cheerio "^1.0.0-rc.9" + cockatiel "^3.1.2" commander "^6.2.1" - glob "^7.0.6" + form-data "^4.0.0" + glob "^11.0.0" hosted-git-info "^4.0.2" jsonc-parser "^3.2.0" leven "^3.1.0" @@ -697,7 +862,7 @@ parse-semver "^1.1.1" read "^1.0.7" semver "^7.5.2" - tmp "^0.2.1" + tmp "^0.2.3" typed-rest-client "^1.8.4" url-join "^4.0.1" xml2js "^0.5.0" @@ -1202,6 +1367,14 @@ azure-devops-node-api@^11.0.1: tunnel "0.0.6" typed-rest-client "^1.8.4" +azure-devops-node-api@^12.5.0: + version "12.5.0" + resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz#38b9efd7c5ac74354fe4e8dbe42697db0b8e85a5" + integrity sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og== + dependencies: + tunnel "0.0.6" + typed-rest-client "^1.8.4" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1212,11 +1385,6 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -big-integer@^1.6.17: - version "1.6.52" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" - integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -1232,14 +1400,6 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - bl@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" @@ -1257,11 +1417,6 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== - boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1322,6 +1477,11 @@ buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" @@ -1332,11 +1492,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-indexof-polyfill@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" - integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== - buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -1345,11 +1500,6 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== - bulma@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.9.4.tgz#0ca8aeb1847a34264768dba26a064c8be72674a1" @@ -1360,20 +1510,31 @@ cacheable-lookup@^7.0.0: resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== -cacheable-request@^10.2.8: - version "10.2.14" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" - integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== +cacheable-request@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-12.0.1.tgz#e6f473b5b76c02e72a0ec2cd44c7cfb7c751d7c5" + integrity sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg== dependencies: - "@types/http-cache-semantics" "^4.0.2" - get-stream "^6.0.1" + "@types/http-cache-semantics" "^4.0.4" + get-stream "^9.0.1" http-cache-semantics "^4.1.1" - keyv "^4.5.3" + keyv "^4.5.4" mimic-response "^4.0.0" - normalize-url "^8.0.0" + normalize-url "^8.0.1" responselike "^3.0.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: +call-bind@^1.0.0, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== @@ -1410,13 +1571,6 @@ chai@^4.1.2, chai@^4.3.4: pathval "^1.1.1" type-detect "^4.0.8" -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== - dependencies: - traverse ">=0.3.0 <0.4" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1542,6 +1696,11 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +cockatiel@^3.1.2: + version "3.2.1" + resolved "https://registry.yarnpkg.com/cockatiel/-/cockatiel-3.2.1.tgz#575f937bc4040a20ae27352a6d07c9c5a741981f" + integrity sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q== + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1583,10 +1742,10 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" - integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== +commander@^12.0.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" + integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== commander@^2.20.0: version "2.20.3" @@ -1604,9 +1763,9 @@ commander@^7.0.0: integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== compare-versions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" - integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg== + version "6.1.1" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.1.tgz#7af3cc1099ba37d244b3145a9af5201b629148a9" + integrity sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg== compress-commons@^4.1.2: version "4.1.2" @@ -1833,7 +1992,7 @@ defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1, define-data-property@^1.1.1: +define-data-property@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== @@ -1842,6 +2001,20 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -1884,9 +2057,9 @@ delayed-stream@~1.0.0: integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== diff@5.0.0: version "5.0.0" @@ -1930,22 +2103,22 @@ domutils@^3.0.1: domelementtype "^2.3.0" domhandler "^5.0.3" -duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + electron-to-chromium@^1.5.4: - version "1.5.13" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" - integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== + version "1.5.25" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz#492ade1cde401332b9b75aa0c55fd5e1550ca66c" + integrity sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g== emoji-regex@^8.0.0: version "8.0.0" @@ -1997,6 +2170,18 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.0.tgz#c3793f44284a55ff8c82faf1ffd91bc6478ea01f" integrity sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-module-lexer@^1.2.1: version "1.4.1" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" @@ -2097,7 +2282,7 @@ estree-walker@^2.0.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -events@^3.2.0: +events@^3.0.0, events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -2245,17 +2430,17 @@ for-each@^0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== +form-data-encoder@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-4.0.2.tgz#dd286fd5f9049e8ded1d44ce427f5e29185c7c12" + integrity sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw== form-data@^4.0.0: version "4.0.0" @@ -2308,16 +2493,6 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -2338,11 +2513,12 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -2360,16 +2536,19 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-stream@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== +get-stream@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -2411,15 +2590,16 @@ glob@^10.0.0: path-scurry "^1.10.2" glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" glob@^10.3.7: version "10.4.2" @@ -2433,6 +2613,18 @@ glob@^10.3.7: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" +glob@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e" + integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + glob@^7.0.3, glob@^7.0.6, glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -2475,24 +2667,24 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -got@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/got/-/got-13.0.0.tgz#a2402862cef27a5d0d1b07c0fb25d12b58175422" - integrity sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== +got@^14.2.1: + version "14.4.2" + resolved "https://registry.yarnpkg.com/got/-/got-14.4.2.tgz#988ed18d8deca3a3933915fbeff36065f8f58db7" + integrity sha512-+Te/qEZ6hr7i+f0FNgXx/6WQteSM/QqueGvxeYQQFm0GDfoxLVJ/oiwUKYMTeioColWUTdewZ06hmrBjw6F7tw== dependencies: - "@sindresorhus/is" "^5.2.0" + "@sindresorhus/is" "^7.0.0" "@szmarczak/http-timer" "^5.0.1" cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" + cacheable-request "^12.0.1" decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" + form-data-encoder "^4.0.2" + http2-wrapper "^2.2.1" lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" + p-cancelable "^4.0.1" responselike "^3.0.0" + type-fest "^4.19.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -2512,17 +2704,17 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" @@ -2547,9 +2739,9 @@ hash-sum@^2.0.0: integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -2602,7 +2794,7 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" -http2-wrapper@^2.1.10: +http2-wrapper@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== @@ -2697,7 +2889,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2770,6 +2962,11 @@ is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-docker@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" @@ -2878,6 +3075,11 @@ is-stream@^3.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + is-typed-array@^1.1.3: version "1.1.12" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" @@ -2890,6 +3092,13 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + is-wsl@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" @@ -2924,7 +3133,7 @@ isstream@0.1.x: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== -jackspeak@^2.3.5, jackspeak@^2.3.6: +jackspeak@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== @@ -2942,6 +3151,15 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jackspeak@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.1.tgz#9fca4ce961af6083e259c376e9e3541431f5287b" + integrity sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-worker@^27.4.5: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" @@ -2996,9 +3214,9 @@ json5@^2.1.2: integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" - integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== + version "3.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== jsonfile@^4.0.0: version "4.0.0" @@ -3021,6 +3239,22 @@ jsonic@^1.0.1: resolved "https://registry.yarnpkg.com/jsonic/-/jsonic-1.0.1.tgz#817054df7abfaf525ecf39d6647a2ed6d5fca7f1" integrity sha512-6GitEN4plTuB/I1o9kDZl7Pgc+DvFG1BG88IqaUz4eQglCA1uAgxWdXhLNA6ffaYsmzPjOysDpp6CYTwRiuXLw== +jsonwebtoken@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + jszip@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" @@ -3031,6 +3265,40 @@ jszip@^3.10.1: readable-stream "~2.3.6" setimmediate "^1.0.5" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwa@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" + integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +jws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" + integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== + dependencies: + jwa "^2.0.0" + safe-buffer "^5.0.1" + keytar@^7.7.0: version "7.9.0" resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb" @@ -3039,7 +3307,7 @@ keytar@^7.7.0: node-addon-api "^4.3.0" prebuild-install "^7.0.1" -keyv@^4.5.3: +keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -3089,11 +3357,6 @@ linkify-it@^5.0.0: dependencies: uc.micro "^2.0.0" -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== - loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" @@ -3146,11 +3409,41 @@ lodash.flatten@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -3186,6 +3479,11 @@ lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +lru-cache@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.0.tgz#15d93a196f189034d7166caf9fe55e7384c98a21" + integrity sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -3193,11 +3491,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -"lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - magic-string@^0.30.5: version "0.30.5" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9" @@ -3319,6 +3612,13 @@ minimatch@4.2.1: dependencies: brace-expansion "^1.1.7" +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -3334,9 +3634,9 @@ minimatch@^5.1.0: brace-expansion "^2.0.1" minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -3352,22 +3652,22 @@ minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minipass@^7.1.2: +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +minipass@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -3415,16 +3715,16 @@ mocha@^9.2.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -monaco-page-objects@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/monaco-page-objects/-/monaco-page-objects-3.12.0.tgz#d27d7f01eb9ca426db175ba3326af11f35941455" - integrity sha512-JiA24MmjeilFUumMtch9v/nzHWFt1TgMt9oRYmQJ7BwOFucFFxU+ksNmEwp5Je3b3tn1F+gDI3A1QwEhdOxXOg== +monaco-page-objects@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/monaco-page-objects/-/monaco-page-objects-3.14.1.tgz#732f3f9074becc6ef1bef0d85d49878d351840e6" + integrity sha512-+inJ9rwxYraQFCA+YpjyYcoxmNHcEsxPH7bPhmeaZ09eRh0o3RQqFRZDkibFOraDpKiC5miqEDYR9pJx+hau4Q== dependencies: clipboardy "^4.0.0" clone-deep "^4.0.1" compare-versions "^6.1.0" fs-extra "^11.2.0" - ts-essentials "^9.4.1" + type-fest "^4.14.0" mri@^1.1.4: version "1.2.0" @@ -3498,9 +3798,9 @@ nock@^10.0.6: semver "^5.5.0" node-abi@^3.3.0: - version "3.54.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" - integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== + version "3.65.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" + integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== dependencies: semver "^7.3.5" @@ -3544,10 +3844,10 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== +normalize-url@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== npm-run-path@^3.0.0: version "3.1.0" @@ -3557,9 +3857,9 @@ npm-run-path@^3.0.0: path-key "^3.0.0" npm-run-path@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.2.0.tgz#224cdd22c755560253dd71b83a1ef2f758b2e955" - integrity sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg== + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== dependencies: path-key "^4.0.0" @@ -3575,10 +3875,10 @@ object-assign@^4.0.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-is@^1.1.5: version "1.1.5" @@ -3624,6 +3924,15 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +open@^8.0.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -3641,10 +3950,10 @@ ovsx@^0.3.0: tmp "^0.2.1" vsce "^2.6.3" -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== +p-cancelable@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-4.0.1.tgz#2d1edf1ab8616b72c73db41c4bc9ecdd10af640e" + integrity sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg== p-finally@^2.0.0: version "2.0.1" @@ -3768,14 +4077,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" @@ -3792,6 +4093,14 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -3938,9 +4247,9 @@ postcss@^8.3.11, postcss@^8.4.27, postcss@^8.4.31, postcss@^8.4.33: source-map-js "^1.0.2" prebuild-install@^7.0.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== dependencies: detect-libc "^2.0.0" expand-template "^2.0.3" @@ -4028,13 +4337,20 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@^6.5.1, qs@^6.9.1: +qs@^6.5.1: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" +qs@^6.9.1: + version "6.12.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.3.tgz#e43ce03c8521b9c7fd7f1f13e514e5ca37727754" + integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ== + dependencies: + side-channel "^1.0.6" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -4069,7 +4385,7 @@ read@^1.0.7: dependencies: mute-stream "~0.0.4" -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -4174,14 +4490,14 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2, rimraf@^2.6.3: +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" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -4291,14 +4607,15 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -selenium-webdriver@^4.16.0: - version "4.17.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.17.0.tgz#f6c93a9df3e0543df7dc2329d81968af42845a7f" - integrity sha512-e2E+2XBlGepzwgFbyQfSwo9Cbj6G5fFfs9MzAS00nC99EewmcS2rwn2MwtgfP7I5p1e7DYv4HQJXtWedsu6DvA== +selenium-webdriver@^4.18.1: + version "4.23.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.23.0.tgz#6d9d219a560dffff1fbbc0f2c8a115d81d279a21" + integrity sha512-DdvtInpnMt95Td8VApvmAw7oSydBD9twIRXqoMyRoGMvL1dAnMFxdrwnW6L0d/pF/uoNTjbVUarwGZ9wIGNStA== dependencies: + "@bazel/runfiles" "^5.8.1" jszip "^3.10.1" - tmp "^0.2.1" - ws ">=8.14.2" + tmp "^0.2.3" + ws "^8.17.1" semver@^5.1.0, semver@^5.5.0: version "5.7.2" @@ -4310,13 +4627,18 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.2: +semver@^7.3.2, semver@^7.3.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" +semver@^7.3.5, semver@^7.5.2, semver@^7.5.4: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -4351,16 +4673,17 @@ serialport@^12.0.0: "@serialport/stream" "12.0.0" debug "4.3.4" -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== +set-function-length@^1.1.1, set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - define-data-property "^1.1.1" + define-data-property "^1.1.4" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.4" gopd "^1.0.1" - has-property-descriptors "^1.0.1" + has-property-descriptors "^1.0.2" set-function-name@^2.0.0: version "2.0.1" @@ -4371,7 +4694,7 @@ set-function-name@^2.0.0: functions-have-names "^1.2.3" has-property-descriptors "^1.0.0" -setimmediate@^1.0.5, setimmediate@~1.0.4: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== @@ -4395,14 +4718,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2: version "3.0.7" @@ -4461,6 +4785,11 @@ stack-trace@0.0.x: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== +stoppable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" + integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== + stream-browserify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" @@ -4679,12 +5008,10 @@ terser@^5.26.0: commander "^2.20.0" source-map-support "~0.5.20" -tmp@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" +tmp@^0.2.1, tmp@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== to-buffer@^1.1.1: version "1.1.1" @@ -4703,11 +5030,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== - tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" @@ -4720,11 +5042,6 @@ truncate-utf8-bytes@^1.0.0: dependencies: utf8-byte-length "^1.0.1" -ts-essentials@^9.4.1: - version "9.4.1" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-9.4.1.tgz#6a6b6f81c2138008a5eef216e9fa468d8d9e2ab4" - integrity sha512-oke0rI2EN9pzHsesdmrOrnqv1eQODmJpd/noJjwj2ZPC3Z4N2wbjrOEqnsEgmvlO2+4fBb0a794DCna2elEVIQ== - ts-loader@^9.4.4: version "9.5.1" resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.5.1.tgz#63d5912a86312f1fbe32cef0859fb8b2193d9b89" @@ -4758,6 +5075,11 @@ type-detect@^4.0.0, type-detect@^4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^4.14.0, type-fest@^4.19.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.23.0.tgz#8196561a6b835175473be744f3e41e2dece1496b" + integrity sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w== + typed-rest-client@^1.8.4: version "1.8.11" resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.11.tgz#6906f02e3c91e8d851579f255abf0fd60800a04d" @@ -4788,15 +5110,20 @@ uc.micro@^2.0.0, uc.micro@^2.1.0: integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== underscore@^1.12.1: - version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.11.1: + version "6.11.1" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.11.1.tgz#432ea6e8efd54a48569705a699e62d8f4981b197" + integrity sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ== + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -4807,22 +5134,6 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unzipper@^0.10.14: - version "0.10.14" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" - integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "^1.0.12" - graceful-fs "^4.2.2" - listenercount "~1.0.1" - readable-stream "~2.3.6" - setimmediate "~1.0.4" - update-browserslist-db@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" @@ -4844,9 +5155,9 @@ url-join@^4.0.1: integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz#f9f63910d15536ee2b2d5dd4665389715eac5c1e" + integrity sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA== utf8@^3.0.0: version "3.0.0" @@ -4869,6 +5180,11 @@ util@^0.12.5: is-typed-array "^1.1.3" which-typed-array "^1.1.2" +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + vite@^4.5.3: version "4.5.3" resolved "https://registry.yarnpkg.com/vite/-/vite-4.5.3.tgz#d88a4529ea58bae97294c7e2e6f0eab39a50fb1a" @@ -4906,31 +5222,30 @@ vsce@^2.6.3, vsce@^2.6.7: yauzl "^2.3.1" yazl "^2.2.2" -vscode-extension-tester-locators@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.10.0.tgz#a199d1640c53b4e15dac2c6652f274ed566e526e" - integrity sha512-smhCxci1FtaK1ZHVnRtrnv+5YIDAFPkXBWRkyKzrf7CBA4Zpg5hleLKipEVEygBj/MrFCW4oYexqti9hOJX3bw== +vscode-extension-tester-locators@^3.12.2: + version "3.12.2" + resolved "https://registry.yarnpkg.com/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.12.2.tgz#0b6c998de48fe079021783157675bb2963695c7f" + integrity sha512-RMN+AMGhK4dSPauJoAQ1Os4Kju9br7HvcwflkgWn7M81HEo2lt/wEsLKtEm0igSc3u4iKDH3R1D/kqbxW8A/UQ== -vscode-extension-tester@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/vscode-extension-tester/-/vscode-extension-tester-7.0.0.tgz#074fd03eafa747d761611cada8a2c38410044ff7" - integrity sha512-ICl/ITfPZnvx9ofY2gcOg5ZndQo3MSGu6iNa2TdkPLysAYnm5H/hY3IrmwqQqjXI+id+kcxoZMB/SZlsBlxiVw== +vscode-extension-tester@7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/vscode-extension-tester/-/vscode-extension-tester-7.3.2.tgz#e2c4c7a2f63da08d48b69e3af317117555debba9" + integrity sha512-qjswvU00k+n9yeC4cJupm2067cZAm+cxMVmbcssZp4lI6OMbbUDP4s2c9i1sODwCv8MTzzzQw+z6+4xagUeQmA== dependencies: - "@types/selenium-webdriver" "^4.1.21" - "@vscode/vsce" "^2.22.0" - commander "^11.1.0" + "@types/selenium-webdriver" "^4.1.22" + "@vscode/vsce" "^2.24.0" + commander "^12.0.0" compare-versions "^6.1.0" fs-extra "^11.2.0" glob "^10.3.10" - got "^13.0.0" + got "^14.2.1" hpagent "^1.2.0" js-yaml "^4.1.0" - monaco-page-objects "^3.12.0" + monaco-page-objects "^3.14.1" sanitize-filename "^1.6.3" - selenium-webdriver "^4.16.0" + selenium-webdriver "^4.18.1" targz "^1.0.1" - unzipper "^0.10.14" - vscode-extension-tester-locators "^3.10.0" + vscode-extension-tester-locators "^3.12.2" vscode-jsonrpc@^4.0.0: version "4.0.0" @@ -5162,16 +5477,16 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@>=8.14.2: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - ws@^7.5.10: version "7.5.10" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== +ws@^8.17.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + xml2js@^0.4.23: version "0.4.23" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"