├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ └── main.yml ├── .gitignore ├── .vscode ├── launch.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── RELEASE.md ├── docs ├── additional-languages.png ├── autocorrect-all-command.png ├── autocorrect-command.png ├── autocorrect.png ├── command-path.png ├── format-on-save.png ├── keybind.png ├── layout-mode.png ├── lint-mode.png ├── mode.png ├── problems.png ├── safe-autocorrect.png ├── status-info.png ├── status-ok.png ├── status-parse-fail.png ├── status-warn.png ├── workspace.png └── yjit-enabled.png ├── package.json ├── rubocop.png ├── src ├── extension.ts └── test │ ├── runTest.ts │ └── suite │ ├── automation.ts │ ├── index.test.ts │ ├── index.ts │ └── setup.ts ├── tsconfig.json └── yarn.lock /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [bbatsov, koic] 4 | patreon: bbatsov 5 | open_collective: rubocop 6 | tidelift: "rubygems/rubocop" 7 | custom: https://www.paypal.me/bbatsov 8 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: 'github-actions' 4 | directory: '/' 5 | schedule: 6 | interval: 'weekly' 7 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Main 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request: 7 | jobs: 8 | build: 9 | name: Build Distributables 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: actions/setup-node@v4 14 | with: 15 | node-version: '18' 16 | cache: yarn 17 | - name: Compile extension 18 | run: | 19 | yarn install --frozen-lockfile 20 | yarn lint 21 | yarn compile 22 | test: 23 | name: Run Tests 24 | runs-on: ubuntu-latest 25 | steps: 26 | - uses: actions/checkout@v4 27 | - uses: actions/setup-node@v4 28 | with: 29 | node-version: '18' 30 | cache: yarn 31 | - uses: ruby/setup-ruby@v1 32 | with: 33 | bundler-cache: true 34 | ruby-version: '3.2' 35 | - name: Install a supported version of the RuboCop gem 36 | run: gem install rubocop 37 | - name: Compile Tests 38 | run: | 39 | yarn install --frozen-lockfile 40 | yarn test-compile 41 | - name: Setup GUI Environment 42 | run: | 43 | sudo apt-get update 44 | sudo apt-get install -yq dbus-x11 ffmpeg > /dev/null 45 | mkdir -p ~/bin 46 | mkdir -p ~/var/run 47 | cat < ~/bin/xvfb-shim 48 | #! /bin/bash 49 | echo DISPLAY=\$DISPLAY >> ${GITHUB_ENV} 50 | echo XAUTHORITY=\$XAUTHORITY >> ${GITHUB_ENV} 51 | sleep 86400 52 | EOF 53 | chmod a+x ~/bin/xvfb-shim 54 | dbus-launch >> ${GITHUB_ENV} 55 | start-stop-daemon --start --quiet --pidfile ~/var/run/Xvfb.pid --make-pidfile --background --exec /usr/bin/xvfb-run -- ~/bin/xvfb-shim 56 | echo -n "Waiting for Xvfb to start..." 57 | while ! grep -q DISPLAY= ${GITHUB_ENV}; do 58 | echo -n . 59 | sleep 3 60 | done 61 | if: runner.os == 'Linux' 62 | - name: Start Screen Recording 63 | run: | 64 | mkdir -p $PWD/videos-raw 65 | no_close=--no-close # uncomment to see ffmpeg output (i.e. leave stdio open) 66 | start-stop-daemon $no_close --start --quiet --pidfile ~/var/run/ffmpeg.pid --make-pidfile --background --exec /usr/bin/ffmpeg -- -nostdin -f x11grab -video_size 1280x1024 -framerate 10 -i ${DISPLAY}.0+0,0 $PWD/videos-raw/test.mp4 67 | if: runner.os == 'Linux' 68 | - name: Cache VS Code Binary 69 | id: vscode-test 70 | uses: actions/cache@v4 71 | with: 72 | path: .vscode-test/ 73 | key: ${{ runner.os }}-vscode-test 74 | - name: Run Tests 75 | run: yarn test 76 | - name: Stop Screen Recording 77 | run: | 78 | start-stop-daemon --stop --pidfile ~/var/run/ffmpeg.pid 79 | sleep 3 80 | mkdir -p $PWD/videos 81 | for f in $PWD/videos-raw/*.mp4; do 82 | out=`basename $f` 83 | ffmpeg -i $f -vf format=yuv420p $PWD/videos/$out 84 | done 85 | if: always() && runner.os == 'Linux' 86 | - name: Archive Screen Recording 87 | uses: actions/upload-artifact@v4 88 | with: 89 | name: videos 90 | path: | 91 | videos/ 92 | if: always() && runner.os == 'Linux' 93 | - name: Teardown GUI Environment 94 | run: | 95 | start-stop-daemon --stop --pidfile ~/var/run/Xvfb.pid 96 | kill $DBUS_SESSION_BUS_PID 97 | if: always() && runner.os == 'Linux' 98 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.vsix 2 | .vscode-test 3 | .ruby-version 4 | node_modules 5 | out 6 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/out/extension.js" 17 | ], 18 | "preLaunchTask": "${defaultBuildTask}" 19 | }, 20 | { 21 | "name": "Run Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "runtimeExecutable": "${execPath}", 25 | "args": [ 26 | "--extensionDevelopmentPath=${workspaceFolder}", 27 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 28 | ], 29 | "outFiles": [ 30 | "${workspaceFolder}/out/**/*.js" 31 | ], 32 | "preLaunchTask": "test-watch" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$esbuild-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | }, 19 | { 20 | "label": "test-watch", 21 | "type": "npm", 22 | "script": "test-watch", 23 | "problemMatcher": "$tsc-watch", 24 | "isBackground": true, 25 | "presentation": { 26 | "reveal": "never" 27 | }, 28 | "group": { 29 | "kind": "build", 30 | "isDefault": false 31 | } 32 | } 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | /.github 2 | /.vscode 3 | /.vscode-test 4 | /src 5 | /.gitignore 6 | /tsconfig.json 7 | /docs 8 | node_modules 9 | out/test 10 | **/*.map 11 | **/*.ts 12 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change log 2 | 3 | ## master (unreleased) 4 | 5 | ## 0.8.0 (2025-04-04) 6 | 7 | ### New features 8 | 9 | - Add option for supported language. (@ksss) 10 | 11 | ## 0.7.0 (2023-11-18) 12 | 13 | ### Changes 14 | 15 | - Add watcher for .rubocop_todo.yml. (@koic) 16 | 17 | ## 0.6.0 (2023-08-19) 18 | 19 | ### New features 20 | 21 | - Support `rubocop.formatAutocorrectsAll` command, which requires RuboCop 1.56+. (@koic) 22 | 23 | ## 0.5.0 (2023-08-05) 24 | 25 | ### New features 26 | 27 | - Support `rubocop.lintMode` option, which requires RuboCop 1.55+. (@koic) 28 | 29 | ## 0.4.0 (2023-07-26) 30 | 31 | ### New features 32 | 33 | - Support `rubocop.layoutMode` option, which requires RuboCop 1.55+. (@koic) 34 | 35 | ## 0.3.0 (2023-07-13) 36 | 37 | ### New features 38 | 39 | - Support `rubocop.safeAutocorrect` option, which requires RuboCop 1.54+. (@koic) 40 | 41 | ## 0.2.0 (2023-06-29) 42 | 43 | ### New features 44 | 45 | - Add `rubocop.yjitEnabled` option to speed up the RuboCop LSP server. (@koic) 46 | 47 | ## 0.1.0 (2023-06-23) 48 | 49 | ### New features 50 | 51 | - Initial release on VS Code Extension Marketplace. (@koic) 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2023 Koichi Ito 4 | Portions copyright (c) 2023-present Test Double Inc. 5 | Portions copyright (c) 2022-2023 Kevin Newton 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in 15 | all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vscode-rubocop 2 | 3 | [![vscode-rubocop](https://img.shields.io/badge/-Visual%20Studio%20Code-007ACC.svg?logo=visual-studio-code&style=flat)](https://marketplace.visualstudio.com/items?itemName=rubocop.vscode-rubocop) 4 | [![Build Status](https://github.com/rubocop/vscode-rubocop/actions/workflows/main.yml/badge.svg)](https://github.com/rubocop/vscode-rubocop/actions/workflows/main.yml) 5 | 6 | This is the official VS Code extension for [RuboCop](https://github.com/rubocop/rubocop). 7 | 8 | You can install this VS Code extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=rubocop.vscode-rubocop). 9 | 10 | For VS Code-based IDEs like VSCodium or Eclipse Theia, the extension can be installed from the [Open VSX Registry](https://open-vsx.org/extension/rubocop/vscode-rubocop). 11 | 12 | ## Language Server Capabilities 13 | 14 | These are the capabilities of this extension, each enabled by RuboCop's [built-in LSP server](https://docs.rubocop.org/rubocop/usage/lsp.html). 15 | 16 | It supports the following capabilities: 17 | 18 | - Fast Diagnostics (Linting) 19 | - Fast Document Formatting 20 | - Execute Command ([Trigger autocorrect](https://github.com/rubocop/vscode-rubocop#manually-triggering-a-format-with-autocorrects)) 21 | 22 | :star2: **Pro tip**: Enabling [**Format On Save**](https://github.com/rubocop/vscode-rubocop#editorformatonsave) is recommended. 23 | By activating just this one setting, code gets autocorrected every time a file is saved. Don't miss out on this game-changing boost to your development experience! 24 | 25 | ## Requirements 26 | 27 | * [RuboCop](https://rubygems.org/gems/rubocop) 1.53.0+ 28 | * [VS Code](https://code.visualst) 1.75.0+ 29 | 30 | ## Configuration 31 | 32 | The extension only offers a few of its own configuration options, but because it conforms to 33 | the [VS Code Formatting API](https://code.visualstudio.com/blogs/2016/11/15/formatters-best-practices#_the-formatting-api), 34 | several general editor settings can impact the extension's behavior as well. 35 | 36 | ## Configuring the VS Code editor to use RuboCop 37 | 38 | There are two general editor settings that you'll want to verify are set in 39 | order to use RuboCop as your formatter. 40 | 41 | ### editor.formatOnSave 42 | 43 | To automatically format your Ruby with RuboCop, check **Format on Save** in the 44 | **Formatting** settings under **Text Editor**: 45 | 46 | ![Format a file on save. A formatter must be available, the file must not be saved after delay, and the editor must not be shutting down.](/docs/format-on-save.png) 47 | 48 | Or, in `settings.json`: 49 | 50 | ```json 51 | "editor.formatOnSave": true, 52 | ``` 53 | 54 | ### editor.defaultFormatter 55 | 56 | Next, if you have installed multiple extensions that provide formatting for Ruby 57 | files (it's okay if you're not sure—it can be hard to tell), you can specify 58 | RuboCop as your formatter of choice by setting `editor.defaultFormatter` under 59 | a `"[ruby]"` section of `settings.json` like this: 60 | 61 | ```json 62 | "[ruby]": { 63 | "editor.defaultFormatter": "rubocop.vscode-rubocop" 64 | }, 65 | ``` 66 | 67 | ## Configuring RuboCop extension options 68 | 69 | To edit RuboCop's own options, first expand **Extensions** and select 70 | **RuboCop** from the sidebar of the Settings editor. 71 | 72 | ### rubocop.mode 73 | 74 | The Mode setting determines how (and whether) RuboCop runs in a given 75 | workspace. Generally, it will try to execute `rubocop` via `bundle exec` if 76 | possible, and fall back on searching for a global `rubocop` bin in your `PATH`. 77 | 78 | ![Enable RuboCop via the workspace's Gemfile or else fall back on a global installation unless a Gemfile is present and its bundle does not include rubocop](/docs/mode.png) 79 | 80 | * _"Always run—whether via Bundler or globally"_ (JSON: `enableUnconditionally`) 81 | this mode will first attempt to run via Bundler, but if that fails for any 82 | reason, it will attempt to run `rubocop` in your PATH 83 | * **[Default]** _"Run unless the bundle excludes rubocop"_ (JSON: 84 | `enableViaGemfileOrMissingGemfile`) this mode will attempt to run RuboCop via 85 | Bundler, but if a bundle exists and the `rubocop` gem isn't in it (i.e. you're 86 | working in a project doesn't use RuboCop), the extension will disable itself. 87 | If, however, no bundle is present in the workspace, it will fall back on the 88 | first `rubocop` executable in your PATH 89 | * _"Run only via Bundler, never globally"_ (JSON: `enableViaGemfile`) the same as 90 | the default `enableViaGemfileOrMissingGemfile`, but will never run 91 | `rubocop` from your PATH (as a result, single-file windows and workspace 92 | folders without a Gemfile may never activate the extension) 93 | * _"Run only globally, never via Bundler"_ (JSON: `onlyRunGlobally`) if you want 94 | to avoid running the bundled version of RuboCop, this mode will never 95 | interact with Bundler and will only run `rubocop` on your PATH 96 | * _"Disable the extension"_ (JSON: `disable`) disable the extension entirely 97 | 98 | Or, in `settings.json`: 99 | 100 | ```json 101 | "rubocop.mode": "enableViaGemfile", 102 | ``` 103 | 104 | ### rubocop.autocorrect 105 | 106 | The autocorrect option does what it says on the tin. if you don't want RuboCop to 107 | automatically edit your documents on save, you can disable it here: 108 | 109 | ![Autocorrect](/docs/autocorrect.png) 110 | 111 | You might want to disable this if you're using RuboCop to highlight problems 112 | but don't want it to edit your files automatically. You could also accomplish 113 | this by disabling `editor.formatOnSave`, but as that's a global setting across 114 | all languages, it's more straightforward to uncheck this extension setting. 115 | 116 | Or, in `settings.json`: 117 | 118 | ```json 119 | "rubocop.autocorrect": true, 120 | ``` 121 | 122 | ### rubocop.safeAutocorrect 123 | 124 | **This feature requires RuboCop 1.54+ to be enabled.** 125 | 126 | When autocorrect is enabled, `safeAutocorrect` controls its safety. By default, 127 | it is enabled to perform safe autocorrections. If you disable it, unsafe 128 | autocorrections will also be performed, you can disable it here: 129 | 130 | ![SafeAutocorrect](/docs/safe-autocorrect.png) 131 | 132 | Or, in `settings.json`: 133 | 134 | ```json 135 | "rubocop.safeAutocorrect": false, 136 | ``` 137 | 138 | ### rubocop.lintMode 139 | 140 | **This feature requires RuboCop 1.55+ to be enabled.** 141 | 142 | Run lint only cops (`rubocop -l`). If you only want to enable the feature as a linter like `ruby -w`, 143 | you can conveniently set it here: 144 | 145 | ![LintMode](/docs/lint-mode.png) 146 | 147 | Or, in `settings.json`: 148 | 149 | ```json 150 | "rubocop.lintMode": true, 151 | ``` 152 | 153 | ### rubocop.layoutMode 154 | 155 | **This feature requires RuboCop 1.55+ to be enabled.** 156 | 157 | Run layout only cops. If you only want to enable the feature as a formatter, 158 | you can conveniently set it here: 159 | 160 | ![LayoutMode](/docs/layout-mode.png) 161 | 162 | Or, in `settings.json`: 163 | 164 | ```json 165 | "rubocop.layoutMode": true, 166 | ``` 167 | 168 | Furthermore, enabling autocorrect with the `editor.formatOnSave` to the effect of 169 | `rubocop -x` command line option. 170 | 171 | ### rubocop.commandPath 172 | 173 | As described above, the extension contains logic to determine which version of 174 | `rubocop` to launch. If you want a specific binary to run instead, you can 175 | set it here. 176 | 177 | ![Command Path](/docs/command-path.png) 178 | 179 | This will override whatever search strategy is set in `rubocop.mode` 180 | (except for `disable`, in which case the extension will remain disabled). 181 | 182 | Or, in `settings.json`: 183 | 184 | ```json 185 | { 186 | "rubocop.commandPath": "${userHome}/.rbenv/shims/rubocop" 187 | } 188 | ``` 189 | 190 | ### rubocop.yjitEnabled 191 | 192 | This extension supports YJIT, which can speed up the built-in language server in RuboCop. 193 | The `rubocop.yjitEnabled` option is enabled by default. 194 | 195 | ![YJIT Enabled](/docs/yjit-enabled.png) 196 | 197 | You can disable YJIT by unchecking. 198 | 199 | Or, in `settings.json`: 200 | 201 | ```json 202 | "rubocop.yjitEnabled": false 203 | ``` 204 | 205 | ### rubocop.additionalLanguages 206 | 207 | This extension is enabled by default only for files that VS Code recognizes as **ruby** files. 208 | 209 | You can enable this extension for non-Ruby files as well using the `rubocop.additionalLanguages` option. By default, it is empty `[]`. 210 | 211 | This extension can be enabled not only for the default `ruby` files but also for `markdown` or `erb` files. 212 | 213 | ![Additional Languages](/docs/additional-languages.png) 214 | 215 | Or, in `settings.json`: 216 | 217 | ```json 218 | "rubocop.additionalLanguages": ["markdown", "erb"] 219 | ``` 220 | 221 | ### Changing settings only for a specific project 222 | 223 | You may want to apply certain settings to a specific project, which you can do 224 | by configuring them in the [Workspace scope](https://code.visualstudio.com/docs/getstarted/settings#_workspace-settings) 225 | as opposed to the global User scope. 226 | 227 | ![Workspace scope](/docs/workspace.png) 228 | 229 | Clicking "Workspace" before changing a setting will save it to 230 | `.vscode/settings.json` inside the root workspace directory and will not affect 231 | the extension's behavior in other workspace folders. 232 | 233 | ## Manually triggering a format with autocorrects 234 | 235 | In addition to the built-in VS Code Formatting API, you can trigger the 236 | extension to format and autocorrect the current file listing by running 237 | the command "RuboCop: Format with Autocorrects". This is equivalent to `rubocop -a`: 238 | 239 | ![Autocorrect command](/docs/autocorrect-command.png) 240 | 241 | This is handy if you don't want to enable format-on-save, already have another 242 | formatter associated with Ruby files, want to format your code _before_ saving, 243 | or just want to bind a shortcut to RuboCop's formatting action. 244 | 245 | To map a keybind to the command, search for it by name in the [Keyboard Shortcuts 246 | editor](https://code.visualstudio.com/docs/getstarted/keybindings#_keyboard-shortcuts-editor): 247 | 248 | ![Keybinding](/docs/keybind.png) 249 | 250 | Or, in `keybindings.json`: 251 | 252 | ```json 253 | [ 254 | { 255 | "key": "ctrl+alt+cmd+f", 256 | "command": "rubocop.formatAutocorrects" 257 | } 258 | ] 259 | ``` 260 | 261 | You can also trigger the extension to format and autocorrect all the current file listing by running 262 | the command "RuboCop: Format All with Autocorrects". This is equivalent to `rubocop -A`: 263 | 264 | ![Autocorrect all command](/docs/autocorrect-all-command.png) 265 | 266 | **This command "RuboCop: Format All with Autocorrects" requires RuboCop 1.56+ to be enabled.** 267 | 268 | You can use two autocorrect commands depending on the purpose. 269 | 270 | ## Decoding the Status Bar item 271 | 272 | The extension also includes a status bar item to convey the status of the 273 | current file listing at a glance. 274 | 275 | When the file conforms to RuboCop without issue: 276 | 277 | ![Status: no issues](/docs/status-ok.png) 278 | 279 | When the file contains a low-severity formatting issue: 280 | 281 | ![Status: info](/docs/status-info.png) 282 | 283 | When the file contains a normal linter error: 284 | 285 | ![Status: info](/docs/status-warn.png) 286 | 287 | When the file fails to parse at all: 288 | 289 | ![Status: parse failure](/docs/status-parse-fail.png) 290 | 291 | Clicking the status bar item will open the problems tab: 292 | 293 | ![Problems tab](/docs/problems.png) 294 | 295 | ## Limitations 296 | 297 | There's some room for improvement yet, but it isn't yet clear whether these 298 | limitations will be a big deal in practice: 299 | 300 | * The extension will only launch a single instance of `rubocop --lsp` per 301 | workspace. If you're using a [multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces), 302 | they'll all be handled by whatever RuboCop version is found in the first one 303 | * RuboCop's LSP only supports "Full" [text document synchronization](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_synchronization), 304 | both because it seemed hard to implement incremental sync correctly and 305 | because attempting to pass RuboCop's runner a partial document would result in 306 | inconsistent formatting results 307 | 308 | ## Acknowledgements 309 | 310 | This extension's codebase was initially based on [Standard Ruby](https://github.com/standardrb)'s 311 | [vscode-standard-ruby](https://github.com/standardrb/vscode-standard-ruby) and 312 | [Kevin Newton](https://github.com/kddnewton)'s [vscode-syntax-tree](https://github.com/ruby-syntax-tree/vscode-syntax-tree) 313 | extension, which has a similar architecture (VS Code language client 314 | communicating with a long-running Ruby process via STDIO). Thank you! 315 | 316 | ## Code of Conduct 317 | 318 | This project follows The RuboCop Community [Code of Conduct](https://github.com/rubocop/rubocop/blob/master/CODE_OF_CONDUCT.md). 319 | -------------------------------------------------------------------------------- /RELEASE.md: -------------------------------------------------------------------------------- 1 | To cut a release of the extension. 2 | 3 | 1. Update `version` in package.json and CHANGELOG.md 4 | 2. Commit and make sure the CI is green 5 | 3. Add a release tag with the git command and push to GitHub 6 | 4. Release to [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=rubocop.vscode-rubocop) 7 | and [Open VSX Registry](https://open-vsx.org/extension/rubocop/vscode-rubocop). 8 | 9 | You can published the extension to Visual Studio Marketplace with either A or B below. 10 | And, for releasing to the Open VSX Registry, please refer to resources like https://github.com/eclipse/openvsx/wiki/Publishing-Extensions. 11 | 12 | ## A. Release on web site of Visual Studio Marketplace 13 | 14 | Generate vscode-rubocop-x.y.z.vsix using `yarn vsce package` command: 15 | 16 | ```console 17 | $ yarn vsce package 18 | ``` 19 | 20 | 1. Login to Visual Studio Marketplace with RuboCop Headquarters privileges 21 | 2. Access to [Manage Publishers & Extensions](https://marketplace.visualstudio.com/manage) 22 | 3. Right click on RuboCop and select "update" 23 | 4. Upload vscode-rubocop-x.y.z.vsix 24 | 25 | ## B. Release on terminal 26 | 27 | You must login with vsce using the project's 28 | [personal access token](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#get-a-personal-access-token): 29 | 30 | ```console 31 | $ yarn vsce login rubocop 32 | ``` 33 | 34 | Next, you should just need to run: 35 | 36 | ```console 37 | $ yarn run vsce:publish 38 | ``` 39 | -------------------------------------------------------------------------------- /docs/additional-languages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/additional-languages.png -------------------------------------------------------------------------------- /docs/autocorrect-all-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/autocorrect-all-command.png -------------------------------------------------------------------------------- /docs/autocorrect-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/autocorrect-command.png -------------------------------------------------------------------------------- /docs/autocorrect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/autocorrect.png -------------------------------------------------------------------------------- /docs/command-path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/command-path.png -------------------------------------------------------------------------------- /docs/format-on-save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/format-on-save.png -------------------------------------------------------------------------------- /docs/keybind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/keybind.png -------------------------------------------------------------------------------- /docs/layout-mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/layout-mode.png -------------------------------------------------------------------------------- /docs/lint-mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/lint-mode.png -------------------------------------------------------------------------------- /docs/mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/mode.png -------------------------------------------------------------------------------- /docs/problems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/problems.png -------------------------------------------------------------------------------- /docs/safe-autocorrect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/safe-autocorrect.png -------------------------------------------------------------------------------- /docs/status-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/status-info.png -------------------------------------------------------------------------------- /docs/status-ok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/status-ok.png -------------------------------------------------------------------------------- /docs/status-parse-fail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/status-parse-fail.png -------------------------------------------------------------------------------- /docs/status-warn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/status-warn.png -------------------------------------------------------------------------------- /docs/workspace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/workspace.png -------------------------------------------------------------------------------- /docs/yjit-enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/docs/yjit-enabled.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-rubocop", 3 | "displayName": "RuboCop", 4 | "description": "VS Code extension for the RuboCop linter and code formatter.", 5 | "icon": "rubocop.png", 6 | "version": "0.8.0", 7 | "publisher": "rubocop", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/rubocop/vscode-rubocop.git" 11 | }, 12 | "license": "MIT", 13 | "bugs": { 14 | "url": "https://github.com/rubocop/vscode-rubocop/issues" 15 | }, 16 | "packageManager": "yarn@1.22.19", 17 | "engines": { 18 | "vscode": "^1.75.0" 19 | }, 20 | "categories": [ 21 | "Formatters", 22 | "Linters" 23 | ], 24 | "keywords": [ 25 | "ruby", 26 | "rubocop", 27 | "style-guide", 28 | "linter", 29 | "formatter", 30 | "autocorrect", 31 | "language-server" 32 | ], 33 | "activationEvents": [ 34 | "onLanguage:ruby", 35 | "workspaceContains:Gemfile.lock" 36 | ], 37 | "main": "./out/extension", 38 | "contributes": { 39 | "commands": [ 40 | { 41 | "command": "rubocop.start", 42 | "title": "RuboCop: Start Language Server" 43 | }, 44 | { 45 | "command": "rubocop.stop", 46 | "title": "RuboCop: Stop Language Server" 47 | }, 48 | { 49 | "command": "rubocop.restart", 50 | "title": "RuboCop: Restart Language Server" 51 | }, 52 | { 53 | "command": "rubocop.formatAutocorrects", 54 | "title": "RuboCop: Format with Autocorrects" 55 | }, 56 | { 57 | "command": "rubocop.formatAutocorrectsAll", 58 | "title": "RuboCop: Format All with Autocorrects" 59 | }, 60 | { 61 | "command": "rubocop.showOutputChannel", 62 | "title": "RuboCop: Show Output Channel" 63 | } 64 | ], 65 | "configuration": [ 66 | { 67 | "type": "object", 68 | "title": "RuboCop", 69 | "properties": { 70 | "rubocop.mode": { 71 | "order": 1, 72 | "type": "string", 73 | "default": "enableViaGemfileOrMissingGemfile", 74 | "enum": [ 75 | "enableUnconditionally", 76 | "enableViaGemfileOrMissingGemfile", 77 | "enableViaGemfile", 78 | "onlyRunGlobally", 79 | "disable" 80 | ], 81 | "enumItemLabels": [ 82 | "Always run—whether via Bundler or globally", 83 | "Run unless the bundle excludes rubocop", 84 | "Run only via Bundler, never globally", 85 | "Run only globally, never via Bundler", 86 | "Disable the extension" 87 | ], 88 | "markdownEnumDescriptions": [ 89 | "Enable RuboCop via the workspace's Gemfile or else fall back on a global installation", 90 | "Enable RuboCop via the workspace's Gemfile or else fall back on a global installation **unless** a Gemfile is present and its bundle does not include `rubocop`", 91 | "Enable RuboCop only if the workspace's Gemfile includes `rubocop` and _do not_ fall back on a global installation", 92 | "Enable RuboCop and always run `rubocop` without Bundler", 93 | "Disable the RuboCop extension entirely" 94 | ] 95 | }, 96 | "rubocop.autocorrect": { 97 | "order": 2, 98 | "type": "boolean", 99 | "default": true, 100 | "description": "Automatically format code and correct RuboCop offenses." 101 | }, 102 | "rubocop.safeAutocorrect": { 103 | "order": 3, 104 | "type": "boolean", 105 | "default": true, 106 | "description": "When autocorrect is enabled, `safeAutocorrect` controls its safety. This feature requires RuboCop 1.54+ to be enabled." 107 | }, 108 | "rubocop.lintMode": { 109 | "order": 4, 110 | "type": "boolean", 111 | "default": false, 112 | "description": "Run only lint cops. This feature requires RuboCop 1.55+ to be enabled." 113 | }, 114 | "rubocop.layoutMode": { 115 | "order": 5, 116 | "type": "boolean", 117 | "default": false, 118 | "description": "Run only layout cops. This feature requires RuboCop 1.55+ to be enabled." 119 | }, 120 | "rubocop.commandPath": { 121 | "order": 6, 122 | "type": "string", 123 | "default": "", 124 | "markdownDescription": "Absolute path to rubocop executable. Overrides default search order and, if missing, will not run RuboCop via Bundler or a `rubocop` executable on your PATH.\n\nSupports variables `${userHome}`, `${pathSeparator}`, and `${cwd}`." 125 | }, 126 | "rubocop.yjitEnabled": { 127 | "order": 7, 128 | "type": "boolean", 129 | "default": true, 130 | "markdownDescription": "Use YJIT to speed up the RuboCop LSP server." 131 | }, 132 | "rubocop.additionalLanguages": { 133 | "order": 8, 134 | "type": "array", 135 | "default": [], 136 | "items": { 137 | "type": "string" 138 | }, 139 | "markdownDescription": "List of additional languages that RuboCop supported. (e.g. `erb`)" 140 | } 141 | } 142 | } 143 | ] 144 | }, 145 | "scripts": { 146 | "clean": "rm -rf ./out", 147 | "esbuild-base": "esbuild --bundle --external:vscode --format=cjs --outfile=out/extension.js --platform=node src/extension.ts", 148 | "compile": "yarn run esbuild-base --sourcemap", 149 | "watch": "yarn run esbuild-base --sourcemap --watch", 150 | "lint": "eslint .", 151 | "test": "node ./out/test/runTest.js", 152 | "test-compile": "tsc -p ./", 153 | "test-watch": "tsc --watch -p ./", 154 | "vsce:package": "vsce package --no-yarn --githubBranch main", 155 | "vsce:publish": "vsce publish --no-yarn --githubBranch main", 156 | "vscode:prepublish": "yarn run esbuild-base --minify" 157 | }, 158 | "dependencies": { 159 | "semver": "^7.3.8", 160 | "vscode-languageclient": "8.0.2" 161 | }, 162 | "devDependencies": { 163 | "@types/glob": "^8.0.0", 164 | "@types/mocha": "^10.0.0", 165 | "@types/node": "^18.0.0", 166 | "@types/vscode": "^1.68.0", 167 | "@typescript-eslint/eslint-plugin": "^5.47.0", 168 | "@typescript-eslint/parser": "^5.47.0", 169 | "@vscode/test-electron": "^2.2.0", 170 | "@vscode/vsce": "^2.18.0", 171 | "esbuild": "^0.17.6", 172 | "eslint": "^8.22.0", 173 | "glob": "^8.0.3", 174 | "mocha": "^10.0.0", 175 | "typescript": "^4.7.4" 176 | }, 177 | "eslintConfig": { 178 | "parser": "@typescript-eslint/parser", 179 | "plugins": [ 180 | "@typescript-eslint" 181 | ], 182 | "extends": [ 183 | "eslint:recommended", 184 | "plugin:@typescript-eslint/eslint-recommended", 185 | "plugin:@typescript-eslint/recommended" 186 | ], 187 | "rules": { 188 | "space-before-function-paren": [ 189 | "error", 190 | "never" 191 | ], 192 | "semi": "error" 193 | }, 194 | "ignorePatterns": [ 195 | "out" 196 | ] 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /rubocop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rubocop/vscode-rubocop/10dc3a87c28d3b46c5c4cf169829a90dac89ce41/rubocop.png -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import { exec } from 'child_process'; 2 | import { homedir } from 'os'; 3 | import * as path from 'path'; 4 | import { satisfies } from 'semver'; 5 | import { 6 | Diagnostic, 7 | DiagnosticSeverity, 8 | ExtensionContext, 9 | OutputChannel, 10 | commands, 11 | window, 12 | workspace, 13 | ProviderResult, 14 | TextEdit, 15 | TextEditor, 16 | ThemeColor, 17 | StatusBarAlignment, 18 | StatusBarItem 19 | } from 'vscode'; 20 | import { 21 | DidOpenTextDocumentNotification, 22 | Disposable, 23 | Executable, 24 | ExecutableOptions, 25 | ExecuteCommandRequest, 26 | LanguageClient, 27 | LanguageClientOptions, 28 | RevealOutputChannelOn 29 | } from 'vscode-languageclient/node'; 30 | 31 | class ExecError extends Error { 32 | command: string; 33 | options: object; 34 | code: number | undefined; 35 | stdout: string; 36 | stderr: string; 37 | 38 | constructor(message: string, command: string, options: object, code: number | undefined, stdout: string, stderr: string) { 39 | super(message); 40 | this.command = command; 41 | this.options = options; 42 | this.code = code; 43 | this.stdout = stdout; 44 | this.stderr = stderr; 45 | } 46 | 47 | log(): void { 48 | log(`Command \`${this.command}\` failed with exit code ${this.code ?? '?'} (exec options: ${JSON.stringify(this.options)})`); 49 | if (this.stdout.length > 0) { 50 | log(`stdout:\n${this.stdout}`); 51 | } 52 | if (this.stderr.length > 0) { 53 | log(`stderr:\n${this.stderr}`); 54 | } 55 | } 56 | } 57 | 58 | const promiseExec = async function(command: string, options = { cwd: getCwd() }): Promise<{ stdout: string, stderr: string }> { 59 | return await new Promise((resolve, reject) => { 60 | exec(command, options, (error, stdout, stderr) => { 61 | stdout = stdout.toString().trim(); 62 | stderr = stderr.toString().trim(); 63 | if (error != null) { 64 | reject(new ExecError(error.message, command, options, error.code, stdout, stderr)); 65 | } else { 66 | resolve({ stdout, stderr }); 67 | } 68 | }); 69 | }); 70 | }; 71 | 72 | export let languageClient: LanguageClient | null = null; 73 | let outputChannel: OutputChannel | undefined; 74 | let statusBarItem: StatusBarItem | undefined; 75 | let diagnosticCache: Map = new Map(); 76 | 77 | function getCwd(): string { 78 | return workspace.workspaceFolders?.[0]?.uri?.fsPath ?? process.cwd(); 79 | } 80 | 81 | function log(s: string): void { 82 | outputChannel?.appendLine(`[client] ${s}`); 83 | } 84 | 85 | function getConfig(key: string): T | undefined { 86 | return workspace.getConfiguration('rubocop').get(key); 87 | } 88 | 89 | function supportedLanguage(languageId: string): boolean { 90 | return languageId === 'ruby' || languageId === 'gemfile'; 91 | } 92 | 93 | function registerCommands(): Disposable[] { 94 | return [ 95 | commands.registerCommand('rubocop.start', startLanguageServer), 96 | commands.registerCommand('rubocop.stop', stopLanguageServer), 97 | commands.registerCommand('rubocop.restart', restartLanguageServer), 98 | commands.registerCommand('rubocop.showOutputChannel', () => outputChannel?.show()), 99 | commands.registerCommand('rubocop.formatAutocorrects', formatAutocorrects), 100 | commands.registerCommand('rubocop.formatAutocorrectsAll', formatAutocorrectsAll) 101 | ]; 102 | } 103 | 104 | function registerWorkspaceListeners(): Disposable[] { 105 | return [ 106 | workspace.onDidChangeConfiguration(async event => { 107 | if (event.affectsConfiguration('rubocop')) { 108 | await restartLanguageServer(); 109 | } 110 | }) 111 | ]; 112 | } 113 | 114 | export enum BundleStatus { 115 | valid = 0, 116 | missing = 1, 117 | errored = 2 118 | } 119 | 120 | export enum RuboCopBundleStatus { 121 | included = 0, 122 | excluded = 1, 123 | errored = 2 124 | } 125 | 126 | async function displayBundlerError(e: ExecError): Promise { 127 | e.log(); 128 | log('Failed to invoke Bundler in the current workspace. After resolving the issue, run the command `RuboCop: Start Language Server`'); 129 | if (getConfig('mode') !== 'enableUnconditionally') { 130 | await displayError('Failed to run Bundler while initializing RuboCop', ['Show Output']); 131 | } 132 | } 133 | 134 | async function isValidBundlerProject(): Promise { 135 | try { 136 | await promiseExec('bundle list --name-only', { cwd: getCwd() }); 137 | return BundleStatus.valid; 138 | } catch (e) { 139 | if (!(e instanceof ExecError)) return BundleStatus.errored; 140 | 141 | if (e.stderr.startsWith('Could not locate Gemfile')) { 142 | log('No Gemfile found in the current workspace'); 143 | return BundleStatus.missing; 144 | } else { 145 | await displayBundlerError(e); 146 | return BundleStatus.errored; 147 | } 148 | } 149 | } 150 | 151 | async function isInBundle(): Promise { 152 | try { 153 | await promiseExec('bundle show rubocop', { cwd: getCwd() }); 154 | return RuboCopBundleStatus.included; 155 | } catch (e) { 156 | if (!(e instanceof ExecError)) return RuboCopBundleStatus.errored; 157 | 158 | if (e.stderr.startsWith('Could not locate Gemfile') || e.stderr === 'Could not find gem \'rubocop\'.') { 159 | return RuboCopBundleStatus.excluded; 160 | } else { 161 | await displayBundlerError(e); 162 | return RuboCopBundleStatus.errored; 163 | } 164 | } 165 | } 166 | 167 | async function shouldEnableIfBundleIncludesRuboCop(): Promise { 168 | const rubocopStatus = await isInBundle(); 169 | if (rubocopStatus === RuboCopBundleStatus.excluded) { 170 | log('Disabling RuboCop extension, because rubocop isn\'t included in the bundle'); 171 | } 172 | return rubocopStatus === RuboCopBundleStatus.included; 173 | } 174 | 175 | async function shouldEnableExtension(): Promise { 176 | let bundleStatus; 177 | switch (getConfig('mode')) { 178 | case 'enableUnconditionally': 179 | return true; 180 | case 'enableViaGemfileOrMissingGemfile': 181 | bundleStatus = await isValidBundlerProject(); 182 | if (bundleStatus === BundleStatus.valid) { 183 | return await shouldEnableIfBundleIncludesRuboCop(); 184 | } else { 185 | return bundleStatus === BundleStatus.missing; 186 | } 187 | case 'enableViaGemfile': 188 | return await shouldEnableIfBundleIncludesRuboCop(); 189 | case 'onlyRunGlobally': 190 | return true; 191 | case 'disable': 192 | return false; 193 | default: 194 | log('Invalid value for rubocop.mode'); 195 | return false; 196 | } 197 | } 198 | 199 | function hasCustomizedCommandPath(): boolean { 200 | const customCommandPath = getConfig('commandPath'); 201 | return customCommandPath != null && customCommandPath.length > 0; 202 | } 203 | 204 | const variablePattern = /\$\{([^}]*)\}/; 205 | function resolveCommandPath(): string { 206 | let customCommandPath = getConfig('commandPath') ?? ''; 207 | 208 | for (let match = variablePattern.exec(customCommandPath); match != null; match = variablePattern.exec(customCommandPath)) { 209 | switch (match[1]) { 210 | case 'cwd': 211 | customCommandPath = customCommandPath.replace(match[0], process.cwd()); 212 | break; 213 | case 'pathSeparator': 214 | customCommandPath = customCommandPath.replace(match[0], path.sep); 215 | break; 216 | case 'userHome': 217 | customCommandPath = customCommandPath.replace(match[0], homedir()); 218 | break; 219 | } 220 | } 221 | 222 | return customCommandPath; 223 | } 224 | 225 | async function getCommand(): Promise { 226 | if (hasCustomizedCommandPath()) { 227 | return resolveCommandPath(); 228 | } else if (getConfig('mode') !== 'onlyRunGlobally' && await isInBundle() === RuboCopBundleStatus.included) { 229 | return 'bundle exec rubocop'; 230 | } else { 231 | return 'rubocop'; 232 | } 233 | } 234 | 235 | const requiredGemVersion = '>= 1.53.0'; 236 | async function supportedVersionOfRuboCop(command: string): Promise { 237 | try { 238 | const { stdout } = await promiseExec(`${command} -v`); 239 | const version = stdout.trim(); 240 | if (satisfies(version, requiredGemVersion)) { 241 | return true; 242 | } else { 243 | log('Disabling because the extension does not support this version of the rubocop gem.'); 244 | log(` Version reported by \`${command} -v\`: ${version} (${requiredGemVersion} required)`); 245 | await displayError(`Unsupported RuboCop version: ${version} (${requiredGemVersion} required)`, ['Show Output']); 246 | return false; 247 | } 248 | } catch (e) { 249 | if (e instanceof ExecError) e.log(); 250 | log('Failed to verify the version of rubocop installed, proceeding anyway...'); 251 | return true; 252 | } 253 | } 254 | 255 | async function buildExecutable(): Promise { 256 | const command = await getCommand(); 257 | if (command == null) { 258 | await displayError('Could not find RuboCop executable', ['Show Output', 'View Settings']); 259 | } else if (await supportedVersionOfRuboCop(command)) { 260 | const [exe, ...args] = (command).split(' '); 261 | const env = { ...process.env }; 262 | if (getConfig('yjitEnabled') ?? true) { 263 | env.RUBY_YJIT_ENABLE = "true"; 264 | } 265 | const options: ExecutableOptions = { 266 | env: env 267 | }; 268 | 269 | return { 270 | command: exe, 271 | args: args.concat('--lsp'), 272 | options: options 273 | }; 274 | } 275 | } 276 | 277 | function buildLanguageClientOptions(): LanguageClientOptions { 278 | const documentSelector = [ 279 | { scheme: 'file', language: 'ruby' }, 280 | { scheme: 'file', pattern: '**/Gemfile' } 281 | ]; 282 | const additionalLanguages = getConfig('additionalLanguages') ?? []; 283 | for (const lang of additionalLanguages) { 284 | documentSelector.push({ scheme: 'file', language: lang }); 285 | } 286 | return { 287 | documentSelector: documentSelector, 288 | diagnosticCollectionName: 'rubocop', 289 | initializationFailedHandler: (error) => { 290 | log(`Language server initialization failed: ${String(error)}`); 291 | return false; 292 | }, 293 | initializationOptions: { 294 | safeAutocorrect: getConfig('safeAutocorrect') ?? true, 295 | lintMode: getConfig('lintMode'), 296 | layoutMode: getConfig('layoutMode') 297 | }, 298 | revealOutputChannelOn: RevealOutputChannelOn.Never, 299 | outputChannel, 300 | synchronize: { 301 | fileEvents: [ 302 | workspace.createFileSystemWatcher('**/.rubocop.yml'), 303 | workspace.createFileSystemWatcher('**/.rubocop_todo.yml'), 304 | workspace.createFileSystemWatcher('**/Gemfile.lock') 305 | ] 306 | }, 307 | middleware: { 308 | provideDocumentFormattingEdits: (document, options, token, next): ProviderResult => { 309 | if (getConfig('autocorrect') ?? true) { 310 | return next(document, options, token); 311 | } 312 | }, 313 | handleDiagnostics: (uri, diagnostics, next) => { 314 | diagnosticCache.set(uri.toString(), diagnostics); 315 | updateStatusBar(); 316 | next(uri, diagnostics); 317 | } 318 | } 319 | }; 320 | } 321 | 322 | async function createLanguageClient(): Promise { 323 | const run = await buildExecutable(); 324 | if (run != null) { 325 | log(`Starting language server: ${run.command} ${run.args?.join(' ') ?? ''}`); 326 | return new LanguageClient('RuboCop', { run, debug: run }, buildLanguageClientOptions()); 327 | } else { 328 | return null; 329 | } 330 | } 331 | 332 | async function displayError(message: string, actions: string[]): Promise { 333 | const action = await window.showErrorMessage(message, ...actions); 334 | switch (action) { 335 | case 'Restart': 336 | await restartLanguageServer(); 337 | break; 338 | case 'Show Output': 339 | outputChannel?.show(); 340 | break; 341 | case 'View Settings': 342 | await commands.executeCommand('workbench.action.openSettings', 'rubocop'); 343 | break; 344 | default: 345 | if (action != null) log(`Unknown action: ${action}`); 346 | } 347 | } 348 | 349 | async function syncOpenDocumentsWithLanguageServer(languageClient: LanguageClient): Promise { 350 | for (const textDocument of workspace.textDocuments) { 351 | if (supportedLanguage(textDocument.languageId)) { 352 | await languageClient.sendNotification( 353 | DidOpenTextDocumentNotification.type, 354 | languageClient.code2ProtocolConverter.asOpenTextDocumentParams(textDocument) 355 | ); 356 | } 357 | } 358 | } 359 | 360 | async function handleActiveTextEditorChange(editor: TextEditor | undefined): Promise { 361 | if (languageClient == null || editor == null) return; 362 | 363 | if (supportedLanguage(editor.document.languageId) && !diagnosticCache.has(editor.document.uri.toString())) { 364 | await languageClient.sendNotification( 365 | DidOpenTextDocumentNotification.type, 366 | languageClient.code2ProtocolConverter.asOpenTextDocumentParams(editor.document) 367 | ); 368 | } 369 | updateStatusBar(); 370 | } 371 | 372 | async function afterStartLanguageServer(languageClient: LanguageClient): Promise { 373 | diagnosticCache = new Map(); 374 | await syncOpenDocumentsWithLanguageServer(languageClient); 375 | updateStatusBar(); 376 | } 377 | 378 | async function startLanguageServer(): Promise { 379 | if (languageClient != null || !(await shouldEnableExtension())) return; 380 | 381 | try { 382 | languageClient = await createLanguageClient(); 383 | if (languageClient != null) { 384 | await languageClient.start(); 385 | await afterStartLanguageServer(languageClient); 386 | } 387 | } catch (error) { 388 | languageClient = null; 389 | await displayError( 390 | 'Failed to start RuboCop Language Server', ['Restart', 'Show Output'] 391 | ); 392 | } 393 | } 394 | 395 | async function stopLanguageServer(): Promise { 396 | if (languageClient == null) return; 397 | 398 | log('Stopping language server...'); 399 | await languageClient.stop(); 400 | languageClient = null; 401 | } 402 | 403 | async function restartLanguageServer(): Promise { 404 | log('Restarting language server...'); 405 | await stopLanguageServer(); 406 | await startLanguageServer(); 407 | } 408 | 409 | async function formatAutocorrects(): Promise { 410 | await executeCommand('rubocop.formatAutocorrects'); 411 | } 412 | 413 | async function formatAutocorrectsAll(): Promise { 414 | await executeCommand('rubocop.formatAutocorrectsAll'); 415 | } 416 | 417 | async function executeCommand(command: string): Promise { 418 | const editor = window.activeTextEditor; 419 | if (editor == null || languageClient == null || !supportedLanguage(editor.document.languageId)) return; 420 | 421 | try { 422 | await languageClient.sendRequest(ExecuteCommandRequest.type, { 423 | command, 424 | arguments: [{ 425 | uri: editor.document.uri.toString(), 426 | version: editor.document.version 427 | }] 428 | }); 429 | } catch (e) { 430 | await displayError( 431 | 'Failed to apply RuboCop corrects to the document.', ['Show Output'] 432 | ); 433 | } 434 | } 435 | 436 | function createStatusBarItem(): StatusBarItem { 437 | const statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); 438 | statusBarItem.command = 'workbench.action.problems.focus'; 439 | return statusBarItem; 440 | } 441 | 442 | function updateStatusBar(): void { 443 | if (statusBarItem == null) return; 444 | const editor = window.activeTextEditor; 445 | 446 | if (languageClient == null || editor == null || !supportedLanguage(editor.document.languageId)) { 447 | statusBarItem.hide(); 448 | } else { 449 | const diagnostics = diagnosticCache.get(editor.document.uri.toString()); 450 | if (diagnostics == null) { 451 | statusBarItem.tooltip = 'RuboCop'; 452 | statusBarItem.text = 'RuboCop $(ruby)'; 453 | statusBarItem.color = undefined; 454 | statusBarItem.backgroundColor = undefined; 455 | } else { 456 | const errorCount = diagnostics.filter((d) => d.severity === DiagnosticSeverity.Error).length; 457 | const warningCount = diagnostics.filter((d) => d.severity === DiagnosticSeverity.Warning).length; 458 | const otherCount = diagnostics.filter((d) => 459 | d.severity === DiagnosticSeverity.Information || 460 | d.severity === DiagnosticSeverity.Hint 461 | ).length; 462 | if (errorCount > 0) { 463 | statusBarItem.tooltip = `RuboCop: ${errorCount === 1 ? '1 error' : `${errorCount} errors`}`; 464 | statusBarItem.text = 'RuboCop $(error)'; 465 | statusBarItem.backgroundColor = new ThemeColor('statusBarItem.errorBackground'); 466 | } else if (warningCount > 0) { 467 | statusBarItem.tooltip = `RuboCop: ${warningCount === 1 ? '1 warning' : `${errorCount} warnings`}`; 468 | statusBarItem.text = 'RuboCop $(warning)'; 469 | statusBarItem.backgroundColor = new ThemeColor('statusBarItem.warningBackground'); 470 | } else if (otherCount > 0) { 471 | statusBarItem.tooltip = `RuboCop: ${otherCount === 1 ? '1 hint' : `${otherCount} issues`}`; 472 | statusBarItem.text = 'RuboCop $(info)'; 473 | statusBarItem.backgroundColor = undefined; 474 | } else { 475 | statusBarItem.tooltip = 'RuboCop: No issues!'; 476 | statusBarItem.text = 'RuboCop $(ruby)'; 477 | statusBarItem.backgroundColor = undefined; 478 | } 479 | } 480 | statusBarItem.show(); 481 | } 482 | } 483 | 484 | export async function activate(context: ExtensionContext): Promise { 485 | outputChannel = window.createOutputChannel('RuboCop'); 486 | statusBarItem = createStatusBarItem(); 487 | window.onDidChangeActiveTextEditor(handleActiveTextEditorChange); 488 | context.subscriptions.push( 489 | outputChannel, 490 | statusBarItem, 491 | ...registerCommands(), 492 | ...registerWorkspaceListeners() 493 | ); 494 | 495 | await startLanguageServer(); 496 | } 497 | 498 | export async function deactivate(): Promise { 499 | await stopLanguageServer(); 500 | } 501 | -------------------------------------------------------------------------------- /src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import { runTests } from '@vscode/test-electron'; 2 | import * as path from 'path'; 3 | 4 | import { USER_DATA_DIR, WORKSPACE_DIR } from './suite/setup'; 5 | 6 | async function main(): Promise { 7 | try { 8 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 9 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 10 | await runTests({ extensionDevelopmentPath, extensionTestsPath, launchArgs: ['--disable-extensions', '--disable-gpu', '--user-data-dir', USER_DATA_DIR, WORKSPACE_DIR] }); 11 | } catch (err) { 12 | console.error('Failed to run tests'); 13 | process.exit(1); 14 | } 15 | } 16 | 17 | main().catch(err => { 18 | console.error(err); 19 | process.exit(1); 20 | }); 21 | -------------------------------------------------------------------------------- /src/test/suite/automation.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | import * as path from 'path'; 3 | import { TextEncoder } from 'util'; 4 | 5 | import { Uri, TextEditor, commands, window, workspace } from 'vscode'; 6 | 7 | import { WORKSPACE_DIR } from './setup'; 8 | 9 | export async function reset(): Promise { 10 | await commands.executeCommand('workbench.action.closeAllEditors'); 11 | } 12 | 13 | export async function createEditor(content: string): Promise { 14 | const filename = `${Math.random().toString().slice(2)}.rb`; 15 | const uri = Uri.file(`${WORKSPACE_DIR}${path.sep}${filename}`); 16 | await workspace.fs.writeFile(uri, new TextEncoder().encode(content)); 17 | await window.showTextDocument(uri); 18 | assert.ok(window.activeTextEditor); 19 | assert.equal(window.activeTextEditor.document.getText(), content); 20 | return window.activeTextEditor; 21 | } 22 | 23 | export function findNewestEditor(): TextEditor { 24 | return window.visibleTextEditors[window.visibleTextEditors.length - 1]; 25 | } 26 | 27 | export async function formatDocument(): Promise { 28 | return await commands.executeCommand('editor.action.formatDocument', 'rubocop.vscode-rubocop'); 29 | } 30 | 31 | export async function formatAutocorrects(): Promise { 32 | return await commands.executeCommand('rubocop.formatAutocorrects'); 33 | } 34 | 35 | export async function formatAutocorrectsAll(): Promise { 36 | return await commands.executeCommand('rubocop.formatAutocorrectsAll'); 37 | } 38 | 39 | export async function restart(): Promise { 40 | return await commands.executeCommand('rubocop.restart'); 41 | } 42 | 43 | export async function start(): Promise { 44 | return await commands.executeCommand('rubocop.start'); 45 | } 46 | 47 | export async function stop(): Promise { 48 | return await commands.executeCommand('rubocop.stop'); 49 | } 50 | -------------------------------------------------------------------------------- /src/test/suite/index.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from 'assert'; 2 | import { before, beforeEach } from 'mocha'; 3 | import { State } from 'vscode-languageclient'; 4 | 5 | import * as auto from './automation'; 6 | import * as extension from '../../extension'; 7 | 8 | const UNFORMATTED = `class Foo 9 | def bar 10 | puts "baz" 11 | end 12 | end 13 | `; 14 | 15 | const SAFE_FORMATTED = `class Foo 16 | def bar 17 | puts 'baz' 18 | end 19 | end 20 | `; 21 | 22 | const UNSAFE_FORMATTED = `# frozen_string_literal: true 23 | 24 | class Foo 25 | def bar 26 | puts 'baz' 27 | end 28 | end 29 | `; 30 | 31 | suite('RuboCop', () => { 32 | beforeEach(auto.reset); 33 | 34 | suite('lifecycle commands', () => { 35 | test('start', async() => { 36 | await auto.start(); 37 | assert.notEqual(extension.languageClient, null); 38 | assert.equal(extension.languageClient?.state, State.Running); 39 | }); 40 | 41 | test('stop', async() => { 42 | await auto.start(); 43 | await auto.stop(); 44 | assert.equal(extension.languageClient, null); 45 | }); 46 | 47 | test('restart', async() => { 48 | await auto.restart(); 49 | assert.notEqual(extension.languageClient, null); 50 | assert.equal(extension.languageClient?.state, State.Running); 51 | }); 52 | }); 53 | 54 | suite('functional commands', () => { 55 | before(auto.reset); 56 | 57 | test('format', async() => { 58 | const editor = await auto.createEditor(UNFORMATTED); 59 | await auto.formatDocument(); 60 | assert.equal(editor.document.getText(), SAFE_FORMATTED); 61 | }); 62 | 63 | test('format with custom command `rubocop.formatAutocorrects`', async() => { 64 | const editor = await auto.createEditor(UNFORMATTED); 65 | await auto.formatAutocorrects(); 66 | assert.equal(editor.document.getText(), SAFE_FORMATTED); 67 | }); 68 | 69 | test('format with custom command `rubocop.formatAutocorrectsAll`', async() => { 70 | const editor = await auto.createEditor(UNFORMATTED); 71 | await auto.formatAutocorrectsAll(); 72 | assert.equal(editor.document.getText(), UNSAFE_FORMATTED); 73 | }); 74 | }); 75 | }); 76 | -------------------------------------------------------------------------------- /src/test/suite/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | import * as Mocha from 'mocha'; 3 | import * as glob from 'glob'; 4 | 5 | export async function run(): Promise { 6 | const mocha = new Mocha({ 7 | asyncOnly: true, 8 | color: true, 9 | forbidOnly: process.env.CI != null, 10 | timeout: 30000, 11 | ui: 'tdd' 12 | }); 13 | 14 | const testsRoot = path.resolve(__dirname, '..'); 15 | 16 | return await new Promise((resolve, reject) => { 17 | glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { 18 | if (err != null) { 19 | return reject(err); 20 | } 21 | 22 | files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); 23 | 24 | try { 25 | mocha.run(failures => { 26 | if (failures > 0) { 27 | if (process.env.CI != null) { 28 | setTimeout(() => reject(new Error(`${failures} tests failed; pausing for dramatic effect.`)), 3000); 29 | } else { 30 | reject(new Error(`${failures} tests failed.`)); 31 | } 32 | } else { 33 | resolve(); 34 | } 35 | }); 36 | } catch (err) { 37 | console.error(err); 38 | reject(err); 39 | } 40 | }); 41 | }); 42 | } 43 | -------------------------------------------------------------------------------- /src/test/suite/setup.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as os from 'os'; 3 | import * as path from 'path'; 4 | 5 | const inheritedScratchDir = process.env.VSCODE_RUBOCOP_TEST_SCRATCH_DIR; 6 | const SCRATCH_DIR = inheritedScratchDir ?? fs.mkdtempSync(`${os.tmpdir()}${path.sep}vscode-rubocop-`); 7 | process.env.VSCODE_RUBOCOP_TEST_SCRATCH_DIR = SCRATCH_DIR; 8 | 9 | export const USER_DATA_DIR = path.join(SCRATCH_DIR, 'user-data'); 10 | export const WORKSPACE_DIR = path.join(SCRATCH_DIR, 'workspace'); 11 | 12 | if (inheritedScratchDir == null) { 13 | fs.mkdirSync(USER_DATA_DIR); 14 | fs.mkdirSync(WORKSPACE_DIR); 15 | console.log('Scratch folder:', SCRATCH_DIR); 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "ES2019", 5 | "outDir": "out", 6 | "lib": [ 7 | "ES2019" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "strict": true 12 | }, 13 | "exclude": [ 14 | "node_modules" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@esbuild/android-arm64@0.17.19": 6 | version "0.17.19" 7 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" 8 | integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== 9 | 10 | "@esbuild/android-arm@0.17.19": 11 | version "0.17.19" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" 13 | integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== 14 | 15 | "@esbuild/android-x64@0.17.19": 16 | version "0.17.19" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" 18 | integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== 19 | 20 | "@esbuild/darwin-arm64@0.17.19": 21 | version "0.17.19" 22 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" 23 | integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== 24 | 25 | "@esbuild/darwin-x64@0.17.19": 26 | version "0.17.19" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" 28 | integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== 29 | 30 | "@esbuild/freebsd-arm64@0.17.19": 31 | version "0.17.19" 32 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" 33 | integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== 34 | 35 | "@esbuild/freebsd-x64@0.17.19": 36 | version "0.17.19" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" 38 | integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== 39 | 40 | "@esbuild/linux-arm64@0.17.19": 41 | version "0.17.19" 42 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" 43 | integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== 44 | 45 | "@esbuild/linux-arm@0.17.19": 46 | version "0.17.19" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" 48 | integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== 49 | 50 | "@esbuild/linux-ia32@0.17.19": 51 | version "0.17.19" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" 53 | integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== 54 | 55 | "@esbuild/linux-loong64@0.17.19": 56 | version "0.17.19" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" 58 | integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== 59 | 60 | "@esbuild/linux-mips64el@0.17.19": 61 | version "0.17.19" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" 63 | integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== 64 | 65 | "@esbuild/linux-ppc64@0.17.19": 66 | version "0.17.19" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" 68 | integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== 69 | 70 | "@esbuild/linux-riscv64@0.17.19": 71 | version "0.17.19" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" 73 | integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== 74 | 75 | "@esbuild/linux-s390x@0.17.19": 76 | version "0.17.19" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" 78 | integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== 79 | 80 | "@esbuild/linux-x64@0.17.19": 81 | version "0.17.19" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" 83 | integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== 84 | 85 | "@esbuild/netbsd-x64@0.17.19": 86 | version "0.17.19" 87 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" 88 | integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== 89 | 90 | "@esbuild/openbsd-x64@0.17.19": 91 | version "0.17.19" 92 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" 93 | integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== 94 | 95 | "@esbuild/sunos-x64@0.17.19": 96 | version "0.17.19" 97 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" 98 | integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== 99 | 100 | "@esbuild/win32-arm64@0.17.19": 101 | version "0.17.19" 102 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" 103 | integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== 104 | 105 | "@esbuild/win32-ia32@0.17.19": 106 | version "0.17.19" 107 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" 108 | integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== 109 | 110 | "@esbuild/win32-x64@0.17.19": 111 | version "0.17.19" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" 113 | integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== 114 | 115 | "@eslint-community/eslint-utils@^4.2.0": 116 | version "4.4.0" 117 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 118 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 119 | dependencies: 120 | eslint-visitor-keys "^3.3.0" 121 | 122 | "@eslint-community/regexpp@^4.4.0": 123 | version "4.5.1" 124 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 125 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 126 | 127 | "@eslint/eslintrc@^2.0.3": 128 | version "2.0.3" 129 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" 130 | integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== 131 | dependencies: 132 | ajv "^6.12.4" 133 | debug "^4.3.2" 134 | espree "^9.5.2" 135 | globals "^13.19.0" 136 | ignore "^5.2.0" 137 | import-fresh "^3.2.1" 138 | js-yaml "^4.1.0" 139 | minimatch "^3.1.2" 140 | strip-json-comments "^3.1.1" 141 | 142 | "@eslint/js@8.42.0": 143 | version "8.42.0" 144 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.42.0.tgz#484a1d638de2911e6f5a30c12f49c7e4a3270fb6" 145 | integrity sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw== 146 | 147 | "@humanwhocodes/config-array@^0.11.10": 148 | version "0.11.10" 149 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" 150 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== 151 | dependencies: 152 | "@humanwhocodes/object-schema" "^1.2.1" 153 | debug "^4.1.1" 154 | minimatch "^3.0.5" 155 | 156 | "@humanwhocodes/module-importer@^1.0.1": 157 | version "1.0.1" 158 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 159 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 160 | 161 | "@humanwhocodes/object-schema@^1.2.1": 162 | version "1.2.1" 163 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 164 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 165 | 166 | "@nodelib/fs.scandir@2.1.5": 167 | version "2.1.5" 168 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 169 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 170 | dependencies: 171 | "@nodelib/fs.stat" "2.0.5" 172 | run-parallel "^1.1.9" 173 | 174 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 175 | version "2.0.5" 176 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 177 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 178 | 179 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 180 | version "1.2.8" 181 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 182 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 183 | dependencies: 184 | "@nodelib/fs.scandir" "2.1.5" 185 | fastq "^1.6.0" 186 | 187 | "@tootallnate/once@1": 188 | version "1.1.2" 189 | resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" 190 | integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== 191 | 192 | "@types/glob@^8.0.0": 193 | version "8.1.0" 194 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc" 195 | integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w== 196 | dependencies: 197 | "@types/minimatch" "^5.1.2" 198 | "@types/node" "*" 199 | 200 | "@types/json-schema@^7.0.9": 201 | version "7.0.12" 202 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" 203 | integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== 204 | 205 | "@types/minimatch@^5.1.2": 206 | version "5.1.2" 207 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" 208 | integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== 209 | 210 | "@types/mocha@^10.0.0": 211 | version "10.0.1" 212 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" 213 | integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== 214 | 215 | "@types/node@*": 216 | version "20.2.5" 217 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" 218 | integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== 219 | 220 | "@types/node@^18.0.0": 221 | version "18.16.16" 222 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.16.tgz#3b64862856c7874ccf7439e6bab872d245c86d8e" 223 | integrity sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g== 224 | 225 | "@types/semver@^7.3.12": 226 | version "7.5.0" 227 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" 228 | integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== 229 | 230 | "@types/vscode@^1.68.0": 231 | version "1.78.1" 232 | resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.78.1.tgz#027dba038c9e4c3f8e83570e1494aab679030485" 233 | integrity sha512-wEA+54axejHu7DhcUfnFBan1IqFD1gBDxAFz8LoX06NbNDMRJv/T6OGthOs52yZccasKfN588EyffHWABkR0fg== 234 | 235 | "@typescript-eslint/eslint-plugin@^5.47.0": 236 | version "5.59.9" 237 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz#2604cfaf2b306e120044f901e20c8ed926debf15" 238 | integrity sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA== 239 | dependencies: 240 | "@eslint-community/regexpp" "^4.4.0" 241 | "@typescript-eslint/scope-manager" "5.59.9" 242 | "@typescript-eslint/type-utils" "5.59.9" 243 | "@typescript-eslint/utils" "5.59.9" 244 | debug "^4.3.4" 245 | grapheme-splitter "^1.0.4" 246 | ignore "^5.2.0" 247 | natural-compare-lite "^1.4.0" 248 | semver "^7.3.7" 249 | tsutils "^3.21.0" 250 | 251 | "@typescript-eslint/parser@^5.47.0": 252 | version "5.59.9" 253 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa" 254 | integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ== 255 | dependencies: 256 | "@typescript-eslint/scope-manager" "5.59.9" 257 | "@typescript-eslint/types" "5.59.9" 258 | "@typescript-eslint/typescript-estree" "5.59.9" 259 | debug "^4.3.4" 260 | 261 | "@typescript-eslint/scope-manager@5.59.9": 262 | version "5.59.9" 263 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4" 264 | integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ== 265 | dependencies: 266 | "@typescript-eslint/types" "5.59.9" 267 | "@typescript-eslint/visitor-keys" "5.59.9" 268 | 269 | "@typescript-eslint/type-utils@5.59.9": 270 | version "5.59.9" 271 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz#53bfaae2e901e6ac637ab0536d1754dfef4dafc2" 272 | integrity sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q== 273 | dependencies: 274 | "@typescript-eslint/typescript-estree" "5.59.9" 275 | "@typescript-eslint/utils" "5.59.9" 276 | debug "^4.3.4" 277 | tsutils "^3.21.0" 278 | 279 | "@typescript-eslint/types@5.59.9": 280 | version "5.59.9" 281 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52" 282 | integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw== 283 | 284 | "@typescript-eslint/typescript-estree@5.59.9": 285 | version "5.59.9" 286 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b" 287 | integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA== 288 | dependencies: 289 | "@typescript-eslint/types" "5.59.9" 290 | "@typescript-eslint/visitor-keys" "5.59.9" 291 | debug "^4.3.4" 292 | globby "^11.1.0" 293 | is-glob "^4.0.3" 294 | semver "^7.3.7" 295 | tsutils "^3.21.0" 296 | 297 | "@typescript-eslint/utils@5.59.9": 298 | version "5.59.9" 299 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4" 300 | integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg== 301 | dependencies: 302 | "@eslint-community/eslint-utils" "^4.2.0" 303 | "@types/json-schema" "^7.0.9" 304 | "@types/semver" "^7.3.12" 305 | "@typescript-eslint/scope-manager" "5.59.9" 306 | "@typescript-eslint/types" "5.59.9" 307 | "@typescript-eslint/typescript-estree" "5.59.9" 308 | eslint-scope "^5.1.1" 309 | semver "^7.3.7" 310 | 311 | "@typescript-eslint/visitor-keys@5.59.9": 312 | version "5.59.9" 313 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d" 314 | integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q== 315 | dependencies: 316 | "@typescript-eslint/types" "5.59.9" 317 | eslint-visitor-keys "^3.3.0" 318 | 319 | "@vscode/test-electron@^2.2.0": 320 | version "2.3.2" 321 | resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.3.2.tgz#25db8d1a94e8274c27015cf806ae8b180c83545b" 322 | integrity sha512-CRfQIs5Wi5Ok5SUCC3PTvRRXa74LD43cSXHC8EuNlmHHEPaJa/AGrv76brcA1hVSxrdja9tiYwp95Lq8kwY0tw== 323 | dependencies: 324 | http-proxy-agent "^4.0.1" 325 | https-proxy-agent "^5.0.0" 326 | jszip "^3.10.1" 327 | semver "^7.3.8" 328 | 329 | "@vscode/vsce@^2.18.0": 330 | version "2.19.0" 331 | resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.19.0.tgz#342225662811245bc40d855636d000147c394b11" 332 | integrity sha512-dAlILxC5ggOutcvJY24jxz913wimGiUrHaPkk16Gm9/PGFbz1YezWtrXsTKUtJws4fIlpX2UIlVlVESWq8lkfQ== 333 | dependencies: 334 | azure-devops-node-api "^11.0.1" 335 | chalk "^2.4.2" 336 | cheerio "^1.0.0-rc.9" 337 | commander "^6.1.0" 338 | glob "^7.0.6" 339 | hosted-git-info "^4.0.2" 340 | jsonc-parser "^3.2.0" 341 | leven "^3.1.0" 342 | markdown-it "^12.3.2" 343 | mime "^1.3.4" 344 | minimatch "^3.0.3" 345 | parse-semver "^1.1.1" 346 | read "^1.0.7" 347 | semver "^5.1.0" 348 | tmp "^0.2.1" 349 | typed-rest-client "^1.8.4" 350 | url-join "^4.0.1" 351 | xml2js "^0.5.0" 352 | yauzl "^2.3.1" 353 | yazl "^2.2.2" 354 | optionalDependencies: 355 | keytar "^7.7.0" 356 | 357 | acorn-jsx@^5.3.2: 358 | version "5.3.2" 359 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 360 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 361 | 362 | acorn@^8.8.0: 363 | version "8.8.2" 364 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 365 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 366 | 367 | agent-base@6: 368 | version "6.0.2" 369 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 370 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 371 | dependencies: 372 | debug "4" 373 | 374 | ajv@^6.10.0, ajv@^6.12.4: 375 | version "6.12.6" 376 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 377 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 378 | dependencies: 379 | fast-deep-equal "^3.1.1" 380 | fast-json-stable-stringify "^2.0.0" 381 | json-schema-traverse "^0.4.1" 382 | uri-js "^4.2.2" 383 | 384 | ansi-colors@4.1.1: 385 | version "4.1.1" 386 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 387 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 388 | 389 | ansi-regex@^5.0.1: 390 | version "5.0.1" 391 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 392 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 393 | 394 | ansi-styles@^3.2.1: 395 | version "3.2.1" 396 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 397 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 398 | dependencies: 399 | color-convert "^1.9.0" 400 | 401 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 402 | version "4.3.0" 403 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 404 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 405 | dependencies: 406 | color-convert "^2.0.1" 407 | 408 | anymatch@~3.1.2: 409 | version "3.1.3" 410 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 411 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 412 | dependencies: 413 | normalize-path "^3.0.0" 414 | picomatch "^2.0.4" 415 | 416 | argparse@^2.0.1: 417 | version "2.0.1" 418 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 419 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 420 | 421 | array-union@^2.1.0: 422 | version "2.1.0" 423 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 424 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 425 | 426 | azure-devops-node-api@^11.0.1: 427 | version "11.2.0" 428 | resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz#bf04edbef60313117a0507415eed4790a420ad6b" 429 | integrity sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA== 430 | dependencies: 431 | tunnel "0.0.6" 432 | typed-rest-client "^1.8.4" 433 | 434 | balanced-match@^1.0.0: 435 | version "1.0.2" 436 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 437 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 438 | 439 | base64-js@^1.3.1: 440 | version "1.5.1" 441 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 442 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 443 | 444 | binary-extensions@^2.0.0: 445 | version "2.2.0" 446 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 447 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 448 | 449 | bl@^4.0.3: 450 | version "4.1.0" 451 | resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" 452 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== 453 | dependencies: 454 | buffer "^5.5.0" 455 | inherits "^2.0.4" 456 | readable-stream "^3.4.0" 457 | 458 | boolbase@^1.0.0: 459 | version "1.0.0" 460 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 461 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 462 | 463 | brace-expansion@^1.1.7: 464 | version "1.1.11" 465 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 466 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 467 | dependencies: 468 | balanced-match "^1.0.0" 469 | concat-map "0.0.1" 470 | 471 | brace-expansion@^2.0.1: 472 | version "2.0.1" 473 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 474 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 475 | dependencies: 476 | balanced-match "^1.0.0" 477 | 478 | braces@^3.0.2, braces@~3.0.2: 479 | version "3.0.2" 480 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 481 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 482 | dependencies: 483 | fill-range "^7.0.1" 484 | 485 | browser-stdout@1.3.1: 486 | version "1.3.1" 487 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 488 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 489 | 490 | buffer-crc32@~0.2.3: 491 | version "0.2.13" 492 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" 493 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== 494 | 495 | buffer@^5.5.0: 496 | version "5.7.1" 497 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 498 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 499 | dependencies: 500 | base64-js "^1.3.1" 501 | ieee754 "^1.1.13" 502 | 503 | call-bind@^1.0.0: 504 | version "1.0.2" 505 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 506 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 507 | dependencies: 508 | function-bind "^1.1.1" 509 | get-intrinsic "^1.0.2" 510 | 511 | callsites@^3.0.0: 512 | version "3.1.0" 513 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 514 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 515 | 516 | camelcase@^6.0.0: 517 | version "6.3.0" 518 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 519 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 520 | 521 | chalk@^2.4.2: 522 | version "2.4.2" 523 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 524 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 525 | dependencies: 526 | ansi-styles "^3.2.1" 527 | escape-string-regexp "^1.0.5" 528 | supports-color "^5.3.0" 529 | 530 | chalk@^4.0.0, chalk@^4.1.0: 531 | version "4.1.2" 532 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 533 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 534 | dependencies: 535 | ansi-styles "^4.1.0" 536 | supports-color "^7.1.0" 537 | 538 | cheerio-select@^2.1.0: 539 | version "2.1.0" 540 | resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" 541 | integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== 542 | dependencies: 543 | boolbase "^1.0.0" 544 | css-select "^5.1.0" 545 | css-what "^6.1.0" 546 | domelementtype "^2.3.0" 547 | domhandler "^5.0.3" 548 | domutils "^3.0.1" 549 | 550 | cheerio@^1.0.0-rc.9: 551 | version "1.0.0-rc.12" 552 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" 553 | integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== 554 | dependencies: 555 | cheerio-select "^2.1.0" 556 | dom-serializer "^2.0.0" 557 | domhandler "^5.0.3" 558 | domutils "^3.0.1" 559 | htmlparser2 "^8.0.1" 560 | parse5 "^7.0.0" 561 | parse5-htmlparser2-tree-adapter "^7.0.0" 562 | 563 | chokidar@3.5.3: 564 | version "3.5.3" 565 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 566 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 567 | dependencies: 568 | anymatch "~3.1.2" 569 | braces "~3.0.2" 570 | glob-parent "~5.1.2" 571 | is-binary-path "~2.1.0" 572 | is-glob "~4.0.1" 573 | normalize-path "~3.0.0" 574 | readdirp "~3.6.0" 575 | optionalDependencies: 576 | fsevents "~2.3.2" 577 | 578 | chownr@^1.1.1: 579 | version "1.1.4" 580 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 581 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 582 | 583 | cliui@^7.0.2: 584 | version "7.0.4" 585 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 586 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 587 | dependencies: 588 | string-width "^4.2.0" 589 | strip-ansi "^6.0.0" 590 | wrap-ansi "^7.0.0" 591 | 592 | color-convert@^1.9.0: 593 | version "1.9.3" 594 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 595 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 596 | dependencies: 597 | color-name "1.1.3" 598 | 599 | color-convert@^2.0.1: 600 | version "2.0.1" 601 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 602 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 603 | dependencies: 604 | color-name "~1.1.4" 605 | 606 | color-name@1.1.3: 607 | version "1.1.3" 608 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 609 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 610 | 611 | color-name@~1.1.4: 612 | version "1.1.4" 613 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 614 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 615 | 616 | commander@^6.1.0: 617 | version "6.2.1" 618 | resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" 619 | integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== 620 | 621 | concat-map@0.0.1: 622 | version "0.0.1" 623 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 624 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 625 | 626 | core-util-is@~1.0.0: 627 | version "1.0.3" 628 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" 629 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 630 | 631 | cross-spawn@^7.0.2: 632 | version "7.0.3" 633 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 634 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 635 | dependencies: 636 | path-key "^3.1.0" 637 | shebang-command "^2.0.0" 638 | which "^2.0.1" 639 | 640 | css-select@^5.1.0: 641 | version "5.1.0" 642 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" 643 | integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== 644 | dependencies: 645 | boolbase "^1.0.0" 646 | css-what "^6.1.0" 647 | domhandler "^5.0.2" 648 | domutils "^3.0.1" 649 | nth-check "^2.0.1" 650 | 651 | css-what@^6.1.0: 652 | version "6.1.0" 653 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" 654 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== 655 | 656 | debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 657 | version "4.3.4" 658 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 659 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 660 | dependencies: 661 | ms "2.1.2" 662 | 663 | decamelize@^4.0.0: 664 | version "4.0.0" 665 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 666 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 667 | 668 | decompress-response@^6.0.0: 669 | version "6.0.0" 670 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" 671 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== 672 | dependencies: 673 | mimic-response "^3.1.0" 674 | 675 | deep-extend@^0.6.0: 676 | version "0.6.0" 677 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 678 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 679 | 680 | deep-is@^0.1.3: 681 | version "0.1.4" 682 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 683 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 684 | 685 | detect-libc@^2.0.0: 686 | version "2.0.1" 687 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" 688 | integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== 689 | 690 | diff@5.0.0: 691 | version "5.0.0" 692 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 693 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 694 | 695 | dir-glob@^3.0.1: 696 | version "3.0.1" 697 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 698 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 699 | dependencies: 700 | path-type "^4.0.0" 701 | 702 | doctrine@^3.0.0: 703 | version "3.0.0" 704 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 705 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 706 | dependencies: 707 | esutils "^2.0.2" 708 | 709 | dom-serializer@^2.0.0: 710 | version "2.0.0" 711 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" 712 | integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== 713 | dependencies: 714 | domelementtype "^2.3.0" 715 | domhandler "^5.0.2" 716 | entities "^4.2.0" 717 | 718 | domelementtype@^2.3.0: 719 | version "2.3.0" 720 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" 721 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== 722 | 723 | domhandler@^5.0.2, domhandler@^5.0.3: 724 | version "5.0.3" 725 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" 726 | integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== 727 | dependencies: 728 | domelementtype "^2.3.0" 729 | 730 | domutils@^3.0.1: 731 | version "3.1.0" 732 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" 733 | integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== 734 | dependencies: 735 | dom-serializer "^2.0.0" 736 | domelementtype "^2.3.0" 737 | domhandler "^5.0.3" 738 | 739 | emoji-regex@^8.0.0: 740 | version "8.0.0" 741 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 742 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 743 | 744 | end-of-stream@^1.1.0, end-of-stream@^1.4.1: 745 | version "1.4.4" 746 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 747 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 748 | dependencies: 749 | once "^1.4.0" 750 | 751 | entities@^4.2.0, entities@^4.4.0: 752 | version "4.5.0" 753 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" 754 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== 755 | 756 | entities@~2.1.0: 757 | version "2.1.0" 758 | resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" 759 | integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== 760 | 761 | esbuild@^0.17.6: 762 | version "0.17.19" 763 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" 764 | integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== 765 | optionalDependencies: 766 | "@esbuild/android-arm" "0.17.19" 767 | "@esbuild/android-arm64" "0.17.19" 768 | "@esbuild/android-x64" "0.17.19" 769 | "@esbuild/darwin-arm64" "0.17.19" 770 | "@esbuild/darwin-x64" "0.17.19" 771 | "@esbuild/freebsd-arm64" "0.17.19" 772 | "@esbuild/freebsd-x64" "0.17.19" 773 | "@esbuild/linux-arm" "0.17.19" 774 | "@esbuild/linux-arm64" "0.17.19" 775 | "@esbuild/linux-ia32" "0.17.19" 776 | "@esbuild/linux-loong64" "0.17.19" 777 | "@esbuild/linux-mips64el" "0.17.19" 778 | "@esbuild/linux-ppc64" "0.17.19" 779 | "@esbuild/linux-riscv64" "0.17.19" 780 | "@esbuild/linux-s390x" "0.17.19" 781 | "@esbuild/linux-x64" "0.17.19" 782 | "@esbuild/netbsd-x64" "0.17.19" 783 | "@esbuild/openbsd-x64" "0.17.19" 784 | "@esbuild/sunos-x64" "0.17.19" 785 | "@esbuild/win32-arm64" "0.17.19" 786 | "@esbuild/win32-ia32" "0.17.19" 787 | "@esbuild/win32-x64" "0.17.19" 788 | 789 | escalade@^3.1.1: 790 | version "3.1.1" 791 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 792 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 793 | 794 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 795 | version "4.0.0" 796 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 797 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 798 | 799 | escape-string-regexp@^1.0.5: 800 | version "1.0.5" 801 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 802 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 803 | 804 | eslint-scope@^5.1.1: 805 | version "5.1.1" 806 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 807 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 808 | dependencies: 809 | esrecurse "^4.3.0" 810 | estraverse "^4.1.1" 811 | 812 | eslint-scope@^7.2.0: 813 | version "7.2.0" 814 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 815 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 816 | dependencies: 817 | esrecurse "^4.3.0" 818 | estraverse "^5.2.0" 819 | 820 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: 821 | version "3.4.1" 822 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 823 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 824 | 825 | eslint@^8.22.0: 826 | version "8.42.0" 827 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.42.0.tgz#7bebdc3a55f9ed7167251fe7259f75219cade291" 828 | integrity sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A== 829 | dependencies: 830 | "@eslint-community/eslint-utils" "^4.2.0" 831 | "@eslint-community/regexpp" "^4.4.0" 832 | "@eslint/eslintrc" "^2.0.3" 833 | "@eslint/js" "8.42.0" 834 | "@humanwhocodes/config-array" "^0.11.10" 835 | "@humanwhocodes/module-importer" "^1.0.1" 836 | "@nodelib/fs.walk" "^1.2.8" 837 | ajv "^6.10.0" 838 | chalk "^4.0.0" 839 | cross-spawn "^7.0.2" 840 | debug "^4.3.2" 841 | doctrine "^3.0.0" 842 | escape-string-regexp "^4.0.0" 843 | eslint-scope "^7.2.0" 844 | eslint-visitor-keys "^3.4.1" 845 | espree "^9.5.2" 846 | esquery "^1.4.2" 847 | esutils "^2.0.2" 848 | fast-deep-equal "^3.1.3" 849 | file-entry-cache "^6.0.1" 850 | find-up "^5.0.0" 851 | glob-parent "^6.0.2" 852 | globals "^13.19.0" 853 | graphemer "^1.4.0" 854 | ignore "^5.2.0" 855 | import-fresh "^3.0.0" 856 | imurmurhash "^0.1.4" 857 | is-glob "^4.0.0" 858 | is-path-inside "^3.0.3" 859 | js-yaml "^4.1.0" 860 | json-stable-stringify-without-jsonify "^1.0.1" 861 | levn "^0.4.1" 862 | lodash.merge "^4.6.2" 863 | minimatch "^3.1.2" 864 | natural-compare "^1.4.0" 865 | optionator "^0.9.1" 866 | strip-ansi "^6.0.1" 867 | strip-json-comments "^3.1.0" 868 | text-table "^0.2.0" 869 | 870 | espree@^9.5.2: 871 | version "9.5.2" 872 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" 873 | integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== 874 | dependencies: 875 | acorn "^8.8.0" 876 | acorn-jsx "^5.3.2" 877 | eslint-visitor-keys "^3.4.1" 878 | 879 | esquery@^1.4.2: 880 | version "1.5.0" 881 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 882 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 883 | dependencies: 884 | estraverse "^5.1.0" 885 | 886 | esrecurse@^4.3.0: 887 | version "4.3.0" 888 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 889 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 890 | dependencies: 891 | estraverse "^5.2.0" 892 | 893 | estraverse@^4.1.1: 894 | version "4.3.0" 895 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 896 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 897 | 898 | estraverse@^5.1.0, estraverse@^5.2.0: 899 | version "5.3.0" 900 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 901 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 902 | 903 | esutils@^2.0.2: 904 | version "2.0.3" 905 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 906 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 907 | 908 | expand-template@^2.0.3: 909 | version "2.0.3" 910 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" 911 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== 912 | 913 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 914 | version "3.1.3" 915 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 916 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 917 | 918 | fast-glob@^3.2.9: 919 | version "3.2.12" 920 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 921 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 922 | dependencies: 923 | "@nodelib/fs.stat" "^2.0.2" 924 | "@nodelib/fs.walk" "^1.2.3" 925 | glob-parent "^5.1.2" 926 | merge2 "^1.3.0" 927 | micromatch "^4.0.4" 928 | 929 | fast-json-stable-stringify@^2.0.0: 930 | version "2.1.0" 931 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 932 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 933 | 934 | fast-levenshtein@^2.0.6: 935 | version "2.0.6" 936 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 937 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 938 | 939 | fastq@^1.6.0: 940 | version "1.15.0" 941 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 942 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 943 | dependencies: 944 | reusify "^1.0.4" 945 | 946 | fd-slicer@~1.1.0: 947 | version "1.1.0" 948 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" 949 | integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== 950 | dependencies: 951 | pend "~1.2.0" 952 | 953 | file-entry-cache@^6.0.1: 954 | version "6.0.1" 955 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 956 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 957 | dependencies: 958 | flat-cache "^3.0.4" 959 | 960 | fill-range@^7.0.1: 961 | version "7.0.1" 962 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 963 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 964 | dependencies: 965 | to-regex-range "^5.0.1" 966 | 967 | find-up@5.0.0, find-up@^5.0.0: 968 | version "5.0.0" 969 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 970 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 971 | dependencies: 972 | locate-path "^6.0.0" 973 | path-exists "^4.0.0" 974 | 975 | flat-cache@^3.0.4: 976 | version "3.0.4" 977 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 978 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 979 | dependencies: 980 | flatted "^3.1.0" 981 | rimraf "^3.0.2" 982 | 983 | flat@^5.0.2: 984 | version "5.0.2" 985 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 986 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 987 | 988 | flatted@^3.1.0: 989 | version "3.2.7" 990 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 991 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 992 | 993 | fs-constants@^1.0.0: 994 | version "1.0.0" 995 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 996 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== 997 | 998 | fs.realpath@^1.0.0: 999 | version "1.0.0" 1000 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1001 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1002 | 1003 | fsevents@~2.3.2: 1004 | version "2.3.2" 1005 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1006 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1007 | 1008 | function-bind@^1.1.1: 1009 | version "1.1.1" 1010 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1011 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1012 | 1013 | get-caller-file@^2.0.5: 1014 | version "2.0.5" 1015 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1016 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1017 | 1018 | get-intrinsic@^1.0.2: 1019 | version "1.2.1" 1020 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" 1021 | integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== 1022 | dependencies: 1023 | function-bind "^1.1.1" 1024 | has "^1.0.3" 1025 | has-proto "^1.0.1" 1026 | has-symbols "^1.0.3" 1027 | 1028 | github-from-package@0.0.0: 1029 | version "0.0.0" 1030 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" 1031 | integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== 1032 | 1033 | glob-parent@^5.1.2, glob-parent@~5.1.2: 1034 | version "5.1.2" 1035 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1036 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1037 | dependencies: 1038 | is-glob "^4.0.1" 1039 | 1040 | glob-parent@^6.0.2: 1041 | version "6.0.2" 1042 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1043 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1044 | dependencies: 1045 | is-glob "^4.0.3" 1046 | 1047 | glob@7.2.0: 1048 | version "7.2.0" 1049 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 1050 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 1051 | dependencies: 1052 | fs.realpath "^1.0.0" 1053 | inflight "^1.0.4" 1054 | inherits "2" 1055 | minimatch "^3.0.4" 1056 | once "^1.3.0" 1057 | path-is-absolute "^1.0.0" 1058 | 1059 | glob@^7.0.6, glob@^7.1.3: 1060 | version "7.2.3" 1061 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1062 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1063 | dependencies: 1064 | fs.realpath "^1.0.0" 1065 | inflight "^1.0.4" 1066 | inherits "2" 1067 | minimatch "^3.1.1" 1068 | once "^1.3.0" 1069 | path-is-absolute "^1.0.0" 1070 | 1071 | glob@^8.0.3: 1072 | version "8.1.0" 1073 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" 1074 | integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== 1075 | dependencies: 1076 | fs.realpath "^1.0.0" 1077 | inflight "^1.0.4" 1078 | inherits "2" 1079 | minimatch "^5.0.1" 1080 | once "^1.3.0" 1081 | 1082 | globals@^13.19.0: 1083 | version "13.20.0" 1084 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 1085 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 1086 | dependencies: 1087 | type-fest "^0.20.2" 1088 | 1089 | globby@^11.1.0: 1090 | version "11.1.0" 1091 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1092 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1093 | dependencies: 1094 | array-union "^2.1.0" 1095 | dir-glob "^3.0.1" 1096 | fast-glob "^3.2.9" 1097 | ignore "^5.2.0" 1098 | merge2 "^1.4.1" 1099 | slash "^3.0.0" 1100 | 1101 | grapheme-splitter@^1.0.4: 1102 | version "1.0.4" 1103 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 1104 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 1105 | 1106 | graphemer@^1.4.0: 1107 | version "1.4.0" 1108 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 1109 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1110 | 1111 | has-flag@^3.0.0: 1112 | version "3.0.0" 1113 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1114 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1115 | 1116 | has-flag@^4.0.0: 1117 | version "4.0.0" 1118 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1119 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1120 | 1121 | has-proto@^1.0.1: 1122 | version "1.0.1" 1123 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" 1124 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 1125 | 1126 | has-symbols@^1.0.3: 1127 | version "1.0.3" 1128 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1129 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1130 | 1131 | has@^1.0.3: 1132 | version "1.0.3" 1133 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1134 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1135 | dependencies: 1136 | function-bind "^1.1.1" 1137 | 1138 | he@1.2.0: 1139 | version "1.2.0" 1140 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1141 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1142 | 1143 | hosted-git-info@^4.0.2: 1144 | version "4.1.0" 1145 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" 1146 | integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== 1147 | dependencies: 1148 | lru-cache "^6.0.0" 1149 | 1150 | htmlparser2@^8.0.1: 1151 | version "8.0.2" 1152 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" 1153 | integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== 1154 | dependencies: 1155 | domelementtype "^2.3.0" 1156 | domhandler "^5.0.3" 1157 | domutils "^3.0.1" 1158 | entities "^4.4.0" 1159 | 1160 | http-proxy-agent@^4.0.1: 1161 | version "4.0.1" 1162 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" 1163 | integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== 1164 | dependencies: 1165 | "@tootallnate/once" "1" 1166 | agent-base "6" 1167 | debug "4" 1168 | 1169 | https-proxy-agent@^5.0.0: 1170 | version "5.0.1" 1171 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 1172 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 1173 | dependencies: 1174 | agent-base "6" 1175 | debug "4" 1176 | 1177 | ieee754@^1.1.13: 1178 | version "1.2.1" 1179 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1180 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1181 | 1182 | ignore@^5.2.0: 1183 | version "5.2.4" 1184 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1185 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1186 | 1187 | immediate@~3.0.5: 1188 | version "3.0.6" 1189 | resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" 1190 | integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== 1191 | 1192 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1193 | version "3.3.0" 1194 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1195 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1196 | dependencies: 1197 | parent-module "^1.0.0" 1198 | resolve-from "^4.0.0" 1199 | 1200 | imurmurhash@^0.1.4: 1201 | version "0.1.4" 1202 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1203 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1204 | 1205 | inflight@^1.0.4: 1206 | version "1.0.6" 1207 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1208 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1209 | dependencies: 1210 | once "^1.3.0" 1211 | wrappy "1" 1212 | 1213 | inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: 1214 | version "2.0.4" 1215 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1216 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1217 | 1218 | ini@~1.3.0: 1219 | version "1.3.8" 1220 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 1221 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 1222 | 1223 | is-binary-path@~2.1.0: 1224 | version "2.1.0" 1225 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1226 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1227 | dependencies: 1228 | binary-extensions "^2.0.0" 1229 | 1230 | is-extglob@^2.1.1: 1231 | version "2.1.1" 1232 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1233 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1234 | 1235 | is-fullwidth-code-point@^3.0.0: 1236 | version "3.0.0" 1237 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1238 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1239 | 1240 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1241 | version "4.0.3" 1242 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1243 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1244 | dependencies: 1245 | is-extglob "^2.1.1" 1246 | 1247 | is-number@^7.0.0: 1248 | version "7.0.0" 1249 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1250 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1251 | 1252 | is-path-inside@^3.0.3: 1253 | version "3.0.3" 1254 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1255 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1256 | 1257 | is-plain-obj@^2.1.0: 1258 | version "2.1.0" 1259 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1260 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1261 | 1262 | is-unicode-supported@^0.1.0: 1263 | version "0.1.0" 1264 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" 1265 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1266 | 1267 | isarray@~1.0.0: 1268 | version "1.0.0" 1269 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1270 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== 1271 | 1272 | isexe@^2.0.0: 1273 | version "2.0.0" 1274 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1275 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1276 | 1277 | js-yaml@4.1.0, js-yaml@^4.1.0: 1278 | version "4.1.0" 1279 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1280 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1281 | dependencies: 1282 | argparse "^2.0.1" 1283 | 1284 | json-schema-traverse@^0.4.1: 1285 | version "0.4.1" 1286 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1287 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1288 | 1289 | json-stable-stringify-without-jsonify@^1.0.1: 1290 | version "1.0.1" 1291 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1292 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1293 | 1294 | jsonc-parser@^3.2.0: 1295 | version "3.2.0" 1296 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" 1297 | integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== 1298 | 1299 | jszip@^3.10.1: 1300 | version "3.10.1" 1301 | resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" 1302 | integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== 1303 | dependencies: 1304 | lie "~3.3.0" 1305 | pako "~1.0.2" 1306 | readable-stream "~2.3.6" 1307 | setimmediate "^1.0.5" 1308 | 1309 | keytar@^7.7.0: 1310 | version "7.9.0" 1311 | resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb" 1312 | integrity sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ== 1313 | dependencies: 1314 | node-addon-api "^4.3.0" 1315 | prebuild-install "^7.0.1" 1316 | 1317 | leven@^3.1.0: 1318 | version "3.1.0" 1319 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 1320 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 1321 | 1322 | levn@^0.4.1: 1323 | version "0.4.1" 1324 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1325 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1326 | dependencies: 1327 | prelude-ls "^1.2.1" 1328 | type-check "~0.4.0" 1329 | 1330 | lie@~3.3.0: 1331 | version "3.3.0" 1332 | resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" 1333 | integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== 1334 | dependencies: 1335 | immediate "~3.0.5" 1336 | 1337 | linkify-it@^3.0.1: 1338 | version "3.0.3" 1339 | resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e" 1340 | integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== 1341 | dependencies: 1342 | uc.micro "^1.0.1" 1343 | 1344 | locate-path@^6.0.0: 1345 | version "6.0.0" 1346 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1347 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1348 | dependencies: 1349 | p-locate "^5.0.0" 1350 | 1351 | lodash.merge@^4.6.2: 1352 | version "4.6.2" 1353 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1354 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1355 | 1356 | log-symbols@4.1.0: 1357 | version "4.1.0" 1358 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" 1359 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1360 | dependencies: 1361 | chalk "^4.1.0" 1362 | is-unicode-supported "^0.1.0" 1363 | 1364 | lru-cache@^6.0.0: 1365 | version "6.0.0" 1366 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1367 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1368 | dependencies: 1369 | yallist "^4.0.0" 1370 | 1371 | markdown-it@^12.3.2: 1372 | version "12.3.2" 1373 | resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90" 1374 | integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== 1375 | dependencies: 1376 | argparse "^2.0.1" 1377 | entities "~2.1.0" 1378 | linkify-it "^3.0.1" 1379 | mdurl "^1.0.1" 1380 | uc.micro "^1.0.5" 1381 | 1382 | mdurl@^1.0.1: 1383 | version "1.0.1" 1384 | resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" 1385 | integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== 1386 | 1387 | merge2@^1.3.0, merge2@^1.4.1: 1388 | version "1.4.1" 1389 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1390 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1391 | 1392 | micromatch@^4.0.4: 1393 | version "4.0.5" 1394 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1395 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1396 | dependencies: 1397 | braces "^3.0.2" 1398 | picomatch "^2.3.1" 1399 | 1400 | mime@^1.3.4: 1401 | version "1.6.0" 1402 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1403 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1404 | 1405 | mimic-response@^3.1.0: 1406 | version "3.1.0" 1407 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" 1408 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== 1409 | 1410 | minimatch@5.0.1: 1411 | version "5.0.1" 1412 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" 1413 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== 1414 | dependencies: 1415 | brace-expansion "^2.0.1" 1416 | 1417 | minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1418 | version "3.1.2" 1419 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1420 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1421 | dependencies: 1422 | brace-expansion "^1.1.7" 1423 | 1424 | minimatch@^5.0.1: 1425 | version "5.1.6" 1426 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" 1427 | integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== 1428 | dependencies: 1429 | brace-expansion "^2.0.1" 1430 | 1431 | minimist@^1.2.0, minimist@^1.2.3: 1432 | version "1.2.8" 1433 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1434 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1435 | 1436 | mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: 1437 | version "0.5.3" 1438 | resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" 1439 | integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== 1440 | 1441 | mocha@^10.0.0: 1442 | version "10.2.0" 1443 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" 1444 | integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== 1445 | dependencies: 1446 | ansi-colors "4.1.1" 1447 | browser-stdout "1.3.1" 1448 | chokidar "3.5.3" 1449 | debug "4.3.4" 1450 | diff "5.0.0" 1451 | escape-string-regexp "4.0.0" 1452 | find-up "5.0.0" 1453 | glob "7.2.0" 1454 | he "1.2.0" 1455 | js-yaml "4.1.0" 1456 | log-symbols "4.1.0" 1457 | minimatch "5.0.1" 1458 | ms "2.1.3" 1459 | nanoid "3.3.3" 1460 | serialize-javascript "6.0.0" 1461 | strip-json-comments "3.1.1" 1462 | supports-color "8.1.1" 1463 | workerpool "6.2.1" 1464 | yargs "16.2.0" 1465 | yargs-parser "20.2.4" 1466 | yargs-unparser "2.0.0" 1467 | 1468 | ms@2.1.2: 1469 | version "2.1.2" 1470 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1471 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1472 | 1473 | ms@2.1.3: 1474 | version "2.1.3" 1475 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1476 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1477 | 1478 | mute-stream@~0.0.4: 1479 | version "0.0.8" 1480 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" 1481 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 1482 | 1483 | nanoid@3.3.3: 1484 | version "3.3.3" 1485 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" 1486 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== 1487 | 1488 | napi-build-utils@^1.0.1: 1489 | version "1.0.2" 1490 | resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" 1491 | integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== 1492 | 1493 | natural-compare-lite@^1.4.0: 1494 | version "1.4.0" 1495 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 1496 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 1497 | 1498 | natural-compare@^1.4.0: 1499 | version "1.4.0" 1500 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1501 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1502 | 1503 | node-abi@^3.3.0: 1504 | version "3.43.0" 1505 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.43.0.tgz#468dc09af3c262ef2fb3a0d2ff34cf8fba61952a" 1506 | integrity sha512-QB0MMv+tn9Ur2DtJrc8y09n0n6sw88CyDniWSX2cHW10goQXYPK9ZpFJOktDS4ron501edPX6h9i7Pg+RnH5nQ== 1507 | dependencies: 1508 | semver "^7.3.5" 1509 | 1510 | node-addon-api@^4.3.0: 1511 | version "4.3.0" 1512 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" 1513 | integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== 1514 | 1515 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1516 | version "3.0.0" 1517 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1518 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1519 | 1520 | nth-check@^2.0.1: 1521 | version "2.1.1" 1522 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" 1523 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== 1524 | dependencies: 1525 | boolbase "^1.0.0" 1526 | 1527 | object-inspect@^1.9.0: 1528 | version "1.12.3" 1529 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" 1530 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== 1531 | 1532 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1533 | version "1.4.0" 1534 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1535 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1536 | dependencies: 1537 | wrappy "1" 1538 | 1539 | optionator@^0.9.1: 1540 | version "0.9.1" 1541 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1542 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1543 | dependencies: 1544 | deep-is "^0.1.3" 1545 | fast-levenshtein "^2.0.6" 1546 | levn "^0.4.1" 1547 | prelude-ls "^1.2.1" 1548 | type-check "^0.4.0" 1549 | word-wrap "^1.2.3" 1550 | 1551 | p-limit@^3.0.2: 1552 | version "3.1.0" 1553 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1554 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1555 | dependencies: 1556 | yocto-queue "^0.1.0" 1557 | 1558 | p-locate@^5.0.0: 1559 | version "5.0.0" 1560 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1561 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1562 | dependencies: 1563 | p-limit "^3.0.2" 1564 | 1565 | pako@~1.0.2: 1566 | version "1.0.11" 1567 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" 1568 | integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== 1569 | 1570 | parent-module@^1.0.0: 1571 | version "1.0.1" 1572 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1573 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1574 | dependencies: 1575 | callsites "^3.0.0" 1576 | 1577 | parse-semver@^1.1.1: 1578 | version "1.1.1" 1579 | resolved "https://registry.yarnpkg.com/parse-semver/-/parse-semver-1.1.1.tgz#9a4afd6df063dc4826f93fba4a99cf223f666cb8" 1580 | integrity sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ== 1581 | dependencies: 1582 | semver "^5.1.0" 1583 | 1584 | parse5-htmlparser2-tree-adapter@^7.0.0: 1585 | version "7.0.0" 1586 | resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" 1587 | integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== 1588 | dependencies: 1589 | domhandler "^5.0.2" 1590 | parse5 "^7.0.0" 1591 | 1592 | parse5@^7.0.0: 1593 | version "7.1.2" 1594 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" 1595 | integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== 1596 | dependencies: 1597 | entities "^4.4.0" 1598 | 1599 | path-exists@^4.0.0: 1600 | version "4.0.0" 1601 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1602 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1603 | 1604 | path-is-absolute@^1.0.0: 1605 | version "1.0.1" 1606 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1607 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1608 | 1609 | path-key@^3.1.0: 1610 | version "3.1.1" 1611 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1612 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1613 | 1614 | path-type@^4.0.0: 1615 | version "4.0.0" 1616 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1617 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1618 | 1619 | pend@~1.2.0: 1620 | version "1.2.0" 1621 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 1622 | integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== 1623 | 1624 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1625 | version "2.3.1" 1626 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1627 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1628 | 1629 | prebuild-install@^7.0.1: 1630 | version "7.1.1" 1631 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" 1632 | integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== 1633 | dependencies: 1634 | detect-libc "^2.0.0" 1635 | expand-template "^2.0.3" 1636 | github-from-package "0.0.0" 1637 | minimist "^1.2.3" 1638 | mkdirp-classic "^0.5.3" 1639 | napi-build-utils "^1.0.1" 1640 | node-abi "^3.3.0" 1641 | pump "^3.0.0" 1642 | rc "^1.2.7" 1643 | simple-get "^4.0.0" 1644 | tar-fs "^2.0.0" 1645 | tunnel-agent "^0.6.0" 1646 | 1647 | prelude-ls@^1.2.1: 1648 | version "1.2.1" 1649 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1650 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1651 | 1652 | process-nextick-args@~2.0.0: 1653 | version "2.0.1" 1654 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1655 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1656 | 1657 | pump@^3.0.0: 1658 | version "3.0.0" 1659 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1660 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1661 | dependencies: 1662 | end-of-stream "^1.1.0" 1663 | once "^1.3.1" 1664 | 1665 | punycode@^2.1.0: 1666 | version "2.3.0" 1667 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 1668 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 1669 | 1670 | qs@^6.9.1: 1671 | version "6.11.2" 1672 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" 1673 | integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== 1674 | dependencies: 1675 | side-channel "^1.0.4" 1676 | 1677 | queue-microtask@^1.2.2: 1678 | version "1.2.3" 1679 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1680 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1681 | 1682 | randombytes@^2.1.0: 1683 | version "2.1.0" 1684 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1685 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1686 | dependencies: 1687 | safe-buffer "^5.1.0" 1688 | 1689 | rc@^1.2.7: 1690 | version "1.2.8" 1691 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1692 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1693 | dependencies: 1694 | deep-extend "^0.6.0" 1695 | ini "~1.3.0" 1696 | minimist "^1.2.0" 1697 | strip-json-comments "~2.0.1" 1698 | 1699 | read@^1.0.7: 1700 | version "1.0.7" 1701 | resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" 1702 | integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== 1703 | dependencies: 1704 | mute-stream "~0.0.4" 1705 | 1706 | readable-stream@^3.1.1, readable-stream@^3.4.0: 1707 | version "3.6.2" 1708 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" 1709 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== 1710 | dependencies: 1711 | inherits "^2.0.3" 1712 | string_decoder "^1.1.1" 1713 | util-deprecate "^1.0.1" 1714 | 1715 | readable-stream@~2.3.6: 1716 | version "2.3.8" 1717 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" 1718 | integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== 1719 | dependencies: 1720 | core-util-is "~1.0.0" 1721 | inherits "~2.0.3" 1722 | isarray "~1.0.0" 1723 | process-nextick-args "~2.0.0" 1724 | safe-buffer "~5.1.1" 1725 | string_decoder "~1.1.1" 1726 | util-deprecate "~1.0.1" 1727 | 1728 | readdirp@~3.6.0: 1729 | version "3.6.0" 1730 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1731 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1732 | dependencies: 1733 | picomatch "^2.2.1" 1734 | 1735 | require-directory@^2.1.1: 1736 | version "2.1.1" 1737 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1738 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1739 | 1740 | resolve-from@^4.0.0: 1741 | version "4.0.0" 1742 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1743 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1744 | 1745 | reusify@^1.0.4: 1746 | version "1.0.4" 1747 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1748 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1749 | 1750 | rimraf@^3.0.0, rimraf@^3.0.2: 1751 | version "3.0.2" 1752 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1753 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1754 | dependencies: 1755 | glob "^7.1.3" 1756 | 1757 | run-parallel@^1.1.9: 1758 | version "1.2.0" 1759 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1760 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1761 | dependencies: 1762 | queue-microtask "^1.2.2" 1763 | 1764 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: 1765 | version "5.2.1" 1766 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1767 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1768 | 1769 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1770 | version "5.1.2" 1771 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1772 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1773 | 1774 | sax@>=0.6.0: 1775 | version "1.2.4" 1776 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 1777 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 1778 | 1779 | semver@^5.1.0: 1780 | version "5.7.1" 1781 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1782 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1783 | 1784 | semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: 1785 | version "7.5.1" 1786 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" 1787 | integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== 1788 | dependencies: 1789 | lru-cache "^6.0.0" 1790 | 1791 | serialize-javascript@6.0.0: 1792 | version "6.0.0" 1793 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1794 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 1795 | dependencies: 1796 | randombytes "^2.1.0" 1797 | 1798 | setimmediate@^1.0.5: 1799 | version "1.0.5" 1800 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 1801 | integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== 1802 | 1803 | shebang-command@^2.0.0: 1804 | version "2.0.0" 1805 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1806 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1807 | dependencies: 1808 | shebang-regex "^3.0.0" 1809 | 1810 | shebang-regex@^3.0.0: 1811 | version "3.0.0" 1812 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1813 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1814 | 1815 | side-channel@^1.0.4: 1816 | version "1.0.4" 1817 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1818 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1819 | dependencies: 1820 | call-bind "^1.0.0" 1821 | get-intrinsic "^1.0.2" 1822 | object-inspect "^1.9.0" 1823 | 1824 | simple-concat@^1.0.0: 1825 | version "1.0.1" 1826 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" 1827 | integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== 1828 | 1829 | simple-get@^4.0.0: 1830 | version "4.0.1" 1831 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" 1832 | integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== 1833 | dependencies: 1834 | decompress-response "^6.0.0" 1835 | once "^1.3.1" 1836 | simple-concat "^1.0.0" 1837 | 1838 | slash@^3.0.0: 1839 | version "3.0.0" 1840 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1841 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1842 | 1843 | string-width@^4.1.0, string-width@^4.2.0: 1844 | version "4.2.3" 1845 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1846 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1847 | dependencies: 1848 | emoji-regex "^8.0.0" 1849 | is-fullwidth-code-point "^3.0.0" 1850 | strip-ansi "^6.0.1" 1851 | 1852 | string_decoder@^1.1.1: 1853 | version "1.3.0" 1854 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1855 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1856 | dependencies: 1857 | safe-buffer "~5.2.0" 1858 | 1859 | string_decoder@~1.1.1: 1860 | version "1.1.1" 1861 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1862 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1863 | dependencies: 1864 | safe-buffer "~5.1.0" 1865 | 1866 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1867 | version "6.0.1" 1868 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1869 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1870 | dependencies: 1871 | ansi-regex "^5.0.1" 1872 | 1873 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1874 | version "3.1.1" 1875 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1876 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1877 | 1878 | strip-json-comments@~2.0.1: 1879 | version "2.0.1" 1880 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1881 | integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== 1882 | 1883 | supports-color@8.1.1: 1884 | version "8.1.1" 1885 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 1886 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 1887 | dependencies: 1888 | has-flag "^4.0.0" 1889 | 1890 | supports-color@^5.3.0: 1891 | version "5.5.0" 1892 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1893 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1894 | dependencies: 1895 | has-flag "^3.0.0" 1896 | 1897 | supports-color@^7.1.0: 1898 | version "7.2.0" 1899 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1900 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1901 | dependencies: 1902 | has-flag "^4.0.0" 1903 | 1904 | tar-fs@^2.0.0: 1905 | version "2.1.1" 1906 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" 1907 | integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== 1908 | dependencies: 1909 | chownr "^1.1.1" 1910 | mkdirp-classic "^0.5.2" 1911 | pump "^3.0.0" 1912 | tar-stream "^2.1.4" 1913 | 1914 | tar-stream@^2.1.4: 1915 | version "2.2.0" 1916 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" 1917 | integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== 1918 | dependencies: 1919 | bl "^4.0.3" 1920 | end-of-stream "^1.4.1" 1921 | fs-constants "^1.0.0" 1922 | inherits "^2.0.3" 1923 | readable-stream "^3.1.1" 1924 | 1925 | text-table@^0.2.0: 1926 | version "0.2.0" 1927 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1928 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1929 | 1930 | tmp@^0.2.1: 1931 | version "0.2.1" 1932 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" 1933 | integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== 1934 | dependencies: 1935 | rimraf "^3.0.0" 1936 | 1937 | to-regex-range@^5.0.1: 1938 | version "5.0.1" 1939 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1940 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1941 | dependencies: 1942 | is-number "^7.0.0" 1943 | 1944 | tslib@^1.8.1: 1945 | version "1.14.1" 1946 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1947 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1948 | 1949 | tsutils@^3.21.0: 1950 | version "3.21.0" 1951 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1952 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1953 | dependencies: 1954 | tslib "^1.8.1" 1955 | 1956 | tunnel-agent@^0.6.0: 1957 | version "0.6.0" 1958 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1959 | integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== 1960 | dependencies: 1961 | safe-buffer "^5.0.1" 1962 | 1963 | tunnel@0.0.6: 1964 | version "0.0.6" 1965 | resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" 1966 | integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== 1967 | 1968 | type-check@^0.4.0, type-check@~0.4.0: 1969 | version "0.4.0" 1970 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1971 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1972 | dependencies: 1973 | prelude-ls "^1.2.1" 1974 | 1975 | type-fest@^0.20.2: 1976 | version "0.20.2" 1977 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1978 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1979 | 1980 | typed-rest-client@^1.8.4: 1981 | version "1.8.9" 1982 | resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.9.tgz#e560226bcadfe71b0fb5c416b587f8da3b8f92d8" 1983 | integrity sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g== 1984 | dependencies: 1985 | qs "^6.9.1" 1986 | tunnel "0.0.6" 1987 | underscore "^1.12.1" 1988 | 1989 | typescript@^4.7.4: 1990 | version "4.9.5" 1991 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" 1992 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== 1993 | 1994 | uc.micro@^1.0.1, uc.micro@^1.0.5: 1995 | version "1.0.6" 1996 | resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" 1997 | integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== 1998 | 1999 | underscore@^1.12.1: 2000 | version "1.13.6" 2001 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" 2002 | integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== 2003 | 2004 | uri-js@^4.2.2: 2005 | version "4.4.1" 2006 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2007 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2008 | dependencies: 2009 | punycode "^2.1.0" 2010 | 2011 | url-join@^4.0.1: 2012 | version "4.0.1" 2013 | resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" 2014 | integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== 2015 | 2016 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 2017 | version "1.0.2" 2018 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2019 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 2020 | 2021 | vscode-jsonrpc@8.0.2: 2022 | version "8.0.2" 2023 | resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz#f239ed2cd6004021b6550af9fd9d3e47eee3cac9" 2024 | integrity sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ== 2025 | 2026 | vscode-languageclient@8.0.2: 2027 | version "8.0.2" 2028 | resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.0.2.tgz#f1f23ce8c8484aa11e4b7dfb24437d3e59bb61c6" 2029 | integrity sha512-lHlthJtphG9gibGb/y72CKqQUxwPsMXijJVpHEC2bvbFqxmkj9LwQ3aGU9dwjBLqsX1S4KjShYppLvg1UJDF/Q== 2030 | dependencies: 2031 | minimatch "^3.0.4" 2032 | semver "^7.3.5" 2033 | vscode-languageserver-protocol "3.17.2" 2034 | 2035 | vscode-languageserver-protocol@3.17.2: 2036 | version "3.17.2" 2037 | resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz#beaa46aea06ed061576586c5e11368a9afc1d378" 2038 | integrity sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg== 2039 | dependencies: 2040 | vscode-jsonrpc "8.0.2" 2041 | vscode-languageserver-types "3.17.2" 2042 | 2043 | vscode-languageserver-types@3.17.2: 2044 | version "3.17.2" 2045 | resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz#b2c2e7de405ad3d73a883e91989b850170ffc4f2" 2046 | integrity sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA== 2047 | 2048 | which@^2.0.1: 2049 | version "2.0.2" 2050 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2051 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2052 | dependencies: 2053 | isexe "^2.0.0" 2054 | 2055 | word-wrap@^1.2.3: 2056 | version "1.2.3" 2057 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2058 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2059 | 2060 | workerpool@6.2.1: 2061 | version "6.2.1" 2062 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" 2063 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== 2064 | 2065 | wrap-ansi@^7.0.0: 2066 | version "7.0.0" 2067 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2068 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2069 | dependencies: 2070 | ansi-styles "^4.0.0" 2071 | string-width "^4.1.0" 2072 | strip-ansi "^6.0.0" 2073 | 2074 | wrappy@1: 2075 | version "1.0.2" 2076 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2077 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2078 | 2079 | xml2js@^0.5.0: 2080 | version "0.5.0" 2081 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" 2082 | integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== 2083 | dependencies: 2084 | sax ">=0.6.0" 2085 | xmlbuilder "~11.0.0" 2086 | 2087 | xmlbuilder@~11.0.0: 2088 | version "11.0.1" 2089 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" 2090 | integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== 2091 | 2092 | y18n@^5.0.5: 2093 | version "5.0.8" 2094 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2095 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2096 | 2097 | yallist@^4.0.0: 2098 | version "4.0.0" 2099 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2100 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2101 | 2102 | yargs-parser@20.2.4: 2103 | version "20.2.4" 2104 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 2105 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 2106 | 2107 | yargs-parser@^20.2.2: 2108 | version "20.2.9" 2109 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2110 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2111 | 2112 | yargs-unparser@2.0.0: 2113 | version "2.0.0" 2114 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 2115 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2116 | dependencies: 2117 | camelcase "^6.0.0" 2118 | decamelize "^4.0.0" 2119 | flat "^5.0.2" 2120 | is-plain-obj "^2.1.0" 2121 | 2122 | yargs@16.2.0: 2123 | version "16.2.0" 2124 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2125 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2126 | dependencies: 2127 | cliui "^7.0.2" 2128 | escalade "^3.1.1" 2129 | get-caller-file "^2.0.5" 2130 | require-directory "^2.1.1" 2131 | string-width "^4.2.0" 2132 | y18n "^5.0.5" 2133 | yargs-parser "^20.2.2" 2134 | 2135 | yauzl@^2.3.1: 2136 | version "2.10.0" 2137 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" 2138 | integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== 2139 | dependencies: 2140 | buffer-crc32 "~0.2.3" 2141 | fd-slicer "~1.1.0" 2142 | 2143 | yazl@^2.2.2: 2144 | version "2.5.1" 2145 | resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35" 2146 | integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw== 2147 | dependencies: 2148 | buffer-crc32 "~0.2.3" 2149 | 2150 | yocto-queue@^0.1.0: 2151 | version "0.1.0" 2152 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2153 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2154 | --------------------------------------------------------------------------------