├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md └── workflows │ └── main.yml ├── .gitignore ├── .travis.yml ├── .vscode ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── BACKERS.md ├── CHANGELOG.md ├── LICENSE ├── README.md ├── images ├── WeChatPublicAccount.jpg ├── alipay.png ├── book.jpg ├── logo.png ├── usage.gif └── usageRunByLanguage.gif ├── package-lock.json ├── package.json ├── src ├── appInsightsClient.ts ├── codeManager.ts ├── constants.ts ├── extension.ts └── utility.ts ├── syntaxes └── code-runner-output.tmLanguage ├── test ├── extension.test.ts └── index.ts ├── tsconfig.json └── tslint.json /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[Bug]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | 13 | - VS Code Version: 14 | - OS Version: 15 | - Code Runner Version: 16 | 17 | **Describe the bug** 18 | Description of what the bug is. 19 | 20 | **To Reproduce** 21 | Steps to reproduce the behavior: 22 | 23 | 1. 24 | 2. 25 | 26 | **Actual behavior** 27 | Description of what happened actually. 28 | 29 | **Expected behavior** 30 | Description of what you expected to happen. 31 | 32 | **Screenshots** 33 | If applicable, add screenshots to help explain your problem. 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Question 4 | url: https://stackoverflow.com/questions/tagged/vscode-code-runner 5 | about: Please ask and answer questions here. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Feature request]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | 13 | **Is your feature request related to a problem? Please describe.** 14 | Description of what the problem is. Ex. I'm always frustrated when [...] 15 | 16 | **Describe the solution you'd like** 17 | Description of what you want to happen. 18 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build: 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | os: [macos-latest, ubuntu-latest, windows-latest] 17 | runs-on: ${{ matrix.os }} 18 | 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v2 22 | - name: Install Node.js 23 | uses: actions/setup-node@v1 24 | with: 25 | node-version: 16.x 26 | - run: npm install 27 | - run: npm run vscode:prepublish 28 | - run: npm run tslint 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | npm-debug.log 3 | out 4 | node_modules 5 | *.vsix -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - "lts/*" 5 | os: 6 | - osx 7 | - linux 8 | 9 | before_install: 10 | - if [ $TRAVIS_OS_NAME == "linux" ]; then 11 | export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0; 12 | sh -e /etc/init.d/xvfb start; 13 | sleep 3; 14 | fi 15 | 16 | install: 17 | - npm install 18 | - npm run vscode:prepublish 19 | 20 | script: 21 | - npm run tslint 22 | - npm test --silent -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | { 3 | "version": "0.1.0", 4 | "configurations": [ 5 | { 6 | "name": "Launch Extension", 7 | "type": "extensionHost", 8 | "request": "launch", 9 | "runtimeExecutable": "${execPath}", 10 | "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], 11 | "stopOnEntry": false, 12 | "sourceMaps": true, 13 | "outDir": "${workspaceRoot}/out/src", 14 | "preLaunchTask": "npm" 15 | }, 16 | { 17 | "name": "Launch Tests", 18 | "type": "extensionHost", 19 | "request": "launch", 20 | "runtimeExecutable": "${execPath}", 21 | "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ], 22 | "stopOnEntry": false, 23 | "sourceMaps": true, 24 | "outDir": "${workspaceRoot}/out/test", 25 | "preLaunchTask": "npm" 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | "typescript.tsdk": "./node_modules/typescript/lib" // we want to use the TS server from our node_modules folder to control its version 10 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // Available variables which can be used inside of strings. 2 | // ${workspaceRoot}: the root folder of the team 3 | // ${file}: the current opened file 4 | // ${fileBasename}: the current opened file's basename 5 | // ${fileDirname}: the current opened file's dirname 6 | // ${fileExtname}: the current opened file's extension 7 | // ${cwd}: the current working directory of the spawned process 8 | 9 | // A task runner that calls a custom npm script that compiles the extension. 10 | { 11 | "version": "2.0.0", 12 | 13 | // we want to run npm 14 | "command": "npm", 15 | 16 | // we run the custom script "compile" as defined in package.json 17 | "args": ["run", "compile", "--loglevel", "silent"], 18 | 19 | // The tsc compiler is started in watching mode 20 | "isBackground": true, 21 | 22 | // use the standard tsc in watch mode problem matcher to find compile problems in the output. 23 | "problemMatcher": "$tsc-watch", 24 | "tasks": [ 25 | { 26 | "label": "npm", 27 | "type": "shell", 28 | "command": "npm", 29 | "args": [ 30 | "run", 31 | "compile", 32 | "--loglevel", 33 | "silent" 34 | ], 35 | "isBackground": true, 36 | "problemMatcher": "$tsc-watch", 37 | "group": "build" 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | typings/** 3 | out/test/** 4 | test/** 5 | src/** 6 | **/*.map 7 | .gitignore 8 | tsconfig.json 9 | vsc-extension-quickstart.md 10 | -------------------------------------------------------------------------------- /BACKERS.md: -------------------------------------------------------------------------------- 1 |

Backers

2 | 3 | - Daniel Wotapka 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 0.12.2 (2024-04-05) 2 | * Add support for Erlang 3 | * Add support for SPWN 4 | * Add support for Pkl 5 | * Add support for Gleam 6 | 7 | ### 0.12.1 (2023-10-08) 8 | * Add support for Mojo language 9 | 10 | ### 0.12.0 (2023-01-23) 11 | * Add support for Zig language 12 | * Use `runghc` to replace `runhaskell` for Haskell 13 | 14 | ### 0.11.8 (2022-06-11) 15 | * Add support for Standard ML 16 | * Adopt extension sponsorship 17 | 18 | ### 0.11.7 (2022-02-08) 19 | * Update run/stop icons 20 | 21 | ### 0.11.6 (2021-10-10) 22 | * Add support for Ring 23 | 24 | ### 0.11.5 (2021-07-10) 25 | * [#776](https://github.com/formulahendry/vscode-code-runner/pull/776): Add stop button in editor title bar 26 | 27 | ### 0.11.4 (2021-05-14) 28 | * [#783](https://github.com/formulahendry/vscode-code-runner/issues/783): Not detect shell on Windows correctly in VS Code 1.56 29 | 30 | ### 0.11.3 (2021-03-11) 31 | * Adopt 'run' menu in editor title 32 | 33 | ### 0.11.2 (2021-01-05) 34 | * Activate extension after VS Code starts up 35 | 36 | ### 0.11.1 (2020-10-11) 37 | * Add support for Fortran 38 | 39 | ### 0.11.0 (2020-07-07) 40 | * Integrate with new Python Interpreter Path API V2 of Python extension 41 | * Add support for Less 42 | 43 | ### 0.10.0 (2020-05-02) 44 | * Integrate with new Python Interpreter Path API of Python extension 45 | 46 | ### 0.9.17 (2020-03-11) 47 | * Add support for CUDA 48 | 49 | ### 0.9.16 (2020-02-20) 50 | * Add support for SCSS and Sass 51 | 52 | ### 0.9.15 (2019-11-21) 53 | * Add support for [V Programming Language](https://vlang.io/) 54 | 55 | ### 0.9.14 (2019-08-17) 56 | * [#516](https://github.com/formulahendry/vscode-code-runner/pull/516): Update "Run" icon to match new icon style 57 | 58 | ### 0.9.13 (2019-08-14) 59 | * [#428](https://github.com/formulahendry/vscode-code-runner/pull/428): Use spawn to avoid stdout buffer exceeded 60 | 61 | ### 0.9.12 (2019-08-02) 62 | * Add support for Scheme using [CHICKEN Scheme](https://www.call-cc.org/) 63 | 64 | ### 0.9.11 (2019-06-12) 65 | * [#491](https://github.com/formulahendry/vscode-code-runner/issues/491): Fix terminal detection due to VS Code's change in 1.35 66 | 67 | ### 0.9.10 (2019-06-02) 68 | * [#484](https://github.com/formulahendry/vscode-code-runner/pull/484): Fix Rust attributes considered as Shebang 69 | 70 | ### 0.9.9 (2019-05-04) 71 | * Fix tempCodeRunnerFile not being deleted 72 | * Add option to hide "Run Code" from explorer context menu 73 | 74 | ### 0.9.8 (2019-04-07) 75 | * Add support for [Kit](https://www.kitlang.org/) 76 | 77 | ### 0.9.7 (2019-01-29) 78 | * Add config entry to set the executor per filename glob 79 | * Support Maven project (pom.xml) 80 | * Add [CODING](https://e.coding.net/?utm_source=hendry-code-runner&utm_medium=cpc&utm_campaign=hendry-code-runner) as our second sponsor 81 | 82 | ### 0.9.6 (2019-01-16) 83 | * Add support for Lisp 84 | 85 | ### 0.9.5 (2018-10-29) 86 | * We have our first sponsor now: [CodeStream](https://codestream.com/?utm_source=vscmarket&utm_medium=banner&utm_campaign=coderunner) 87 | 88 | ### 0.9.4 (2018-08-03) 89 | * [#70](https://github.com/formulahendry/vscode-code-runner/issues/70): Use `-u` flag for Python to force stdin, stdout and stderr to be totally unbuffered. 90 | 91 | ### 0.9.3 (2018-03-19) 92 | * [#273](https://github.com/formulahendry/vscode-code-runner/issues/273): Could not run file without extension 93 | 94 | ### 0.9.2 (2018-03-13) 95 | * Add $pythonPath customized parameter to respect `python.pythonPath` setting 96 | 97 | ### 0.9.1 (2018-03-08) 98 | * Add option to respect Shebang or not 99 | 100 | ### 0.9.0 (2018-03-04) 101 | * Add support for Shebang 102 | 103 | ### 0.8.7 (2017-12-30) 104 | * Add support for Perl 6 105 | 106 | ### 0.8.6 (2017-12-22) 107 | * Fix kotlin script execution 108 | 109 | ### 0.8.5 (2017-11-30) 110 | * Add support for F# (.NET Core) 111 | 112 | ### 0.8.4 (2017-11-17) 113 | * [#207](https://github.com/formulahendry/vscode-code-runner/issues/207): Add option to hide "Run Code" from editor context menu 114 | 115 | ### 0.8.3 (2017-11-04) 116 | * Add support for C# (.NET Core) 117 | 118 | ### 0.8.2 (2017-10-26) 119 | * [#196](https://github.com/formulahendry/vscode-code-runner/issues/196): Fix 'run code' hotkey not working 120 | 121 | ### 0.8.1 (2017-10-26) 122 | * Distinguish whether it is running from file explorer 123 | 124 | ### 0.8.0 (2017-10-25) 125 | * [#88](https://github.com/formulahendry/vscode-code-runner/issues/88): Run file through context menu of file explorer 126 | 127 | ### 0.7.4 (2017-10-20) 128 | * [#191](https://github.com/formulahendry/vscode-code-runner/issues/191): Stop running code when VS Code is closed 129 | 130 | ### 0.7.3 (2017-10-14) 131 | * Add support for Multi Root Workspaces 132 | 133 | ### 0.7.2 (2017-09-29) 134 | * [#182](https://github.com/formulahendry/vscode-code-runner/issues/182): Add $driveLetter customized parameter 135 | 136 | ### 0.7.1 (2017-08-24) 137 | * [#98](https://github.com/formulahendry/vscode-code-runner/issues/98): Add .ts extension mapping for typescript 138 | 139 | ### 0.7.0 (2017-08-20) 140 | * [#164](https://github.com/formulahendry/vscode-code-runner/issues/164): Make temporary file name not random by default 141 | * Support running code snippet in terminal 142 | 143 | ### 0.6.33 (2017-08-10) 144 | * [#149](https://github.com/formulahendry/vscode-code-runner/issues/149): Set custom terminal root path for Linux Shell on Windows 145 | 146 | ### 0.6.32 (2017-08-05) 147 | * [#146](https://github.com/formulahendry/vscode-code-runner/issues/146): Enable fileDirectoryAsCwd in Terminal 148 | 149 | ### 0.6.31 (2017-08-03) 150 | * Fix code running in PowerShell 151 | 152 | ### 0.6.30 (2017-08-01) 153 | * [#152](https://github.com/formulahendry/vscode-code-runner/issues/152): Clear previous output when running in terminal 154 | 155 | ### 0.6.29 (2017-07-28) 156 | * [#132](https://github.com/formulahendry/vscode-code-runner/issues/132): Refine 'Run Code' button 157 | 158 | ### 0.6.28 (2017-07-22) 159 | * [#106](https://github.com/formulahendry/vscode-code-runner/issues/106): [Continuous Fix for Bash on Windows] Handle multiple file path and case-insensitive bash path 160 | 161 | ### 0.6.27 (2017-07-20) 162 | * [#106](https://github.com/formulahendry/vscode-code-runner/issues/106): Handle file path for Bash on Windows 163 | 164 | ### 0.6.26 (2017-07-13) 165 | * [#140](https://github.com/formulahendry/vscode-code-runner/issues/140): Add support for Nim 166 | 167 | ### 0.6.25 (2017-07-12) 168 | * [#130](https://github.com/formulahendry/vscode-code-runner/issues/130): Add option to save all files before running 169 | 170 | ### 0.6.24 (2017-06-22) 171 | * Add support for Haskell 172 | 173 | ### 0.6.23 (2017-06-21) 174 | * [#131](https://github.com/formulahendry/vscode-code-runner/issues/131): Option to hide 'Run Code' button 175 | * Refine 'Run Code' button 176 | 177 | ### 0.6.22 (2017-06-20) 178 | * [#128](https://github.com/formulahendry/vscode-code-runner/issues/128): Add 'Run Code' buuton in editor title menu 179 | 180 | ### 0.6.21 (2017-06-18) 181 | * Add support for D 182 | 183 | ### 0.6.20 (2017-06-14) 184 | * Resolve [GitHub issue#126](https://github.com/formulahendry/vscode-code-runner/issues/126): Add support for Free Pascal 185 | 186 | ### 0.6.19 (2017-06-13) 187 | * Add support for Dart 188 | 189 | ### 0.6.18 (2017-06-02) 190 | * Add support for Kotlin script (.kts) 191 | 192 | ### 0.6.17 (2017-05-20) 193 | * Resolve [GitHub issue#113](https://github.com/formulahendry/vscode-code-runner/issues/113): Add support for Kotlin 194 | 195 | ### 0.6.16 (2017-04-15) 196 | * Resolve [GitHub issue#102](https://github.com/formulahendry/vscode-code-runner/issues/102): Add config entry to set whether to ignore selection to always run entire file 197 | 198 | ### 0.6.15 (2017-03-26) 199 | * Add support for AutoIt 200 | 201 | ### 0.6.14 (2017-03-12) 202 | * Resolve [GitHub issue#93](https://github.com/formulahendry/vscode-code-runner/issues/93): Add config entry to set whether to preserve focus on code editor after code run is triggered 203 | 204 | ### 0.6.13 (2017-03-05) 205 | * Add support for AutoHotkey 206 | 207 | ### 0.6.12 208 | * Add support for Racket 209 | 210 | ### 0.6.11 211 | * Add support for Rust 212 | * Set cwd as the directory of the code file if no folder has been opened 213 | 214 | ### 0.6.10 215 | * Resolve [GitHub issue#77](https://github.com/formulahendry/vscode-code-runner/issues/77): Add support for Objective-C 216 | 217 | ### 0.6.9 218 | * Change executor if the Integrated Terminal is PowerShell on Windows 219 | 220 | ### 0.6.8 221 | * Add support for Haxe 222 | 223 | ### 0.6.7 224 | * Resolve [GitHub issue#57](https://github.com/formulahendry/vscode-code-runner/issues/57): Add support for Clojure 225 | * Fix output color due to changed VS Code 1.9 226 | * Improve output color for numeric 227 | 228 | ### 0.6.6 229 | * Resolve [GitHub issue#54](https://github.com/formulahendry/vscode-code-runner/issues/54): Add support for VB.NET 230 | * Resolve [GitHub issue#51](https://github.com/formulahendry/vscode-code-runner/issues/51): Add support for $workspaceRoot 231 | 232 | ### 0.6.5 233 | * Resolve [GitHub issue#43](https://github.com/formulahendry/vscode-code-runner/issues/43): Add support for Elixir 234 | * Upgrade applicationinsights npm since [telemetry data requires HTTPS](https://azure.microsoft.com/en-us/updates/application-insights-telemetry-data-now-requires-https-with-shutdown-of-http-data-collectors/) 235 | 236 | ### 0.6.4 237 | * Resolve [GitHub issue#41](https://github.com/formulahendry/vscode-code-runner/issues/41): Fix running C/C++ in Windows 238 | 239 | ### 0.6.3 240 | * Add support for AppleScript 241 | * Add PayPal link in donation section 242 | 243 | ### 0.6.2 244 | * Add support for R Language 245 | * Add donation section in README.md 246 | 247 | ### 0.6.1 248 | * Minor fix for running custom command when there is no active editor window 249 | 250 | ### 0.6.0 251 | * Add support to run custom command 252 | 253 | ### 0.5.1 254 | * Resolve [GitHub issue#21](https://github.com/formulahendry/vscode-code-runner/issues/21): Remove "Run Code" in Output Channel 255 | * Add "Stop Code Run" in Output Channel 256 | * Resolve [GitHub issue#32](https://github.com/formulahendry/vscode-code-runner/issues/32): Preserve focus of Text Editor after code is running 257 | * Not add quote for $fileNameWithoutExt and $fileName 258 | * Not add extra space for placeholders 259 | 260 | ### 0.5.0 261 | * Add placeholders into configuration for compiled language 262 | * Add support for C, C++, Java 263 | 264 | ### 0.4.2 265 | * Add support for OCaml Script 266 | 267 | ### 0.4.1 268 | * Avoid running code in Integrated Terminal when it is untitled file or code snippet 269 | 270 | ### 0.4.0 271 | * Add support to run code in Integrated Terminal 272 | 273 | ### 0.3.4 274 | * Resolve [GitHub issue#24](https://github.com/formulahendry/vscode-code-runner/issues/24): Add config entry to set whether to show extra execution message 275 | 276 | ### 0.3.3 277 | * Add support to run by language from a suggestion list 278 | 279 | ### 0.3.2 280 | * Add support for Swift, Julia, Crystal 281 | 282 | ### 0.3.1 283 | * Update README.md about running TypeScript with ts-node 284 | 285 | ### 0.3.0 286 | * Add support for TypeScript, CoffeeScript, Scala 287 | 288 | ### 0.2.4 289 | * Resolve [GitHub issue#20](https://github.com/formulahendry/vscode-code-runner/issues/20): Add config entry to determine whether to use the directory of the file to be executed as the working directory 290 | 291 | ### 0.2.3 292 | * Resolve [GitHub issue#18](https://github.com/formulahendry/vscode-code-runner/issues/18): Fix output highlight when execution time is greater than 10 seconds 293 | 294 | ### 0.2.2 295 | * Resolve [GitHub issue#12](https://github.com/formulahendry/vscode-code-runner/issues/12): Add 'Run Code' entry to editor context menu 296 | 297 | ### 0.2.1 298 | * Resolve [GitHub issue#8](https://github.com/formulahendry/vscode-code-runner/issues/8): Fix output highlight 299 | * Resolve [GitHub issue#10](https://github.com/formulahendry/vscode-code-runner/issues/10): Add option to save the file before running 300 | * Resolve [GitHub issue#11](https://github.com/formulahendry/vscode-code-runner/issues/11): Set the mapping of languageId to file extension 301 | * Add Application Insights to track telemetry data to improve this extension 302 | 303 | ### 0.2.0 304 | * Resolve [GitHub issue#6](https://github.com/formulahendry/vscode-code-runner/issues/6): Add config entry to set whether to clear previous output before each run 305 | * Resolve [GitHub issue#7](https://github.com/formulahendry/vscode-code-runner/issues/7): Add colorizer for output and refine output 306 | * Use the current file to run if there is no selection and it is not untitled 307 | * If there is selection and the file is not untitled, create tmp file in the file folder to run the code sinnpet 308 | 309 | ### 0.1.3 310 | * Resolve [GitHub issue#5](https://github.com/formulahendry/vscode-code-runner/issues/5): Put the temp code file in working directory instead of os temp folder 311 | 312 | ### 0.1.2 313 | * Resolve [GitHub issue#5](https://github.com/formulahendry/vscode-code-runner/issues/5): Add support to set working directory 314 | 315 | ### 0.1.1 316 | * Add support for VBScript 317 | * Add config entry to set the executor per file extension 318 | 319 | ### 0.1.0 320 | * Add support to set default language to run 321 | * Add support to select language to run 322 | 323 | ### 0.0.5 324 | * Add support for C# script 325 | 326 | ### 0.0.4 327 | * Add support for F# script 328 | 329 | ### 0.0.3 330 | * Add support for powershell, bat/cmd and bash/sh 331 | 332 | ### 0.0.2 333 | * Add support for lua and groovy 334 | 335 | ### 0.0.1 336 | * Initial Release 337 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Jun Han 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Code Runner 2 | 3 | [![Join the chat at https://gitter.im/formulahendry/vscode-code-runner](https://badges.gitter.im/formulahendry/vscode-code-runner.svg)](https://gitter.im/formulahendry/vscode-code-runner?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) ![Downloads](https://img.shields.io/visual-studio-marketplace/d/formulahendry.code-runner) ![Rating](https://img.shields.io/visual-studio-marketplace/r/formulahendry.code-runner) [![Actions Status](https://github.com/formulahendry/vscode-code-runner/actions/workflows/main.yml/badge.svg)](https://github.com/formulahendry/vscode-code-runner/actions/workflows/main.yml) 4 | 5 | Run code snippet or code file for multiple languages: **C, C++, Java, JavaScript, PHP, Python, Perl, Perl 6, Ruby, Go, Lua, Groovy, PowerShell, BAT/CMD, BASH/SH, F# Script, F# (.NET Core), C# Script, C# (.NET Core), VBScript, TypeScript, CoffeeScript, Scala, Swift, Julia, Crystal, OCaml Script, R, AppleScript, Elixir, Visual Basic .NET, Clojure, Haxe, Objective-C, Rust, Racket, Scheme, AutoHotkey, AutoIt, Kotlin, Dart, Free Pascal, Haskell, Nim, D, Lisp, Kit, V, SCSS, Sass, CUDA, Less, Fortran, Ring, Standard ML, Zig, Mojo, Erlang, SPWN, Pkl, Gleam**, and custom command 6 | 7 | ## Book for VS Code 8 | 9 | [《Visual Studio Code 权威指南》](https://union-click.jd.com/jdc?e=jdext-1261348777639735296-0&p=AyIGZRhbHQsWAVIaXxEyEgRdG1sRBxU3EUQDS10iXhBeGlcJDBkNXg9JHUlSSkkFSRwSBF0bWxEHFRgMXgdIMkRxFAUJD1RQZT0cBnwKDE4%2BaDpgB2ILWStbHAIQD1QaWxIBIgdUGlsRBxEEUxprJQIXNwd1g6O0yqLkB4%2B%2FjcePwitaJQIWD1cfWhwKGwVSG1wlAhoDZc31gdeauIyr%2FsOovNLYq46cqca50ytrJQEiXABPElAeEgRSG1kQCxQBUxxZHQQQA1YTXAkDIgdUGlscChECXRs1FGwSD1UbWRALFwRWK1slASJZOxoLRlUXU1NONU9QEkdXWRlJbBUDVB9TFgAVN1caWhcA):带你深入浅出 VS Code! 10 | 11 | ![Book](images/book.jpg) 12 | 13 | ## WeChat Official Account 14 | 15 | VS Code 的热门文章、使用技巧、插件推荐、插件开发攻略等,请关注“**玩转VS Code**”公众号! 16 | 17 | ![WeChat](images/WeChatPublicAccount.jpg) 18 | 19 | ## Donation 20 | 21 | If you like this extension, you could become a backer or sponsor via **[Patreon](https://www.patreon.com/junhan)**, donate via **[PayPal](https://www.paypal.me/junhanme)**, or scan below QR code to donate via **Alipay**. Any amount is welcome. It will encourage me to make this extension better and better! 22 | 23 | ![Alipay](images/alipay.png) 24 | 25 | ## Features 26 | 27 | * Run code file of current active Text Editor 28 | * Run code file through context menu of file explorer 29 | * Run selected code snippet in Text Editor 30 | * Run code per Shebang 31 | * Run code per filename glob 32 | * Run custom command 33 | * Stop code running 34 | * View output in Output Window 35 | * Set default language to run 36 | * Select language to run 37 | * Support REPL by running code in Integrated Terminal 38 | 39 | ## Usages 40 | 41 | * To run code: 42 | * use shortcut `Ctrl+Alt+N` 43 | * or press `F1` and then select/type `Run Code`, 44 | * or right click the Text Editor and then click `Run Code` in editor context menu 45 | * or click `Run Code` button in editor title menu 46 | * or click `Run Code` button in context menu of file explorer 47 | * To stop the running code: 48 | * use shortcut `Ctrl+Alt+M` 49 | * or press `F1` and then select/type `Stop Code Run` 50 | * or click `Stop Code Run` button in editor title menu 51 | * or right click the Output Channel and then click `Stop Code Run` in context menu 52 | 53 | ![Usage](images/usage.gif) 54 | 55 | * To select language to run, use shortcut `Ctrl+Alt+J`, or press `F1` and then select/type `Run By Language`, then type or select the language to run: e.g `php, javascript, bat, shellscript...` 56 | 57 | ![Usage](images/usageRunByLanguage.gif) 58 | 59 | * To run custom command, then use shortcut `Ctrl+Alt+K`, or press `F1` and then select/type `Run Custom Command` 60 | 61 | ## Configuration 62 | 63 | Make sure the executor PATH of each language is set in the environment variable. 64 | You could also add entry into `code-runner.executorMap` to set the executor PATH. 65 | e.g. To set the executor PATH for ruby, php and html: 66 | ```json 67 | { 68 | "code-runner.executorMap": { 69 | "javascript": "node", 70 | "php": "C:\\php\\php.exe", 71 | "python": "python", 72 | "perl": "perl", 73 | "ruby": "C:\\Ruby23-x64\\bin\\ruby.exe", 74 | "go": "go run", 75 | "html": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"", 76 | "java": "cd $dir && javac $fileName && java $fileNameWithoutExt", 77 | "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" 78 | } 79 | } 80 | ``` 81 | **Supported customized parameters** 82 | * $workspaceRoot: The path of the folder opened in VS Code 83 | * $dir: The directory of the code file being run 84 | * $dirWithoutTrailingSlash: The directory of the code file being run without a trailing slash 85 | * $fullFileName: The full name of the code file being run 86 | * $fileName: The base name of the code file being run, that is the file without the directory 87 | * $fileNameWithoutExt: The base name of the code file being run without its extension 88 | * $driveLetter: The drive letter of the code file being run (Windows only) 89 | * $pythonPath: The path of Python interpreter (set by `Python: Select Interpreter` command) 90 | 91 | **Please take care of the back slash and the space in file path of the executor** 92 | * Back slash: please use `\\` 93 | * If there ares spaces in file path, please use `\"` to surround your file path 94 | 95 | You could set the executor per filename [glob](https://en.wikipedia.org/wiki/Glob_(programming)): 96 | ```json 97 | { 98 | "code-runner.executorMapByGlob": { 99 | "pom.xml": "cd $dir && mvn clean package", 100 | "*.test.js": "tap", 101 | "*.js": "node" 102 | } 103 | } 104 | ``` 105 | 106 | Besides, you could set the default language to run: 107 | ```json 108 | { 109 | "code-runner.defaultLanguage": "javascript" 110 | } 111 | ``` 112 | **For the default language:** It should be set with language id defined in [VS Code](https://github.com/Microsoft/vscode/tree/master/extensions). The languages you could set are `java, c, cpp, javascript, php, python, perl, ruby, go, lua, groovy, powershell, bat, shellscript, fsharp, csharp, vbscript, typescript, coffeescript, swift, r, clojure, haxe, objective-c, rust, racket, ahk, autoit, kotlin, dart, pascal, haskell, nim, d, lisp` 113 | 114 | Also, you could set the executor per file extension: 115 | ```json 116 | { 117 | "code-runner.executorMapByFileExtension": { 118 | ".vbs": "cscript //Nologo" 119 | } 120 | } 121 | ``` 122 | 123 | To set the custom command to run: 124 | ```json 125 | { 126 | "code-runner.customCommand": "echo Hello" 127 | } 128 | ``` 129 | 130 | To set the the working directory: 131 | ```json 132 | { 133 | "code-runner.cwd": "path/to/working/directory" 134 | } 135 | ``` 136 | 137 | To set whether to clear previous output before each run (default is false): 138 | ```json 139 | { 140 | "code-runner.clearPreviousOutput": false 141 | } 142 | ``` 143 | 144 | To set whether to save all files before running (default is false): 145 | ```json 146 | { 147 | "code-runner.saveAllFilesBeforeRun": false 148 | } 149 | ``` 150 | 151 | To set whether to save the current file before running (default is false): 152 | ```json 153 | { 154 | "code-runner.saveFileBeforeRun": false 155 | } 156 | ``` 157 | 158 | To set whether to show extra execution message like [Running] ... and [Done] ... (default is true): 159 | ```json 160 | { 161 | "code-runner.showExecutionMessage": true 162 | } 163 | ``` 164 | 165 | **[REPL support]** To set whether to run code in Integrated Terminal (only support to run whole file in Integrated Terminal, neither untitled file nor code snippet) (default is false): 166 | ```json 167 | { 168 | "code-runner.runInTerminal": false 169 | } 170 | ``` 171 | 172 | To set whether to preserve focus on code editor after code run is triggered (default is true, the code editor will keep focus; when it is false, Terminal or Output Channel will take focus): 173 | ```json 174 | { 175 | "code-runner.preserveFocus": true 176 | } 177 | ``` 178 | 179 | `code-runner.ignoreSelection`: Whether to ignore selection to always run entire file. (Default is **false**) 180 | 181 | `code-runner.showRunIconInEditorTitleMenu`: Whether to show 'Run Code' icon in editor title menu. (Default is **true**) 182 | 183 | `code-runner.showRunCommandInEditorContextMenu`: Whether to show 'Run Code' command in editor context menu. (Default is **true**) 184 | 185 | `code-runner.showRunCommandInExplorerContextMenu`: Whether to show 'Run Code' command in explorer context menu. (Default is **true**) 186 | 187 | `code-runner.showStopIconInEditorTitleMenu`: Whether to show 'Stop Code Run' icon in editor title menu when code is running. (Default is **true**) 188 | 189 | `code-runner.terminalRoot`: For Windows system, replaces the Windows style drive letter in the command with a Unix style root when using a custom shell as the terminal, like Bash or Cgywin. Example: Setting this to `/mnt/` will replace `C:\path` with `/mnt/c/path` (Default is **""**) 190 | 191 | `code-runner.temporaryFileName`: Temporary file name used in running selected code snippet. When it is set as empty, the file name will be random. (Default is **"tempCodeRunnerFile"**) 192 | 193 | `code-runner.respectShebang`: Whether to respect Shebang to run code. (Default is **true**) 194 | 195 | ## About CWD Setting (current working directory) 196 | 1. By default, use the `code-runner.cwd` setting 197 | 2. If `code-runner.cwd` is not set and `code-runner.fileDirectoryAsCwd` is `true`, use the directory of the file to be executed 198 | 3. If `code-runner.cwd` is not set and `code-runner.fileDirectoryAsCwd` is `false`, use the path of root folder that is open in VS Code 199 | 4. If no folder is open, use the os temp folder 200 | 201 | ## Note 202 | * For Objective-C, it is only supported on macOS 203 | * To run C# script, you need to install [scriptcs](http://scriptcs.net/) 204 | * To run TypeScript, you need to install [ts-node](https://github.com/TypeStrong/ts-node) 205 | * To run Clojure, you need to install [Leiningen](https://leiningen.org/) and [lein-exec](https://github.com/kumarshantanu/lein-exec) 206 | 207 | ## Telemetry data 208 | By default, telemetry data collection is turned on to understand user behavior to improve this extension. To disable it, update the settings.json as below: 209 | ```json 210 | { 211 | "code-runner.enableAppInsights": false 212 | } 213 | ``` 214 | 215 | ## Change Log 216 | See Change Log [here](CHANGELOG.md) 217 | 218 | ## Issues 219 | Submit the [issues](https://github.com/formulahendry/vscode-code-runner/issues) if you find any bug or have any suggestion. 220 | 221 | ## Contribution 222 | Fork the [repo](https://github.com/formulahendry/vscode-code-runner) and submit pull requests. 223 | -------------------------------------------------------------------------------- /images/WeChatPublicAccount.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/formulahendry/vscode-code-runner/97af1080d09046e0129acce592f0033ff2df9f26/images/WeChatPublicAccount.jpg -------------------------------------------------------------------------------- /images/alipay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/formulahendry/vscode-code-runner/97af1080d09046e0129acce592f0033ff2df9f26/images/alipay.png -------------------------------------------------------------------------------- /images/book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/formulahendry/vscode-code-runner/97af1080d09046e0129acce592f0033ff2df9f26/images/book.jpg -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/formulahendry/vscode-code-runner/97af1080d09046e0129acce592f0033ff2df9f26/images/logo.png -------------------------------------------------------------------------------- /images/usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/formulahendry/vscode-code-runner/97af1080d09046e0129acce592f0033ff2df9f26/images/usage.gif -------------------------------------------------------------------------------- /images/usageRunByLanguage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/formulahendry/vscode-code-runner/97af1080d09046e0129acce592f0033ff2df9f26/images/usageRunByLanguage.gif -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "code-runner", 3 | "version": "0.12.2", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "code-runner", 9 | "version": "0.12.2", 10 | "dependencies": { 11 | "applicationinsights": "^0.19.0", 12 | "micromatch": "^4.0.2", 13 | "tree-kill": "^1.2.2" 14 | }, 15 | "devDependencies": { 16 | "@types/micromatch": "^3.1.0", 17 | "@types/mocha": "^2.2.32", 18 | "@types/node": "^6.0.40", 19 | "@types/vscode": "^1.56.0", 20 | "mocha": "^6.1.4", 21 | "tslint": "^5.5.0", 22 | "typescript": "^3.8.3" 23 | }, 24 | "engines": { 25 | "vscode": "^1.56.0" 26 | } 27 | }, 28 | "node_modules/@types/braces": { 29 | "version": "2.3.0", 30 | "resolved": "https://registry.npmjs.org/@types/braces/-/braces-2.3.0.tgz", 31 | "integrity": "sha512-A3MV5EsLHgShHoJ/XES/fQAnwNISKLrFuH9eNBZY5OkTQB7JPIwbRoExvRpDsNABvkMojnKqKWS8x0m2rLYi+A==", 32 | "dev": true 33 | }, 34 | "node_modules/@types/micromatch": { 35 | "version": "3.1.0", 36 | "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-3.1.0.tgz", 37 | "integrity": "sha512-06uA9V7v68RTOzA3ky1Oi0HmCPa+YJ050vM+sTECwkxnHUQnO17TAcNCGX400QT6bldUiPb7ux5oKy0j8ccEDw==", 38 | "dev": true, 39 | "dependencies": { 40 | "@types/braces": "*" 41 | } 42 | }, 43 | "node_modules/@types/mocha": { 44 | "version": "2.2.48", 45 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 46 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 47 | "dev": true 48 | }, 49 | "node_modules/@types/node": { 50 | "version": "6.0.101", 51 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz", 52 | "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==", 53 | "dev": true 54 | }, 55 | "node_modules/@types/vscode": { 56 | "version": "1.56.0", 57 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", 58 | "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", 59 | "dev": true 60 | }, 61 | "node_modules/ansi-colors": { 62 | "version": "3.2.3", 63 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", 64 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", 65 | "dev": true, 66 | "engines": { 67 | "node": ">=6" 68 | } 69 | }, 70 | "node_modules/ansi-regex": { 71 | "version": "2.1.1", 72 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 73 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 74 | "dev": true, 75 | "engines": { 76 | "node": ">=0.10.0" 77 | } 78 | }, 79 | "node_modules/ansi-styles": { 80 | "version": "2.2.1", 81 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 82 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 83 | "dev": true, 84 | "engines": { 85 | "node": ">=0.10.0" 86 | } 87 | }, 88 | "node_modules/applicationinsights": { 89 | "version": "0.19.0", 90 | "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-0.19.0.tgz", 91 | "integrity": "sha1-izrz1N8FQpwSfNZEMcuB5AYJfYM=", 92 | "dependencies": { 93 | "zone.js": "0.7.6" 94 | } 95 | }, 96 | "node_modules/argparse": { 97 | "version": "1.0.10", 98 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 99 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 100 | "dev": true, 101 | "dependencies": { 102 | "sprintf-js": "~1.0.2" 103 | } 104 | }, 105 | "node_modules/babel-code-frame": { 106 | "version": "6.26.0", 107 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 108 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 109 | "dev": true, 110 | "dependencies": { 111 | "chalk": "^1.1.3", 112 | "esutils": "^2.0.2", 113 | "js-tokens": "^3.0.2" 114 | } 115 | }, 116 | "node_modules/babel-code-frame/node_modules/chalk": { 117 | "version": "1.1.3", 118 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 119 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 120 | "dev": true, 121 | "dependencies": { 122 | "ansi-styles": "^2.2.1", 123 | "escape-string-regexp": "^1.0.2", 124 | "has-ansi": "^2.0.0", 125 | "strip-ansi": "^3.0.0", 126 | "supports-color": "^2.0.0" 127 | }, 128 | "engines": { 129 | "node": ">=0.10.0" 130 | } 131 | }, 132 | "node_modules/babel-code-frame/node_modules/supports-color": { 133 | "version": "2.0.0", 134 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 135 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 136 | "dev": true, 137 | "engines": { 138 | "node": ">=0.8.0" 139 | } 140 | }, 141 | "node_modules/balanced-match": { 142 | "version": "1.0.0", 143 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 144 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 145 | "dev": true 146 | }, 147 | "node_modules/brace-expansion": { 148 | "version": "1.1.11", 149 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 150 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 151 | "dev": true, 152 | "dependencies": { 153 | "balanced-match": "^1.0.0", 154 | "concat-map": "0.0.1" 155 | } 156 | }, 157 | "node_modules/braces": { 158 | "version": "3.0.2", 159 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 160 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 161 | "dependencies": { 162 | "fill-range": "^7.0.1" 163 | }, 164 | "engines": { 165 | "node": ">=8" 166 | } 167 | }, 168 | "node_modules/builtin-modules": { 169 | "version": "1.1.1", 170 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 171 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 172 | "dev": true, 173 | "engines": { 174 | "node": ">=0.10.0" 175 | } 176 | }, 177 | "node_modules/camelcase": { 178 | "version": "5.3.1", 179 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 180 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 181 | "dev": true, 182 | "engines": { 183 | "node": ">=6" 184 | } 185 | }, 186 | "node_modules/chalk": { 187 | "version": "2.3.1", 188 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", 189 | "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", 190 | "dev": true, 191 | "dependencies": { 192 | "ansi-styles": "^3.2.0", 193 | "escape-string-regexp": "^1.0.5", 194 | "supports-color": "^5.2.0" 195 | }, 196 | "engines": { 197 | "node": ">=4" 198 | } 199 | }, 200 | "node_modules/chalk/node_modules/ansi-styles": { 201 | "version": "3.2.0", 202 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 203 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 204 | "dev": true, 205 | "dependencies": { 206 | "color-convert": "^1.9.0" 207 | }, 208 | "engines": { 209 | "node": ">=4" 210 | } 211 | }, 212 | "node_modules/chalk/node_modules/escape-string-regexp": { 213 | "version": "1.0.5", 214 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 215 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 216 | "dev": true, 217 | "engines": { 218 | "node": ">=0.8.0" 219 | } 220 | }, 221 | "node_modules/chalk/node_modules/supports-color": { 222 | "version": "5.2.0", 223 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", 224 | "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", 225 | "dev": true, 226 | "dependencies": { 227 | "has-flag": "^3.0.0" 228 | }, 229 | "engines": { 230 | "node": ">=4" 231 | } 232 | }, 233 | "node_modules/cliui": { 234 | "version": "4.1.0", 235 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", 236 | "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", 237 | "dev": true, 238 | "dependencies": { 239 | "string-width": "^2.1.1", 240 | "strip-ansi": "^4.0.0", 241 | "wrap-ansi": "^2.0.0" 242 | } 243 | }, 244 | "node_modules/cliui/node_modules/ansi-regex": { 245 | "version": "3.0.0", 246 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 247 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 248 | "dev": true, 249 | "engines": { 250 | "node": ">=4" 251 | } 252 | }, 253 | "node_modules/cliui/node_modules/strip-ansi": { 254 | "version": "4.0.0", 255 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 256 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 257 | "dev": true, 258 | "dependencies": { 259 | "ansi-regex": "^3.0.0" 260 | }, 261 | "engines": { 262 | "node": ">=4" 263 | } 264 | }, 265 | "node_modules/code-point-at": { 266 | "version": "1.1.0", 267 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 268 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 269 | "dev": true, 270 | "engines": { 271 | "node": ">=0.10.0" 272 | } 273 | }, 274 | "node_modules/color-convert": { 275 | "version": "1.9.1", 276 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 277 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 278 | "dev": true, 279 | "dependencies": { 280 | "color-name": "^1.1.1" 281 | } 282 | }, 283 | "node_modules/color-name": { 284 | "version": "1.1.3", 285 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 286 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 287 | "dev": true 288 | }, 289 | "node_modules/concat-map": { 290 | "version": "0.0.1", 291 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 292 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 293 | "dev": true 294 | }, 295 | "node_modules/cross-spawn": { 296 | "version": "6.0.5", 297 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 298 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 299 | "dev": true, 300 | "dependencies": { 301 | "nice-try": "^1.0.4", 302 | "path-key": "^2.0.1", 303 | "semver": "^5.5.0", 304 | "shebang-command": "^1.2.0", 305 | "which": "^1.2.9" 306 | }, 307 | "engines": { 308 | "node": ">=4.8" 309 | } 310 | }, 311 | "node_modules/debug": { 312 | "version": "3.2.6", 313 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 314 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 315 | "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", 316 | "dev": true, 317 | "dependencies": { 318 | "ms": "^2.1.1" 319 | } 320 | }, 321 | "node_modules/decamelize": { 322 | "version": "1.2.0", 323 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 324 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 325 | "dev": true, 326 | "engines": { 327 | "node": ">=0.10.0" 328 | } 329 | }, 330 | "node_modules/define-properties": { 331 | "version": "1.1.3", 332 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 333 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 334 | "dev": true, 335 | "dependencies": { 336 | "object-keys": "^1.0.12" 337 | }, 338 | "engines": { 339 | "node": ">= 0.4" 340 | } 341 | }, 342 | "node_modules/diff": { 343 | "version": "3.5.0", 344 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 345 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 346 | "dev": true, 347 | "engines": { 348 | "node": ">=0.3.1" 349 | } 350 | }, 351 | "node_modules/emoji-regex": { 352 | "version": "7.0.3", 353 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 354 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 355 | "dev": true 356 | }, 357 | "node_modules/end-of-stream": { 358 | "version": "1.4.1", 359 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 360 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 361 | "dev": true, 362 | "dependencies": { 363 | "once": "^1.4.0" 364 | } 365 | }, 366 | "node_modules/es-abstract": { 367 | "version": "1.13.0", 368 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", 369 | "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", 370 | "dev": true, 371 | "dependencies": { 372 | "es-to-primitive": "^1.2.0", 373 | "function-bind": "^1.1.1", 374 | "has": "^1.0.3", 375 | "is-callable": "^1.1.4", 376 | "is-regex": "^1.0.4", 377 | "object-keys": "^1.0.12" 378 | }, 379 | "engines": { 380 | "node": ">= 0.4" 381 | } 382 | }, 383 | "node_modules/es-to-primitive": { 384 | "version": "1.2.0", 385 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 386 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 387 | "dev": true, 388 | "dependencies": { 389 | "is-callable": "^1.1.4", 390 | "is-date-object": "^1.0.1", 391 | "is-symbol": "^1.0.2" 392 | }, 393 | "engines": { 394 | "node": ">= 0.4" 395 | } 396 | }, 397 | "node_modules/escape-string-regexp": { 398 | "version": "1.0.2", 399 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", 400 | "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", 401 | "dev": true, 402 | "engines": { 403 | "node": ">=0.8.0" 404 | } 405 | }, 406 | "node_modules/esprima": { 407 | "version": "4.0.0", 408 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 409 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 410 | "dev": true, 411 | "bin": { 412 | "esparse": "bin/esparse.js", 413 | "esvalidate": "bin/esvalidate.js" 414 | }, 415 | "engines": { 416 | "node": ">=4" 417 | } 418 | }, 419 | "node_modules/esutils": { 420 | "version": "2.0.2", 421 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 422 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 423 | "dev": true, 424 | "engines": { 425 | "node": ">=0.10.0" 426 | } 427 | }, 428 | "node_modules/execa": { 429 | "version": "1.0.0", 430 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 431 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 432 | "dev": true, 433 | "dependencies": { 434 | "cross-spawn": "^6.0.0", 435 | "get-stream": "^4.0.0", 436 | "is-stream": "^1.1.0", 437 | "npm-run-path": "^2.0.0", 438 | "p-finally": "^1.0.0", 439 | "signal-exit": "^3.0.0", 440 | "strip-eof": "^1.0.0" 441 | }, 442 | "engines": { 443 | "node": ">=6" 444 | } 445 | }, 446 | "node_modules/fill-range": { 447 | "version": "7.0.1", 448 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 449 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 450 | "dependencies": { 451 | "to-regex-range": "^5.0.1" 452 | }, 453 | "engines": { 454 | "node": ">=8" 455 | } 456 | }, 457 | "node_modules/find-up": { 458 | "version": "3.0.0", 459 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 460 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 461 | "dev": true, 462 | "dependencies": { 463 | "locate-path": "^3.0.0" 464 | }, 465 | "engines": { 466 | "node": ">=6" 467 | } 468 | }, 469 | "node_modules/flat": { 470 | "version": "4.1.0", 471 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", 472 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", 473 | "deprecated": "Fixed a prototype pollution security issue in 4.1.0, please upgrade to ^4.1.1 or ^5.0.1.", 474 | "dev": true, 475 | "dependencies": { 476 | "is-buffer": "~2.0.3" 477 | }, 478 | "bin": { 479 | "flat": "cli.js" 480 | } 481 | }, 482 | "node_modules/fs.realpath": { 483 | "version": "1.0.0", 484 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 485 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 486 | "dev": true 487 | }, 488 | "node_modules/function-bind": { 489 | "version": "1.1.1", 490 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 491 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 492 | "dev": true 493 | }, 494 | "node_modules/get-caller-file": { 495 | "version": "2.0.5", 496 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 497 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 498 | "dev": true, 499 | "engines": { 500 | "node": "6.* || 8.* || >= 10.*" 501 | } 502 | }, 503 | "node_modules/get-stream": { 504 | "version": "4.1.0", 505 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 506 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 507 | "dev": true, 508 | "dependencies": { 509 | "pump": "^3.0.0" 510 | }, 511 | "engines": { 512 | "node": ">=6" 513 | } 514 | }, 515 | "node_modules/glob": { 516 | "version": "7.1.3", 517 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 518 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 519 | "dev": true, 520 | "dependencies": { 521 | "fs.realpath": "^1.0.0", 522 | "inflight": "^1.0.4", 523 | "inherits": "2", 524 | "minimatch": "^3.0.4", 525 | "once": "^1.3.0", 526 | "path-is-absolute": "^1.0.0" 527 | }, 528 | "engines": { 529 | "node": "*" 530 | } 531 | }, 532 | "node_modules/growl": { 533 | "version": "1.10.5", 534 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 535 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 536 | "dev": true, 537 | "engines": { 538 | "node": ">=4.x" 539 | } 540 | }, 541 | "node_modules/has": { 542 | "version": "1.0.3", 543 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 544 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 545 | "dev": true, 546 | "dependencies": { 547 | "function-bind": "^1.1.1" 548 | }, 549 | "engines": { 550 | "node": ">= 0.4.0" 551 | } 552 | }, 553 | "node_modules/has-ansi": { 554 | "version": "2.0.0", 555 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 556 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 557 | "dev": true, 558 | "dependencies": { 559 | "ansi-regex": "^2.0.0" 560 | }, 561 | "engines": { 562 | "node": ">=0.10.0" 563 | } 564 | }, 565 | "node_modules/has-flag": { 566 | "version": "3.0.0", 567 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 568 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 569 | "dev": true, 570 | "engines": { 571 | "node": ">=4" 572 | } 573 | }, 574 | "node_modules/has-symbols": { 575 | "version": "1.0.0", 576 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 577 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", 578 | "dev": true, 579 | "engines": { 580 | "node": ">= 0.4" 581 | } 582 | }, 583 | "node_modules/inflight": { 584 | "version": "1.0.6", 585 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 586 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 587 | "dev": true, 588 | "dependencies": { 589 | "once": "^1.3.0", 590 | "wrappy": "1" 591 | } 592 | }, 593 | "node_modules/inherits": { 594 | "version": "2.0.3", 595 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 596 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 597 | "dev": true 598 | }, 599 | "node_modules/invert-kv": { 600 | "version": "2.0.0", 601 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", 602 | "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", 603 | "dev": true, 604 | "engines": { 605 | "node": ">=4" 606 | } 607 | }, 608 | "node_modules/is-buffer": { 609 | "version": "2.0.3", 610 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", 611 | "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", 612 | "dev": true, 613 | "engines": { 614 | "node": ">=4" 615 | } 616 | }, 617 | "node_modules/is-callable": { 618 | "version": "1.1.4", 619 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 620 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", 621 | "dev": true, 622 | "engines": { 623 | "node": ">= 0.4" 624 | } 625 | }, 626 | "node_modules/is-date-object": { 627 | "version": "1.0.1", 628 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 629 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 630 | "dev": true, 631 | "engines": { 632 | "node": ">= 0.4" 633 | } 634 | }, 635 | "node_modules/is-fullwidth-code-point": { 636 | "version": "2.0.0", 637 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 638 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 639 | "dev": true, 640 | "engines": { 641 | "node": ">=4" 642 | } 643 | }, 644 | "node_modules/is-number": { 645 | "version": "7.0.0", 646 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 647 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 648 | "engines": { 649 | "node": ">=0.12.0" 650 | } 651 | }, 652 | "node_modules/is-regex": { 653 | "version": "1.0.4", 654 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 655 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 656 | "dev": true, 657 | "dependencies": { 658 | "has": "^1.0.1" 659 | }, 660 | "engines": { 661 | "node": ">= 0.4" 662 | } 663 | }, 664 | "node_modules/is-stream": { 665 | "version": "1.1.0", 666 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 667 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 668 | "dev": true, 669 | "engines": { 670 | "node": ">=0.10.0" 671 | } 672 | }, 673 | "node_modules/is-symbol": { 674 | "version": "1.0.2", 675 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 676 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 677 | "dev": true, 678 | "dependencies": { 679 | "has-symbols": "^1.0.0" 680 | }, 681 | "engines": { 682 | "node": ">= 0.4" 683 | } 684 | }, 685 | "node_modules/isexe": { 686 | "version": "2.0.0", 687 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 688 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 689 | "dev": true 690 | }, 691 | "node_modules/js-tokens": { 692 | "version": "3.0.2", 693 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 694 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 695 | "dev": true 696 | }, 697 | "node_modules/js-yaml": { 698 | "version": "3.13.1", 699 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 700 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 701 | "dev": true, 702 | "dependencies": { 703 | "argparse": "^1.0.7", 704 | "esprima": "^4.0.0" 705 | }, 706 | "bin": { 707 | "js-yaml": "bin/js-yaml.js" 708 | } 709 | }, 710 | "node_modules/lcid": { 711 | "version": "2.0.0", 712 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", 713 | "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", 714 | "dev": true, 715 | "dependencies": { 716 | "invert-kv": "^2.0.0" 717 | }, 718 | "engines": { 719 | "node": ">=6" 720 | } 721 | }, 722 | "node_modules/locate-path": { 723 | "version": "3.0.0", 724 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 725 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 726 | "dev": true, 727 | "dependencies": { 728 | "p-locate": "^3.0.0", 729 | "path-exists": "^3.0.0" 730 | }, 731 | "engines": { 732 | "node": ">=6" 733 | } 734 | }, 735 | "node_modules/lodash": { 736 | "version": "4.17.21", 737 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 738 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 739 | "dev": true 740 | }, 741 | "node_modules/log-symbols": { 742 | "version": "2.2.0", 743 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", 744 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", 745 | "dev": true, 746 | "dependencies": { 747 | "chalk": "^2.0.1" 748 | }, 749 | "engines": { 750 | "node": ">=4" 751 | } 752 | }, 753 | "node_modules/map-age-cleaner": { 754 | "version": "0.1.3", 755 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 756 | "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 757 | "dev": true, 758 | "dependencies": { 759 | "p-defer": "^1.0.0" 760 | }, 761 | "engines": { 762 | "node": ">=6" 763 | } 764 | }, 765 | "node_modules/mem": { 766 | "version": "4.3.0", 767 | "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", 768 | "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", 769 | "dev": true, 770 | "dependencies": { 771 | "map-age-cleaner": "^0.1.1", 772 | "mimic-fn": "^2.0.0", 773 | "p-is-promise": "^2.0.0" 774 | }, 775 | "engines": { 776 | "node": ">=6" 777 | } 778 | }, 779 | "node_modules/micromatch": { 780 | "version": "4.0.2", 781 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 782 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 783 | "dependencies": { 784 | "braces": "^3.0.1", 785 | "picomatch": "^2.0.5" 786 | }, 787 | "engines": { 788 | "node": ">=8" 789 | } 790 | }, 791 | "node_modules/mimic-fn": { 792 | "version": "2.1.0", 793 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 794 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 795 | "dev": true, 796 | "engines": { 797 | "node": ">=6" 798 | } 799 | }, 800 | "node_modules/minimatch": { 801 | "version": "3.0.4", 802 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 803 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 804 | "dev": true, 805 | "dependencies": { 806 | "brace-expansion": "^1.1.7" 807 | }, 808 | "engines": { 809 | "node": "*" 810 | } 811 | }, 812 | "node_modules/minimist": { 813 | "version": "0.0.8", 814 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 815 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 816 | "dev": true 817 | }, 818 | "node_modules/mkdirp": { 819 | "version": "0.5.1", 820 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 821 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 822 | "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", 823 | "dev": true, 824 | "dependencies": { 825 | "minimist": "0.0.8" 826 | }, 827 | "bin": { 828 | "mkdirp": "bin/cmd.js" 829 | } 830 | }, 831 | "node_modules/mocha": { 832 | "version": "6.1.4", 833 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", 834 | "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", 835 | "dev": true, 836 | "dependencies": { 837 | "ansi-colors": "3.2.3", 838 | "browser-stdout": "1.3.1", 839 | "debug": "3.2.6", 840 | "diff": "3.5.0", 841 | "escape-string-regexp": "1.0.5", 842 | "find-up": "3.0.0", 843 | "glob": "7.1.3", 844 | "growl": "1.10.5", 845 | "he": "1.2.0", 846 | "js-yaml": "3.13.1", 847 | "log-symbols": "2.2.0", 848 | "minimatch": "3.0.4", 849 | "mkdirp": "0.5.1", 850 | "ms": "2.1.1", 851 | "node-environment-flags": "1.0.5", 852 | "object.assign": "4.1.0", 853 | "strip-json-comments": "2.0.1", 854 | "supports-color": "6.0.0", 855 | "which": "1.3.1", 856 | "wide-align": "1.1.3", 857 | "yargs": "13.2.2", 858 | "yargs-parser": "13.0.0", 859 | "yargs-unparser": "1.5.0" 860 | }, 861 | "bin": { 862 | "_mocha": "bin/_mocha", 863 | "mocha": "bin/mocha" 864 | }, 865 | "engines": { 866 | "node": ">= 6.0.0" 867 | } 868 | }, 869 | "node_modules/mocha/node_modules/browser-stdout": { 870 | "version": "1.3.1", 871 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 872 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 873 | "dev": true 874 | }, 875 | "node_modules/mocha/node_modules/escape-string-regexp": { 876 | "version": "1.0.5", 877 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 878 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 879 | "dev": true, 880 | "engines": { 881 | "node": ">=0.8.0" 882 | } 883 | }, 884 | "node_modules/mocha/node_modules/he": { 885 | "version": "1.2.0", 886 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 887 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 888 | "dev": true, 889 | "bin": { 890 | "he": "bin/he" 891 | } 892 | }, 893 | "node_modules/ms": { 894 | "version": "2.1.1", 895 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 896 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 897 | "dev": true 898 | }, 899 | "node_modules/nice-try": { 900 | "version": "1.0.5", 901 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 902 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 903 | "dev": true 904 | }, 905 | "node_modules/node-environment-flags": { 906 | "version": "1.0.5", 907 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", 908 | "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", 909 | "dev": true, 910 | "dependencies": { 911 | "object.getownpropertydescriptors": "^2.0.3", 912 | "semver": "^5.7.0" 913 | } 914 | }, 915 | "node_modules/node-environment-flags/node_modules/semver": { 916 | "version": "5.7.0", 917 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 918 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", 919 | "dev": true, 920 | "bin": { 921 | "semver": "bin/semver" 922 | } 923 | }, 924 | "node_modules/npm-run-path": { 925 | "version": "2.0.2", 926 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 927 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 928 | "dev": true, 929 | "dependencies": { 930 | "path-key": "^2.0.0" 931 | }, 932 | "engines": { 933 | "node": ">=4" 934 | } 935 | }, 936 | "node_modules/number-is-nan": { 937 | "version": "1.0.1", 938 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 939 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 940 | "dev": true, 941 | "engines": { 942 | "node": ">=0.10.0" 943 | } 944 | }, 945 | "node_modules/object-keys": { 946 | "version": "1.1.1", 947 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 948 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 949 | "dev": true, 950 | "engines": { 951 | "node": ">= 0.4" 952 | } 953 | }, 954 | "node_modules/object.assign": { 955 | "version": "4.1.0", 956 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 957 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 958 | "dev": true, 959 | "dependencies": { 960 | "define-properties": "^1.1.2", 961 | "function-bind": "^1.1.1", 962 | "has-symbols": "^1.0.0", 963 | "object-keys": "^1.0.11" 964 | }, 965 | "engines": { 966 | "node": ">= 0.4" 967 | } 968 | }, 969 | "node_modules/object.getownpropertydescriptors": { 970 | "version": "2.0.3", 971 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 972 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 973 | "dev": true, 974 | "dependencies": { 975 | "define-properties": "^1.1.2", 976 | "es-abstract": "^1.5.1" 977 | }, 978 | "engines": { 979 | "node": ">= 0.8" 980 | } 981 | }, 982 | "node_modules/once": { 983 | "version": "1.4.0", 984 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 985 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 986 | "dev": true, 987 | "dependencies": { 988 | "wrappy": "1" 989 | } 990 | }, 991 | "node_modules/os-locale": { 992 | "version": "3.1.0", 993 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", 994 | "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", 995 | "dev": true, 996 | "dependencies": { 997 | "execa": "^1.0.0", 998 | "lcid": "^2.0.0", 999 | "mem": "^4.0.0" 1000 | }, 1001 | "engines": { 1002 | "node": ">=6" 1003 | } 1004 | }, 1005 | "node_modules/p-defer": { 1006 | "version": "1.0.0", 1007 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 1008 | "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", 1009 | "dev": true, 1010 | "engines": { 1011 | "node": ">=4" 1012 | } 1013 | }, 1014 | "node_modules/p-finally": { 1015 | "version": "1.0.0", 1016 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1017 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1018 | "dev": true, 1019 | "engines": { 1020 | "node": ">=4" 1021 | } 1022 | }, 1023 | "node_modules/p-is-promise": { 1024 | "version": "2.1.0", 1025 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", 1026 | "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", 1027 | "dev": true, 1028 | "engines": { 1029 | "node": ">=6" 1030 | } 1031 | }, 1032 | "node_modules/p-limit": { 1033 | "version": "2.2.0", 1034 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", 1035 | "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", 1036 | "dev": true, 1037 | "dependencies": { 1038 | "p-try": "^2.0.0" 1039 | }, 1040 | "engines": { 1041 | "node": ">=6" 1042 | } 1043 | }, 1044 | "node_modules/p-locate": { 1045 | "version": "3.0.0", 1046 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1047 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1048 | "dev": true, 1049 | "dependencies": { 1050 | "p-limit": "^2.0.0" 1051 | }, 1052 | "engines": { 1053 | "node": ">=6" 1054 | } 1055 | }, 1056 | "node_modules/p-try": { 1057 | "version": "2.2.0", 1058 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1059 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1060 | "dev": true, 1061 | "engines": { 1062 | "node": ">=6" 1063 | } 1064 | }, 1065 | "node_modules/path-exists": { 1066 | "version": "3.0.0", 1067 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1068 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1069 | "dev": true, 1070 | "engines": { 1071 | "node": ">=4" 1072 | } 1073 | }, 1074 | "node_modules/path-is-absolute": { 1075 | "version": "1.0.1", 1076 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1077 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1078 | "dev": true, 1079 | "engines": { 1080 | "node": ">=0.10.0" 1081 | } 1082 | }, 1083 | "node_modules/path-key": { 1084 | "version": "2.0.1", 1085 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1086 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1087 | "dev": true, 1088 | "engines": { 1089 | "node": ">=4" 1090 | } 1091 | }, 1092 | "node_modules/path-parse": { 1093 | "version": "1.0.5", 1094 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 1095 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", 1096 | "dev": true 1097 | }, 1098 | "node_modules/picomatch": { 1099 | "version": "2.0.7", 1100 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", 1101 | "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", 1102 | "engines": { 1103 | "node": ">=8" 1104 | } 1105 | }, 1106 | "node_modules/pump": { 1107 | "version": "3.0.0", 1108 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1109 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1110 | "dev": true, 1111 | "dependencies": { 1112 | "end-of-stream": "^1.1.0", 1113 | "once": "^1.3.1" 1114 | } 1115 | }, 1116 | "node_modules/require-directory": { 1117 | "version": "2.1.1", 1118 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1119 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1120 | "dev": true, 1121 | "engines": { 1122 | "node": ">=0.10.0" 1123 | } 1124 | }, 1125 | "node_modules/require-main-filename": { 1126 | "version": "2.0.0", 1127 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1128 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 1129 | "dev": true 1130 | }, 1131 | "node_modules/resolve": { 1132 | "version": "1.5.0", 1133 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", 1134 | "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", 1135 | "dev": true, 1136 | "dependencies": { 1137 | "path-parse": "^1.0.5" 1138 | } 1139 | }, 1140 | "node_modules/semver": { 1141 | "version": "5.5.0", 1142 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 1143 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", 1144 | "dev": true, 1145 | "bin": { 1146 | "semver": "bin/semver" 1147 | } 1148 | }, 1149 | "node_modules/set-blocking": { 1150 | "version": "2.0.0", 1151 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1152 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1153 | "dev": true 1154 | }, 1155 | "node_modules/shebang-command": { 1156 | "version": "1.2.0", 1157 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1158 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1159 | "dev": true, 1160 | "dependencies": { 1161 | "shebang-regex": "^1.0.0" 1162 | }, 1163 | "engines": { 1164 | "node": ">=0.10.0" 1165 | } 1166 | }, 1167 | "node_modules/shebang-regex": { 1168 | "version": "1.0.0", 1169 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1170 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1171 | "dev": true, 1172 | "engines": { 1173 | "node": ">=0.10.0" 1174 | } 1175 | }, 1176 | "node_modules/signal-exit": { 1177 | "version": "3.0.2", 1178 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1179 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1180 | "dev": true 1181 | }, 1182 | "node_modules/sprintf-js": { 1183 | "version": "1.0.3", 1184 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1185 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1186 | "dev": true 1187 | }, 1188 | "node_modules/string-width": { 1189 | "version": "2.1.1", 1190 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1191 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1192 | "dev": true, 1193 | "dependencies": { 1194 | "is-fullwidth-code-point": "^2.0.0", 1195 | "strip-ansi": "^4.0.0" 1196 | }, 1197 | "engines": { 1198 | "node": ">=4" 1199 | } 1200 | }, 1201 | "node_modules/string-width/node_modules/ansi-regex": { 1202 | "version": "3.0.0", 1203 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1204 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1205 | "dev": true, 1206 | "engines": { 1207 | "node": ">=4" 1208 | } 1209 | }, 1210 | "node_modules/string-width/node_modules/strip-ansi": { 1211 | "version": "4.0.0", 1212 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1213 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1214 | "dev": true, 1215 | "dependencies": { 1216 | "ansi-regex": "^3.0.0" 1217 | }, 1218 | "engines": { 1219 | "node": ">=4" 1220 | } 1221 | }, 1222 | "node_modules/strip-ansi": { 1223 | "version": "3.0.1", 1224 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1225 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1226 | "dev": true, 1227 | "dependencies": { 1228 | "ansi-regex": "^2.0.0" 1229 | }, 1230 | "engines": { 1231 | "node": ">=0.10.0" 1232 | } 1233 | }, 1234 | "node_modules/strip-eof": { 1235 | "version": "1.0.0", 1236 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 1237 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 1238 | "dev": true, 1239 | "engines": { 1240 | "node": ">=0.10.0" 1241 | } 1242 | }, 1243 | "node_modules/strip-json-comments": { 1244 | "version": "2.0.1", 1245 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1246 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1247 | "dev": true, 1248 | "engines": { 1249 | "node": ">=0.10.0" 1250 | } 1251 | }, 1252 | "node_modules/supports-color": { 1253 | "version": "6.0.0", 1254 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", 1255 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", 1256 | "dev": true, 1257 | "dependencies": { 1258 | "has-flag": "^3.0.0" 1259 | }, 1260 | "engines": { 1261 | "node": ">=6" 1262 | } 1263 | }, 1264 | "node_modules/to-regex-range": { 1265 | "version": "5.0.1", 1266 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1267 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1268 | "dependencies": { 1269 | "is-number": "^7.0.0" 1270 | }, 1271 | "engines": { 1272 | "node": ">=8.0" 1273 | } 1274 | }, 1275 | "node_modules/tree-kill": { 1276 | "version": "1.2.2", 1277 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 1278 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 1279 | "bin": { 1280 | "tree-kill": "cli.js" 1281 | } 1282 | }, 1283 | "node_modules/tslib": { 1284 | "version": "1.9.0", 1285 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", 1286 | "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", 1287 | "dev": true 1288 | }, 1289 | "node_modules/tslint": { 1290 | "version": "5.9.1", 1291 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", 1292 | "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", 1293 | "dev": true, 1294 | "dependencies": { 1295 | "babel-code-frame": "^6.22.0", 1296 | "builtin-modules": "^1.1.1", 1297 | "chalk": "^2.3.0", 1298 | "commander": "^2.12.1", 1299 | "diff": "^3.2.0", 1300 | "glob": "^7.1.1", 1301 | "js-yaml": "^3.7.0", 1302 | "minimatch": "^3.0.4", 1303 | "resolve": "^1.3.2", 1304 | "semver": "^5.3.0", 1305 | "tslib": "^1.8.0", 1306 | "tsutils": "^2.12.1" 1307 | }, 1308 | "bin": { 1309 | "tslint": "bin/tslint" 1310 | }, 1311 | "engines": { 1312 | "node": ">=4.8.0" 1313 | }, 1314 | "peerDependencies": { 1315 | "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev" 1316 | } 1317 | }, 1318 | "node_modules/tslint/node_modules/commander": { 1319 | "version": "2.14.1", 1320 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", 1321 | "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", 1322 | "dev": true 1323 | }, 1324 | "node_modules/tslint/node_modules/diff": { 1325 | "version": "3.4.0", 1326 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", 1327 | "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", 1328 | "dev": true, 1329 | "engines": { 1330 | "node": ">=0.3.1" 1331 | } 1332 | }, 1333 | "node_modules/tslint/node_modules/glob": { 1334 | "version": "7.1.2", 1335 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1336 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1337 | "dev": true, 1338 | "dependencies": { 1339 | "fs.realpath": "^1.0.0", 1340 | "inflight": "^1.0.4", 1341 | "inherits": "2", 1342 | "minimatch": "^3.0.4", 1343 | "once": "^1.3.0", 1344 | "path-is-absolute": "^1.0.0" 1345 | }, 1346 | "engines": { 1347 | "node": "*" 1348 | } 1349 | }, 1350 | "node_modules/tslint/node_modules/minimatch": { 1351 | "version": "3.0.4", 1352 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1353 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1354 | "dev": true, 1355 | "dependencies": { 1356 | "brace-expansion": "^1.1.7" 1357 | }, 1358 | "engines": { 1359 | "node": "*" 1360 | } 1361 | }, 1362 | "node_modules/tsutils": { 1363 | "version": "2.21.2", 1364 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.21.2.tgz", 1365 | "integrity": "sha512-iaIuyjIUeFLdD39MYdzqBuY7Zv6+uGxSwRH4mf+HuzsnznjFz0R2tGrAe0/JvtNh91WrN8UN/DZRFTZNDuVekA==", 1366 | "dev": true, 1367 | "dependencies": { 1368 | "tslib": "^1.8.1" 1369 | }, 1370 | "peerDependencies": { 1371 | "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev" 1372 | } 1373 | }, 1374 | "node_modules/typescript": { 1375 | "version": "3.8.3", 1376 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", 1377 | "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", 1378 | "dev": true, 1379 | "bin": { 1380 | "tsc": "bin/tsc", 1381 | "tsserver": "bin/tsserver" 1382 | }, 1383 | "engines": { 1384 | "node": ">=4.2.0" 1385 | } 1386 | }, 1387 | "node_modules/which": { 1388 | "version": "1.3.1", 1389 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1390 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1391 | "dev": true, 1392 | "dependencies": { 1393 | "isexe": "^2.0.0" 1394 | }, 1395 | "bin": { 1396 | "which": "bin/which" 1397 | } 1398 | }, 1399 | "node_modules/which-module": { 1400 | "version": "2.0.0", 1401 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1402 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 1403 | "dev": true 1404 | }, 1405 | "node_modules/wide-align": { 1406 | "version": "1.1.3", 1407 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1408 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1409 | "dev": true, 1410 | "dependencies": { 1411 | "string-width": "^1.0.2 || 2" 1412 | } 1413 | }, 1414 | "node_modules/wrap-ansi": { 1415 | "version": "2.1.0", 1416 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 1417 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 1418 | "dev": true, 1419 | "dependencies": { 1420 | "string-width": "^1.0.1", 1421 | "strip-ansi": "^3.0.1" 1422 | }, 1423 | "engines": { 1424 | "node": ">=0.10.0" 1425 | } 1426 | }, 1427 | "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { 1428 | "version": "1.0.0", 1429 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1430 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1431 | "dev": true, 1432 | "dependencies": { 1433 | "number-is-nan": "^1.0.0" 1434 | }, 1435 | "engines": { 1436 | "node": ">=0.10.0" 1437 | } 1438 | }, 1439 | "node_modules/wrap-ansi/node_modules/string-width": { 1440 | "version": "1.0.2", 1441 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1442 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1443 | "dev": true, 1444 | "dependencies": { 1445 | "code-point-at": "^1.0.0", 1446 | "is-fullwidth-code-point": "^1.0.0", 1447 | "strip-ansi": "^3.0.0" 1448 | }, 1449 | "engines": { 1450 | "node": ">=0.10.0" 1451 | } 1452 | }, 1453 | "node_modules/wrappy": { 1454 | "version": "1.0.2", 1455 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1456 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1457 | "dev": true 1458 | }, 1459 | "node_modules/y18n": { 1460 | "version": "4.0.1", 1461 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", 1462 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", 1463 | "dev": true 1464 | }, 1465 | "node_modules/yargs": { 1466 | "version": "13.2.2", 1467 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", 1468 | "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", 1469 | "dev": true, 1470 | "dependencies": { 1471 | "cliui": "^4.0.0", 1472 | "find-up": "^3.0.0", 1473 | "get-caller-file": "^2.0.1", 1474 | "os-locale": "^3.1.0", 1475 | "require-directory": "^2.1.1", 1476 | "require-main-filename": "^2.0.0", 1477 | "set-blocking": "^2.0.0", 1478 | "string-width": "^3.0.0", 1479 | "which-module": "^2.0.0", 1480 | "y18n": "^4.0.0", 1481 | "yargs-parser": "^13.0.0" 1482 | } 1483 | }, 1484 | "node_modules/yargs-parser": { 1485 | "version": "13.0.0", 1486 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", 1487 | "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", 1488 | "dev": true, 1489 | "dependencies": { 1490 | "camelcase": "^5.0.0", 1491 | "decamelize": "^1.2.0" 1492 | } 1493 | }, 1494 | "node_modules/yargs-unparser": { 1495 | "version": "1.5.0", 1496 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", 1497 | "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", 1498 | "dev": true, 1499 | "dependencies": { 1500 | "flat": "^4.1.0", 1501 | "lodash": "^4.17.11", 1502 | "yargs": "^12.0.5" 1503 | }, 1504 | "engines": { 1505 | "node": ">=6" 1506 | } 1507 | }, 1508 | "node_modules/yargs-unparser/node_modules/get-caller-file": { 1509 | "version": "1.0.3", 1510 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", 1511 | "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", 1512 | "dev": true 1513 | }, 1514 | "node_modules/yargs-unparser/node_modules/require-main-filename": { 1515 | "version": "1.0.1", 1516 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", 1517 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", 1518 | "dev": true 1519 | }, 1520 | "node_modules/yargs-unparser/node_modules/yargs": { 1521 | "version": "12.0.5", 1522 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", 1523 | "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", 1524 | "dev": true, 1525 | "dependencies": { 1526 | "cliui": "^4.0.0", 1527 | "decamelize": "^1.2.0", 1528 | "find-up": "^3.0.0", 1529 | "get-caller-file": "^1.0.1", 1530 | "os-locale": "^3.0.0", 1531 | "require-directory": "^2.1.1", 1532 | "require-main-filename": "^1.0.1", 1533 | "set-blocking": "^2.0.0", 1534 | "string-width": "^2.0.0", 1535 | "which-module": "^2.0.0", 1536 | "y18n": "^3.2.1 || ^4.0.0", 1537 | "yargs-parser": "^11.1.1" 1538 | } 1539 | }, 1540 | "node_modules/yargs-unparser/node_modules/yargs-parser": { 1541 | "version": "11.1.1", 1542 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", 1543 | "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", 1544 | "dev": true, 1545 | "dependencies": { 1546 | "camelcase": "^5.0.0", 1547 | "decamelize": "^1.2.0" 1548 | } 1549 | }, 1550 | "node_modules/yargs/node_modules/ansi-regex": { 1551 | "version": "4.1.0", 1552 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1553 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1554 | "dev": true, 1555 | "engines": { 1556 | "node": ">=6" 1557 | } 1558 | }, 1559 | "node_modules/yargs/node_modules/string-width": { 1560 | "version": "3.1.0", 1561 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1562 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1563 | "dev": true, 1564 | "dependencies": { 1565 | "emoji-regex": "^7.0.1", 1566 | "is-fullwidth-code-point": "^2.0.0", 1567 | "strip-ansi": "^5.1.0" 1568 | }, 1569 | "engines": { 1570 | "node": ">=6" 1571 | } 1572 | }, 1573 | "node_modules/yargs/node_modules/strip-ansi": { 1574 | "version": "5.2.0", 1575 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1576 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1577 | "dev": true, 1578 | "dependencies": { 1579 | "ansi-regex": "^4.1.0" 1580 | }, 1581 | "engines": { 1582 | "node": ">=6" 1583 | } 1584 | }, 1585 | "node_modules/zone.js": { 1586 | "version": "0.7.6", 1587 | "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz", 1588 | "integrity": "sha1-+7w50+AmHQmG8boGMG6zrrDSIAk=" 1589 | } 1590 | }, 1591 | "dependencies": { 1592 | "@types/braces": { 1593 | "version": "2.3.0", 1594 | "resolved": "https://registry.npmjs.org/@types/braces/-/braces-2.3.0.tgz", 1595 | "integrity": "sha512-A3MV5EsLHgShHoJ/XES/fQAnwNISKLrFuH9eNBZY5OkTQB7JPIwbRoExvRpDsNABvkMojnKqKWS8x0m2rLYi+A==", 1596 | "dev": true 1597 | }, 1598 | "@types/micromatch": { 1599 | "version": "3.1.0", 1600 | "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-3.1.0.tgz", 1601 | "integrity": "sha512-06uA9V7v68RTOzA3ky1Oi0HmCPa+YJ050vM+sTECwkxnHUQnO17TAcNCGX400QT6bldUiPb7ux5oKy0j8ccEDw==", 1602 | "dev": true, 1603 | "requires": { 1604 | "@types/braces": "*" 1605 | } 1606 | }, 1607 | "@types/mocha": { 1608 | "version": "2.2.48", 1609 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 1610 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 1611 | "dev": true 1612 | }, 1613 | "@types/node": { 1614 | "version": "6.0.101", 1615 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz", 1616 | "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==", 1617 | "dev": true 1618 | }, 1619 | "@types/vscode": { 1620 | "version": "1.56.0", 1621 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", 1622 | "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", 1623 | "dev": true 1624 | }, 1625 | "ansi-colors": { 1626 | "version": "3.2.3", 1627 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", 1628 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", 1629 | "dev": true 1630 | }, 1631 | "ansi-regex": { 1632 | "version": "2.1.1", 1633 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1634 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 1635 | "dev": true 1636 | }, 1637 | "ansi-styles": { 1638 | "version": "2.2.1", 1639 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 1640 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 1641 | "dev": true 1642 | }, 1643 | "applicationinsights": { 1644 | "version": "0.19.0", 1645 | "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-0.19.0.tgz", 1646 | "integrity": "sha1-izrz1N8FQpwSfNZEMcuB5AYJfYM=", 1647 | "requires": { 1648 | "zone.js": "0.7.6" 1649 | } 1650 | }, 1651 | "argparse": { 1652 | "version": "1.0.10", 1653 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 1654 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 1655 | "dev": true, 1656 | "requires": { 1657 | "sprintf-js": "~1.0.2" 1658 | } 1659 | }, 1660 | "babel-code-frame": { 1661 | "version": "6.26.0", 1662 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 1663 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 1664 | "dev": true, 1665 | "requires": { 1666 | "chalk": "^1.1.3", 1667 | "esutils": "^2.0.2", 1668 | "js-tokens": "^3.0.2" 1669 | }, 1670 | "dependencies": { 1671 | "chalk": { 1672 | "version": "1.1.3", 1673 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1674 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1675 | "dev": true, 1676 | "requires": { 1677 | "ansi-styles": "^2.2.1", 1678 | "escape-string-regexp": "^1.0.2", 1679 | "has-ansi": "^2.0.0", 1680 | "strip-ansi": "^3.0.0", 1681 | "supports-color": "^2.0.0" 1682 | } 1683 | }, 1684 | "supports-color": { 1685 | "version": "2.0.0", 1686 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1687 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1688 | "dev": true 1689 | } 1690 | } 1691 | }, 1692 | "balanced-match": { 1693 | "version": "1.0.0", 1694 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1695 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1696 | "dev": true 1697 | }, 1698 | "brace-expansion": { 1699 | "version": "1.1.11", 1700 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1701 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1702 | "dev": true, 1703 | "requires": { 1704 | "balanced-match": "^1.0.0", 1705 | "concat-map": "0.0.1" 1706 | } 1707 | }, 1708 | "braces": { 1709 | "version": "3.0.2", 1710 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1711 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1712 | "requires": { 1713 | "fill-range": "^7.0.1" 1714 | } 1715 | }, 1716 | "builtin-modules": { 1717 | "version": "1.1.1", 1718 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 1719 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 1720 | "dev": true 1721 | }, 1722 | "camelcase": { 1723 | "version": "5.3.1", 1724 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1725 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 1726 | "dev": true 1727 | }, 1728 | "chalk": { 1729 | "version": "2.3.1", 1730 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", 1731 | "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", 1732 | "dev": true, 1733 | "requires": { 1734 | "ansi-styles": "^3.2.0", 1735 | "escape-string-regexp": "^1.0.5", 1736 | "supports-color": "^5.2.0" 1737 | }, 1738 | "dependencies": { 1739 | "ansi-styles": { 1740 | "version": "3.2.0", 1741 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 1742 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 1743 | "dev": true, 1744 | "requires": { 1745 | "color-convert": "^1.9.0" 1746 | } 1747 | }, 1748 | "escape-string-regexp": { 1749 | "version": "1.0.5", 1750 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1751 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1752 | "dev": true 1753 | }, 1754 | "supports-color": { 1755 | "version": "5.2.0", 1756 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", 1757 | "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", 1758 | "dev": true, 1759 | "requires": { 1760 | "has-flag": "^3.0.0" 1761 | } 1762 | } 1763 | } 1764 | }, 1765 | "cliui": { 1766 | "version": "4.1.0", 1767 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", 1768 | "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", 1769 | "dev": true, 1770 | "requires": { 1771 | "string-width": "^2.1.1", 1772 | "strip-ansi": "^4.0.0", 1773 | "wrap-ansi": "^2.0.0" 1774 | }, 1775 | "dependencies": { 1776 | "ansi-regex": { 1777 | "version": "3.0.0", 1778 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1779 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1780 | "dev": true 1781 | }, 1782 | "strip-ansi": { 1783 | "version": "4.0.0", 1784 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1785 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1786 | "dev": true, 1787 | "requires": { 1788 | "ansi-regex": "^3.0.0" 1789 | } 1790 | } 1791 | } 1792 | }, 1793 | "code-point-at": { 1794 | "version": "1.1.0", 1795 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 1796 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 1797 | "dev": true 1798 | }, 1799 | "color-convert": { 1800 | "version": "1.9.1", 1801 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 1802 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 1803 | "dev": true, 1804 | "requires": { 1805 | "color-name": "^1.1.1" 1806 | } 1807 | }, 1808 | "color-name": { 1809 | "version": "1.1.3", 1810 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1811 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1812 | "dev": true 1813 | }, 1814 | "concat-map": { 1815 | "version": "0.0.1", 1816 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1817 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1818 | "dev": true 1819 | }, 1820 | "cross-spawn": { 1821 | "version": "6.0.5", 1822 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 1823 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 1824 | "dev": true, 1825 | "requires": { 1826 | "nice-try": "^1.0.4", 1827 | "path-key": "^2.0.1", 1828 | "semver": "^5.5.0", 1829 | "shebang-command": "^1.2.0", 1830 | "which": "^1.2.9" 1831 | } 1832 | }, 1833 | "debug": { 1834 | "version": "3.2.6", 1835 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 1836 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 1837 | "dev": true, 1838 | "requires": { 1839 | "ms": "^2.1.1" 1840 | } 1841 | }, 1842 | "decamelize": { 1843 | "version": "1.2.0", 1844 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1845 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 1846 | "dev": true 1847 | }, 1848 | "define-properties": { 1849 | "version": "1.1.3", 1850 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 1851 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 1852 | "dev": true, 1853 | "requires": { 1854 | "object-keys": "^1.0.12" 1855 | } 1856 | }, 1857 | "diff": { 1858 | "version": "3.5.0", 1859 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 1860 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 1861 | "dev": true 1862 | }, 1863 | "emoji-regex": { 1864 | "version": "7.0.3", 1865 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1866 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 1867 | "dev": true 1868 | }, 1869 | "end-of-stream": { 1870 | "version": "1.4.1", 1871 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", 1872 | "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", 1873 | "dev": true, 1874 | "requires": { 1875 | "once": "^1.4.0" 1876 | } 1877 | }, 1878 | "es-abstract": { 1879 | "version": "1.13.0", 1880 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", 1881 | "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", 1882 | "dev": true, 1883 | "requires": { 1884 | "es-to-primitive": "^1.2.0", 1885 | "function-bind": "^1.1.1", 1886 | "has": "^1.0.3", 1887 | "is-callable": "^1.1.4", 1888 | "is-regex": "^1.0.4", 1889 | "object-keys": "^1.0.12" 1890 | } 1891 | }, 1892 | "es-to-primitive": { 1893 | "version": "1.2.0", 1894 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", 1895 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", 1896 | "dev": true, 1897 | "requires": { 1898 | "is-callable": "^1.1.4", 1899 | "is-date-object": "^1.0.1", 1900 | "is-symbol": "^1.0.2" 1901 | } 1902 | }, 1903 | "escape-string-regexp": { 1904 | "version": "1.0.2", 1905 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", 1906 | "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", 1907 | "dev": true 1908 | }, 1909 | "esprima": { 1910 | "version": "4.0.0", 1911 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 1912 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 1913 | "dev": true 1914 | }, 1915 | "esutils": { 1916 | "version": "2.0.2", 1917 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 1918 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 1919 | "dev": true 1920 | }, 1921 | "execa": { 1922 | "version": "1.0.0", 1923 | "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", 1924 | "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", 1925 | "dev": true, 1926 | "requires": { 1927 | "cross-spawn": "^6.0.0", 1928 | "get-stream": "^4.0.0", 1929 | "is-stream": "^1.1.0", 1930 | "npm-run-path": "^2.0.0", 1931 | "p-finally": "^1.0.0", 1932 | "signal-exit": "^3.0.0", 1933 | "strip-eof": "^1.0.0" 1934 | } 1935 | }, 1936 | "fill-range": { 1937 | "version": "7.0.1", 1938 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1939 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1940 | "requires": { 1941 | "to-regex-range": "^5.0.1" 1942 | } 1943 | }, 1944 | "find-up": { 1945 | "version": "3.0.0", 1946 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 1947 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 1948 | "dev": true, 1949 | "requires": { 1950 | "locate-path": "^3.0.0" 1951 | } 1952 | }, 1953 | "flat": { 1954 | "version": "4.1.0", 1955 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", 1956 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", 1957 | "dev": true, 1958 | "requires": { 1959 | "is-buffer": "~2.0.3" 1960 | } 1961 | }, 1962 | "fs.realpath": { 1963 | "version": "1.0.0", 1964 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1965 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1966 | "dev": true 1967 | }, 1968 | "function-bind": { 1969 | "version": "1.1.1", 1970 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1971 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1972 | "dev": true 1973 | }, 1974 | "get-caller-file": { 1975 | "version": "2.0.5", 1976 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1977 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1978 | "dev": true 1979 | }, 1980 | "get-stream": { 1981 | "version": "4.1.0", 1982 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 1983 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1984 | "dev": true, 1985 | "requires": { 1986 | "pump": "^3.0.0" 1987 | } 1988 | }, 1989 | "glob": { 1990 | "version": "7.1.3", 1991 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 1992 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 1993 | "dev": true, 1994 | "requires": { 1995 | "fs.realpath": "^1.0.0", 1996 | "inflight": "^1.0.4", 1997 | "inherits": "2", 1998 | "minimatch": "^3.0.4", 1999 | "once": "^1.3.0", 2000 | "path-is-absolute": "^1.0.0" 2001 | } 2002 | }, 2003 | "growl": { 2004 | "version": "1.10.5", 2005 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 2006 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 2007 | "dev": true 2008 | }, 2009 | "has": { 2010 | "version": "1.0.3", 2011 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2012 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2013 | "dev": true, 2014 | "requires": { 2015 | "function-bind": "^1.1.1" 2016 | } 2017 | }, 2018 | "has-ansi": { 2019 | "version": "2.0.0", 2020 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 2021 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 2022 | "dev": true, 2023 | "requires": { 2024 | "ansi-regex": "^2.0.0" 2025 | } 2026 | }, 2027 | "has-flag": { 2028 | "version": "3.0.0", 2029 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2030 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 2031 | "dev": true 2032 | }, 2033 | "has-symbols": { 2034 | "version": "1.0.0", 2035 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", 2036 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", 2037 | "dev": true 2038 | }, 2039 | "inflight": { 2040 | "version": "1.0.6", 2041 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2042 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 2043 | "dev": true, 2044 | "requires": { 2045 | "once": "^1.3.0", 2046 | "wrappy": "1" 2047 | } 2048 | }, 2049 | "inherits": { 2050 | "version": "2.0.3", 2051 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 2052 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 2053 | "dev": true 2054 | }, 2055 | "invert-kv": { 2056 | "version": "2.0.0", 2057 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", 2058 | "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", 2059 | "dev": true 2060 | }, 2061 | "is-buffer": { 2062 | "version": "2.0.3", 2063 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", 2064 | "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", 2065 | "dev": true 2066 | }, 2067 | "is-callable": { 2068 | "version": "1.1.4", 2069 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", 2070 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", 2071 | "dev": true 2072 | }, 2073 | "is-date-object": { 2074 | "version": "1.0.1", 2075 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", 2076 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", 2077 | "dev": true 2078 | }, 2079 | "is-fullwidth-code-point": { 2080 | "version": "2.0.0", 2081 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2082 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2083 | "dev": true 2084 | }, 2085 | "is-number": { 2086 | "version": "7.0.0", 2087 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2088 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 2089 | }, 2090 | "is-regex": { 2091 | "version": "1.0.4", 2092 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 2093 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 2094 | "dev": true, 2095 | "requires": { 2096 | "has": "^1.0.1" 2097 | } 2098 | }, 2099 | "is-stream": { 2100 | "version": "1.1.0", 2101 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 2102 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 2103 | "dev": true 2104 | }, 2105 | "is-symbol": { 2106 | "version": "1.0.2", 2107 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", 2108 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", 2109 | "dev": true, 2110 | "requires": { 2111 | "has-symbols": "^1.0.0" 2112 | } 2113 | }, 2114 | "isexe": { 2115 | "version": "2.0.0", 2116 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2117 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2118 | "dev": true 2119 | }, 2120 | "js-tokens": { 2121 | "version": "3.0.2", 2122 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 2123 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 2124 | "dev": true 2125 | }, 2126 | "js-yaml": { 2127 | "version": "3.13.1", 2128 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 2129 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 2130 | "dev": true, 2131 | "requires": { 2132 | "argparse": "^1.0.7", 2133 | "esprima": "^4.0.0" 2134 | } 2135 | }, 2136 | "lcid": { 2137 | "version": "2.0.0", 2138 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", 2139 | "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", 2140 | "dev": true, 2141 | "requires": { 2142 | "invert-kv": "^2.0.0" 2143 | } 2144 | }, 2145 | "locate-path": { 2146 | "version": "3.0.0", 2147 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 2148 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 2149 | "dev": true, 2150 | "requires": { 2151 | "p-locate": "^3.0.0", 2152 | "path-exists": "^3.0.0" 2153 | } 2154 | }, 2155 | "lodash": { 2156 | "version": "4.17.21", 2157 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2158 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2159 | "dev": true 2160 | }, 2161 | "log-symbols": { 2162 | "version": "2.2.0", 2163 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", 2164 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", 2165 | "dev": true, 2166 | "requires": { 2167 | "chalk": "^2.0.1" 2168 | } 2169 | }, 2170 | "map-age-cleaner": { 2171 | "version": "0.1.3", 2172 | "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", 2173 | "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", 2174 | "dev": true, 2175 | "requires": { 2176 | "p-defer": "^1.0.0" 2177 | } 2178 | }, 2179 | "mem": { 2180 | "version": "4.3.0", 2181 | "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", 2182 | "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", 2183 | "dev": true, 2184 | "requires": { 2185 | "map-age-cleaner": "^0.1.1", 2186 | "mimic-fn": "^2.0.0", 2187 | "p-is-promise": "^2.0.0" 2188 | } 2189 | }, 2190 | "micromatch": { 2191 | "version": "4.0.2", 2192 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", 2193 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", 2194 | "requires": { 2195 | "braces": "^3.0.1", 2196 | "picomatch": "^2.0.5" 2197 | } 2198 | }, 2199 | "mimic-fn": { 2200 | "version": "2.1.0", 2201 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2202 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2203 | "dev": true 2204 | }, 2205 | "minimatch": { 2206 | "version": "3.0.4", 2207 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2208 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2209 | "dev": true, 2210 | "requires": { 2211 | "brace-expansion": "^1.1.7" 2212 | } 2213 | }, 2214 | "minimist": { 2215 | "version": "0.0.8", 2216 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2217 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2218 | "dev": true 2219 | }, 2220 | "mkdirp": { 2221 | "version": "0.5.1", 2222 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2223 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2224 | "dev": true, 2225 | "requires": { 2226 | "minimist": "0.0.8" 2227 | } 2228 | }, 2229 | "mocha": { 2230 | "version": "6.1.4", 2231 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", 2232 | "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", 2233 | "dev": true, 2234 | "requires": { 2235 | "ansi-colors": "3.2.3", 2236 | "browser-stdout": "1.3.1", 2237 | "debug": "3.2.6", 2238 | "diff": "3.5.0", 2239 | "escape-string-regexp": "1.0.5", 2240 | "find-up": "3.0.0", 2241 | "glob": "7.1.3", 2242 | "growl": "1.10.5", 2243 | "he": "1.2.0", 2244 | "js-yaml": "3.13.1", 2245 | "log-symbols": "2.2.0", 2246 | "minimatch": "3.0.4", 2247 | "mkdirp": "0.5.1", 2248 | "ms": "2.1.1", 2249 | "node-environment-flags": "1.0.5", 2250 | "object.assign": "4.1.0", 2251 | "strip-json-comments": "2.0.1", 2252 | "supports-color": "6.0.0", 2253 | "which": "1.3.1", 2254 | "wide-align": "1.1.3", 2255 | "yargs": "13.2.2", 2256 | "yargs-parser": "13.0.0", 2257 | "yargs-unparser": "1.5.0" 2258 | }, 2259 | "dependencies": { 2260 | "browser-stdout": { 2261 | "version": "1.3.1", 2262 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 2263 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 2264 | "dev": true 2265 | }, 2266 | "escape-string-regexp": { 2267 | "version": "1.0.5", 2268 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2269 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 2270 | "dev": true 2271 | }, 2272 | "he": { 2273 | "version": "1.2.0", 2274 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 2275 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 2276 | "dev": true 2277 | } 2278 | } 2279 | }, 2280 | "ms": { 2281 | "version": "2.1.1", 2282 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 2283 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 2284 | "dev": true 2285 | }, 2286 | "nice-try": { 2287 | "version": "1.0.5", 2288 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 2289 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 2290 | "dev": true 2291 | }, 2292 | "node-environment-flags": { 2293 | "version": "1.0.5", 2294 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", 2295 | "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", 2296 | "dev": true, 2297 | "requires": { 2298 | "object.getownpropertydescriptors": "^2.0.3", 2299 | "semver": "^5.7.0" 2300 | }, 2301 | "dependencies": { 2302 | "semver": { 2303 | "version": "5.7.0", 2304 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 2305 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", 2306 | "dev": true 2307 | } 2308 | } 2309 | }, 2310 | "npm-run-path": { 2311 | "version": "2.0.2", 2312 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 2313 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 2314 | "dev": true, 2315 | "requires": { 2316 | "path-key": "^2.0.0" 2317 | } 2318 | }, 2319 | "number-is-nan": { 2320 | "version": "1.0.1", 2321 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2322 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2323 | "dev": true 2324 | }, 2325 | "object-keys": { 2326 | "version": "1.1.1", 2327 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2328 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2329 | "dev": true 2330 | }, 2331 | "object.assign": { 2332 | "version": "4.1.0", 2333 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 2334 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 2335 | "dev": true, 2336 | "requires": { 2337 | "define-properties": "^1.1.2", 2338 | "function-bind": "^1.1.1", 2339 | "has-symbols": "^1.0.0", 2340 | "object-keys": "^1.0.11" 2341 | } 2342 | }, 2343 | "object.getownpropertydescriptors": { 2344 | "version": "2.0.3", 2345 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", 2346 | "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", 2347 | "dev": true, 2348 | "requires": { 2349 | "define-properties": "^1.1.2", 2350 | "es-abstract": "^1.5.1" 2351 | } 2352 | }, 2353 | "once": { 2354 | "version": "1.4.0", 2355 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2356 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2357 | "dev": true, 2358 | "requires": { 2359 | "wrappy": "1" 2360 | } 2361 | }, 2362 | "os-locale": { 2363 | "version": "3.1.0", 2364 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", 2365 | "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", 2366 | "dev": true, 2367 | "requires": { 2368 | "execa": "^1.0.0", 2369 | "lcid": "^2.0.0", 2370 | "mem": "^4.0.0" 2371 | } 2372 | }, 2373 | "p-defer": { 2374 | "version": "1.0.0", 2375 | "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", 2376 | "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", 2377 | "dev": true 2378 | }, 2379 | "p-finally": { 2380 | "version": "1.0.0", 2381 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 2382 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 2383 | "dev": true 2384 | }, 2385 | "p-is-promise": { 2386 | "version": "2.1.0", 2387 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", 2388 | "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", 2389 | "dev": true 2390 | }, 2391 | "p-limit": { 2392 | "version": "2.2.0", 2393 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", 2394 | "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", 2395 | "dev": true, 2396 | "requires": { 2397 | "p-try": "^2.0.0" 2398 | } 2399 | }, 2400 | "p-locate": { 2401 | "version": "3.0.0", 2402 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 2403 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 2404 | "dev": true, 2405 | "requires": { 2406 | "p-limit": "^2.0.0" 2407 | } 2408 | }, 2409 | "p-try": { 2410 | "version": "2.2.0", 2411 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 2412 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 2413 | "dev": true 2414 | }, 2415 | "path-exists": { 2416 | "version": "3.0.0", 2417 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 2418 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 2419 | "dev": true 2420 | }, 2421 | "path-is-absolute": { 2422 | "version": "1.0.1", 2423 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2424 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2425 | "dev": true 2426 | }, 2427 | "path-key": { 2428 | "version": "2.0.1", 2429 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 2430 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 2431 | "dev": true 2432 | }, 2433 | "path-parse": { 2434 | "version": "1.0.5", 2435 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 2436 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", 2437 | "dev": true 2438 | }, 2439 | "picomatch": { 2440 | "version": "2.0.7", 2441 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", 2442 | "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==" 2443 | }, 2444 | "pump": { 2445 | "version": "3.0.0", 2446 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2447 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2448 | "dev": true, 2449 | "requires": { 2450 | "end-of-stream": "^1.1.0", 2451 | "once": "^1.3.1" 2452 | } 2453 | }, 2454 | "require-directory": { 2455 | "version": "2.1.1", 2456 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 2457 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 2458 | "dev": true 2459 | }, 2460 | "require-main-filename": { 2461 | "version": "2.0.0", 2462 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 2463 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 2464 | "dev": true 2465 | }, 2466 | "resolve": { 2467 | "version": "1.5.0", 2468 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", 2469 | "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", 2470 | "dev": true, 2471 | "requires": { 2472 | "path-parse": "^1.0.5" 2473 | } 2474 | }, 2475 | "semver": { 2476 | "version": "5.5.0", 2477 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 2478 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", 2479 | "dev": true 2480 | }, 2481 | "set-blocking": { 2482 | "version": "2.0.0", 2483 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2484 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2485 | "dev": true 2486 | }, 2487 | "shebang-command": { 2488 | "version": "1.2.0", 2489 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2490 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2491 | "dev": true, 2492 | "requires": { 2493 | "shebang-regex": "^1.0.0" 2494 | } 2495 | }, 2496 | "shebang-regex": { 2497 | "version": "1.0.0", 2498 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2499 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2500 | "dev": true 2501 | }, 2502 | "signal-exit": { 2503 | "version": "3.0.2", 2504 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2505 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2506 | "dev": true 2507 | }, 2508 | "sprintf-js": { 2509 | "version": "1.0.3", 2510 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2511 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2512 | "dev": true 2513 | }, 2514 | "string-width": { 2515 | "version": "2.1.1", 2516 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2517 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2518 | "dev": true, 2519 | "requires": { 2520 | "is-fullwidth-code-point": "^2.0.0", 2521 | "strip-ansi": "^4.0.0" 2522 | }, 2523 | "dependencies": { 2524 | "ansi-regex": { 2525 | "version": "3.0.0", 2526 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2527 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2528 | "dev": true 2529 | }, 2530 | "strip-ansi": { 2531 | "version": "4.0.0", 2532 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2533 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2534 | "dev": true, 2535 | "requires": { 2536 | "ansi-regex": "^3.0.0" 2537 | } 2538 | } 2539 | } 2540 | }, 2541 | "strip-ansi": { 2542 | "version": "3.0.1", 2543 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2544 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2545 | "dev": true, 2546 | "requires": { 2547 | "ansi-regex": "^2.0.0" 2548 | } 2549 | }, 2550 | "strip-eof": { 2551 | "version": "1.0.0", 2552 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2553 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 2554 | "dev": true 2555 | }, 2556 | "strip-json-comments": { 2557 | "version": "2.0.1", 2558 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2559 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2560 | "dev": true 2561 | }, 2562 | "supports-color": { 2563 | "version": "6.0.0", 2564 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", 2565 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", 2566 | "dev": true, 2567 | "requires": { 2568 | "has-flag": "^3.0.0" 2569 | } 2570 | }, 2571 | "to-regex-range": { 2572 | "version": "5.0.1", 2573 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2574 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2575 | "requires": { 2576 | "is-number": "^7.0.0" 2577 | } 2578 | }, 2579 | "tree-kill": { 2580 | "version": "1.2.2", 2581 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 2582 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" 2583 | }, 2584 | "tslib": { 2585 | "version": "1.9.0", 2586 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", 2587 | "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", 2588 | "dev": true 2589 | }, 2590 | "tslint": { 2591 | "version": "5.9.1", 2592 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", 2593 | "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", 2594 | "dev": true, 2595 | "requires": { 2596 | "babel-code-frame": "^6.22.0", 2597 | "builtin-modules": "^1.1.1", 2598 | "chalk": "^2.3.0", 2599 | "commander": "^2.12.1", 2600 | "diff": "^3.2.0", 2601 | "glob": "^7.1.1", 2602 | "js-yaml": "^3.7.0", 2603 | "minimatch": "^3.0.4", 2604 | "resolve": "^1.3.2", 2605 | "semver": "^5.3.0", 2606 | "tslib": "^1.8.0", 2607 | "tsutils": "^2.12.1" 2608 | }, 2609 | "dependencies": { 2610 | "commander": { 2611 | "version": "2.14.1", 2612 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", 2613 | "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", 2614 | "dev": true 2615 | }, 2616 | "diff": { 2617 | "version": "3.4.0", 2618 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz", 2619 | "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==", 2620 | "dev": true 2621 | }, 2622 | "glob": { 2623 | "version": "7.1.2", 2624 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 2625 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 2626 | "dev": true, 2627 | "requires": { 2628 | "fs.realpath": "^1.0.0", 2629 | "inflight": "^1.0.4", 2630 | "inherits": "2", 2631 | "minimatch": "^3.0.4", 2632 | "once": "^1.3.0", 2633 | "path-is-absolute": "^1.0.0" 2634 | } 2635 | }, 2636 | "minimatch": { 2637 | "version": "3.0.4", 2638 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2639 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2640 | "dev": true, 2641 | "requires": { 2642 | "brace-expansion": "^1.1.7" 2643 | } 2644 | } 2645 | } 2646 | }, 2647 | "tsutils": { 2648 | "version": "2.21.2", 2649 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.21.2.tgz", 2650 | "integrity": "sha512-iaIuyjIUeFLdD39MYdzqBuY7Zv6+uGxSwRH4mf+HuzsnznjFz0R2tGrAe0/JvtNh91WrN8UN/DZRFTZNDuVekA==", 2651 | "dev": true, 2652 | "requires": { 2653 | "tslib": "^1.8.1" 2654 | } 2655 | }, 2656 | "typescript": { 2657 | "version": "3.8.3", 2658 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", 2659 | "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", 2660 | "dev": true 2661 | }, 2662 | "which": { 2663 | "version": "1.3.1", 2664 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2665 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2666 | "dev": true, 2667 | "requires": { 2668 | "isexe": "^2.0.0" 2669 | } 2670 | }, 2671 | "which-module": { 2672 | "version": "2.0.0", 2673 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2674 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 2675 | "dev": true 2676 | }, 2677 | "wide-align": { 2678 | "version": "1.1.3", 2679 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2680 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2681 | "dev": true, 2682 | "requires": { 2683 | "string-width": "^1.0.2 || 2" 2684 | } 2685 | }, 2686 | "wrap-ansi": { 2687 | "version": "2.1.0", 2688 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 2689 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 2690 | "dev": true, 2691 | "requires": { 2692 | "string-width": "^1.0.1", 2693 | "strip-ansi": "^3.0.1" 2694 | }, 2695 | "dependencies": { 2696 | "is-fullwidth-code-point": { 2697 | "version": "1.0.0", 2698 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 2699 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 2700 | "dev": true, 2701 | "requires": { 2702 | "number-is-nan": "^1.0.0" 2703 | } 2704 | }, 2705 | "string-width": { 2706 | "version": "1.0.2", 2707 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2708 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2709 | "dev": true, 2710 | "requires": { 2711 | "code-point-at": "^1.0.0", 2712 | "is-fullwidth-code-point": "^1.0.0", 2713 | "strip-ansi": "^3.0.0" 2714 | } 2715 | } 2716 | } 2717 | }, 2718 | "wrappy": { 2719 | "version": "1.0.2", 2720 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2721 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2722 | "dev": true 2723 | }, 2724 | "y18n": { 2725 | "version": "4.0.1", 2726 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", 2727 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", 2728 | "dev": true 2729 | }, 2730 | "yargs": { 2731 | "version": "13.2.2", 2732 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", 2733 | "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", 2734 | "dev": true, 2735 | "requires": { 2736 | "cliui": "^4.0.0", 2737 | "find-up": "^3.0.0", 2738 | "get-caller-file": "^2.0.1", 2739 | "os-locale": "^3.1.0", 2740 | "require-directory": "^2.1.1", 2741 | "require-main-filename": "^2.0.0", 2742 | "set-blocking": "^2.0.0", 2743 | "string-width": "^3.0.0", 2744 | "which-module": "^2.0.0", 2745 | "y18n": "^4.0.0", 2746 | "yargs-parser": "^13.0.0" 2747 | }, 2748 | "dependencies": { 2749 | "ansi-regex": { 2750 | "version": "4.1.0", 2751 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2752 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2753 | "dev": true 2754 | }, 2755 | "string-width": { 2756 | "version": "3.1.0", 2757 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2758 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2759 | "dev": true, 2760 | "requires": { 2761 | "emoji-regex": "^7.0.1", 2762 | "is-fullwidth-code-point": "^2.0.0", 2763 | "strip-ansi": "^5.1.0" 2764 | } 2765 | }, 2766 | "strip-ansi": { 2767 | "version": "5.2.0", 2768 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2769 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2770 | "dev": true, 2771 | "requires": { 2772 | "ansi-regex": "^4.1.0" 2773 | } 2774 | } 2775 | } 2776 | }, 2777 | "yargs-parser": { 2778 | "version": "13.0.0", 2779 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", 2780 | "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", 2781 | "dev": true, 2782 | "requires": { 2783 | "camelcase": "^5.0.0", 2784 | "decamelize": "^1.2.0" 2785 | } 2786 | }, 2787 | "yargs-unparser": { 2788 | "version": "1.5.0", 2789 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", 2790 | "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", 2791 | "dev": true, 2792 | "requires": { 2793 | "flat": "^4.1.0", 2794 | "lodash": "^4.17.11", 2795 | "yargs": "^12.0.5" 2796 | }, 2797 | "dependencies": { 2798 | "get-caller-file": { 2799 | "version": "1.0.3", 2800 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", 2801 | "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", 2802 | "dev": true 2803 | }, 2804 | "require-main-filename": { 2805 | "version": "1.0.1", 2806 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", 2807 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", 2808 | "dev": true 2809 | }, 2810 | "yargs": { 2811 | "version": "12.0.5", 2812 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", 2813 | "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", 2814 | "dev": true, 2815 | "requires": { 2816 | "cliui": "^4.0.0", 2817 | "decamelize": "^1.2.0", 2818 | "find-up": "^3.0.0", 2819 | "get-caller-file": "^1.0.1", 2820 | "os-locale": "^3.0.0", 2821 | "require-directory": "^2.1.1", 2822 | "require-main-filename": "^1.0.1", 2823 | "set-blocking": "^2.0.0", 2824 | "string-width": "^2.0.0", 2825 | "which-module": "^2.0.0", 2826 | "y18n": "^3.2.1 || ^4.0.0", 2827 | "yargs-parser": "^11.1.1" 2828 | } 2829 | }, 2830 | "yargs-parser": { 2831 | "version": "11.1.1", 2832 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", 2833 | "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", 2834 | "dev": true, 2835 | "requires": { 2836 | "camelcase": "^5.0.0", 2837 | "decamelize": "^1.2.0" 2838 | } 2839 | } 2840 | } 2841 | }, 2842 | "zone.js": { 2843 | "version": "0.7.6", 2844 | "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz", 2845 | "integrity": "sha1-+7w50+AmHQmG8boGMG6zrrDSIAk=" 2846 | } 2847 | } 2848 | } 2849 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "code-runner", 3 | "displayName": "Code Runner", 4 | "description": "Run C, C++, Java, JS, PHP, Python, Perl, Ruby, Go, Lua, Groovy, PowerShell, CMD, BASH, F#, C#, VBScript, TypeScript, CoffeeScript, Scala, Swift, Julia, Crystal, OCaml, R, AppleScript, Elixir, VB.NET, Clojure, Haxe, Obj-C, Rust, Racket, Scheme, AutoHotkey, AutoIt, Kotlin, Dart, Pascal, Haskell, Nim, D, Lisp, Kit, V, SCSS, Sass, CUDA, Less, Fortran, Ring, Standard ML, Zig, Mojo, Erlang, SPWN, Pkl, Gleam", 5 | "version": "0.12.2", 6 | "featureFlags": { 7 | "usingNewPythonInterpreterPathApi": true, 8 | "usingNewPythonInterpreterPathApiV2": true 9 | }, 10 | "publisher": "formulahendry", 11 | "icon": "images/logo.png", 12 | "engines": { 13 | "vscode": "^1.56.0" 14 | }, 15 | "categories": [ 16 | "Programming Languages", 17 | "Other" 18 | ], 19 | "keywords": [ 20 | "javascript", 21 | "php", 22 | "python", 23 | "perl", 24 | "ruby", 25 | "multi-root ready" 26 | ], 27 | "bugs": { 28 | "url": "https://github.com/formulahendry/vscode-code-runner/issues", 29 | "email": "formulahendry@gmail.com" 30 | }, 31 | "homepage": "https://github.com/formulahendry/vscode-code-runner/blob/master/README.md", 32 | "repository": { 33 | "type": "git", 34 | "url": "https://github.com/formulahendry/vscode-code-runner.git" 35 | }, 36 | "sponsor": { 37 | "url": "https://www.patreon.com/junhan" 38 | }, 39 | "activationEvents": [ 40 | "onCommand:code-runner.run", 41 | "onCommand:code-runner.runCustomCommand", 42 | "onCommand:code-runner.runByLanguage", 43 | "onStartupFinished" 44 | ], 45 | "main": "./out/src/extension", 46 | "contributes": { 47 | "commands": [ 48 | { 49 | "command": "code-runner.run", 50 | "title": "Run Code", 51 | "icon": "$(play)" 52 | }, 53 | { 54 | "command": "code-runner.runCustomCommand", 55 | "title": "Run Custom Command" 56 | }, 57 | { 58 | "command": "code-runner.runByLanguage", 59 | "title": "Run By Language" 60 | }, 61 | { 62 | "command": "code-runner.stop", 63 | "title": "Stop Code Run", 64 | "icon": "$(debug-stop)" 65 | } 66 | ], 67 | "keybindings": [ 68 | { 69 | "command": "code-runner.run", 70 | "key": "ctrl+alt+n" 71 | }, 72 | { 73 | "command": "code-runner.runCustomCommand", 74 | "key": "ctrl+alt+k" 75 | }, 76 | { 77 | "command": "code-runner.runByLanguage", 78 | "key": "ctrl+alt+j" 79 | }, 80 | { 81 | "command": "code-runner.stop", 82 | "key": "ctrl+alt+m" 83 | } 84 | ], 85 | "menus": { 86 | "editor/context": [ 87 | { 88 | "when": "!inOutput && config.code-runner.showRunCommandInEditorContextMenu", 89 | "command": "code-runner.run", 90 | "group": "navigation" 91 | }, 92 | { 93 | "when": "inOutput && !config.code-runner.runInTerminal", 94 | "command": "code-runner.stop", 95 | "group": "stop-code-run" 96 | } 97 | ], 98 | "editor/title/run": [ 99 | { 100 | "when": "config.code-runner.showRunIconInEditorTitleMenu", 101 | "command": "code-runner.run", 102 | "group": "navigation" 103 | } 104 | ], 105 | "editor/title": [ 106 | { 107 | "when": "config.code-runner.showStopIconInEditorTitleMenu && code-runner.codeRunning", 108 | "command": "code-runner.stop", 109 | "group": "navigation" 110 | } 111 | ], 112 | "explorer/context": [ 113 | { 114 | "when": "!explorerResourceIsFolder && config.code-runner.showRunCommandInExplorerContextMenu", 115 | "command": "code-runner.run", 116 | "group": "navigation" 117 | } 118 | ] 119 | }, 120 | "configuration": { 121 | "type": "object", 122 | "title": "Run Code configuration", 123 | "properties": { 124 | "code-runner.executorMapByGlob": { 125 | "type": "object", 126 | "default": { 127 | "pom.xml": "cd $dir && mvn clean package" 128 | }, 129 | "description": "Set the executor by glob.", 130 | "scope": "resource" 131 | }, 132 | "code-runner.executorMap": { 133 | "type": "object", 134 | "default": { 135 | "javascript": "node", 136 | "java": "cd $dir && javac $fileName && java $fileNameWithoutExt", 137 | "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 138 | "zig": "zig run", 139 | "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 140 | "objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 141 | "php": "php", 142 | "python": "python -u", 143 | "perl": "perl", 144 | "perl6": "perl6", 145 | "ruby": "ruby", 146 | "go": "go run", 147 | "lua": "lua", 148 | "groovy": "groovy", 149 | "powershell": "powershell -ExecutionPolicy ByPass -File", 150 | "bat": "cmd /c", 151 | "shellscript": "bash", 152 | "fsharp": "fsi", 153 | "csharp": "scriptcs", 154 | "vbscript": "cscript //Nologo", 155 | "typescript": "ts-node", 156 | "coffeescript": "coffee", 157 | "scala": "scala", 158 | "swift": "swift", 159 | "julia": "julia", 160 | "crystal": "crystal", 161 | "ocaml": "ocaml", 162 | "r": "Rscript", 163 | "applescript": "osascript", 164 | "clojure": "lein exec", 165 | "haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt", 166 | "rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt", 167 | "racket": "racket", 168 | "scheme": "csi -script", 169 | "ahk": "autohotkey", 170 | "autoit": "autoit3", 171 | "dart": "dart", 172 | "pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt", 173 | "d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt", 174 | "haskell": "runghc", 175 | "nim": "nim compile --verbosity:0 --hints:off --run", 176 | "lisp": "sbcl --script", 177 | "kit": "kitc --run", 178 | "v": "v run", 179 | "sass": "sass --style expanded", 180 | "scss": "scss --style expanded", 181 | "less": "cd $dir && lessc $fileName $fileNameWithoutExt.css", 182 | "FortranFreeForm": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 183 | "fortran-modern": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 184 | "fortran_fixed-form": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 185 | "fortran": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 186 | "sml": "cd $dir && sml $fileName", 187 | "mojo": "mojo run", 188 | "erlang": "escript", 189 | "spwn": "spwn build", 190 | "pkl": "cd $dir && pkl eval -f yaml $fileName -o $fileNameWithoutExt.yaml", 191 | "gleam": "gleam run -m $fileNameWithoutExt" 192 | }, 193 | "description": "Set the executor of each language.", 194 | "scope": "resource" 195 | }, 196 | "code-runner.executorMapByFileExtension": { 197 | "type": "object", 198 | "default": { 199 | ".vb": "cd $dir && vbc /nologo $fileName && $dir$fileNameWithoutExt", 200 | ".vbs": "cscript //Nologo", 201 | ".scala": "scala", 202 | ".jl": "julia", 203 | ".cr": "crystal", 204 | ".ml": "ocaml", 205 | ".zig": "zig run", 206 | ".exs": "elixir", 207 | ".hx": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt", 208 | ".rkt": "racket", 209 | ".scm": "csi -script", 210 | ".ahk": "autohotkey", 211 | ".au3": "autoit3", 212 | ".kt": "cd $dir && kotlinc $fileName -include-runtime -d $fileNameWithoutExt.jar && java -jar $fileNameWithoutExt.jar", 213 | ".kts": "kotlinc -script", 214 | ".dart": "dart", 215 | ".pas": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt", 216 | ".pp": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt", 217 | ".d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt", 218 | ".hs": "runhaskell", 219 | ".nim": "nim compile --verbosity:0 --hints:off --run", 220 | ".csproj": "dotnet run --project", 221 | ".fsproj": "dotnet run --project", 222 | ".lisp": "sbcl --script", 223 | ".kit": "kitc --run", 224 | ".v": "v run", 225 | ".vsh": "v run", 226 | ".sass": "sass --style expanded", 227 | ".cu": "cd $dir && nvcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", 228 | ".ring": "ring", 229 | ".sml": "cd $dir && sml $fileName", 230 | ".mojo": "mojo run", 231 | ".erl": "escript", 232 | ".spwn": "spwn build", 233 | ".pkl": "cd $dir && pkl eval -f yaml $fileName -o $fileNameWithoutExt.yaml", 234 | ".gleam": "gleam run -m $fileNameWithoutExt" 235 | }, 236 | "description": "Set the executor of each file extension.", 237 | "scope": "resource" 238 | }, 239 | "code-runner.customCommand": { 240 | "type": "string", 241 | "default": "echo Hello", 242 | "description": "Set the custom command to run.", 243 | "scope": "resource" 244 | }, 245 | "code-runner.languageIdToFileExtensionMap": { 246 | "type": "object", 247 | "default": { 248 | "bat": ".bat", 249 | "powershell": ".ps1", 250 | "typescript": ".ts" 251 | }, 252 | "description": "Set the mapping of languageId to file extension.", 253 | "scope": "resource" 254 | }, 255 | "code-runner.defaultLanguage": { 256 | "type": "string", 257 | "default": "", 258 | "description": "Set the default language to run.", 259 | "scope": "resource" 260 | }, 261 | "code-runner.cwd": { 262 | "type": "string", 263 | "default": "", 264 | "description": "Set the working directory.", 265 | "scope": "resource" 266 | }, 267 | "code-runner.fileDirectoryAsCwd": { 268 | "type": "boolean", 269 | "default": false, 270 | "description": "Whether to use the directory of the file to be executed as the working directory.", 271 | "scope": "resource" 272 | }, 273 | "code-runner.clearPreviousOutput": { 274 | "type": "boolean", 275 | "default": false, 276 | "description": "Whether to clear previous output before each run.", 277 | "scope": "resource" 278 | }, 279 | "code-runner.saveAllFilesBeforeRun": { 280 | "type": "boolean", 281 | "default": false, 282 | "description": "Whether to save all files before running.", 283 | "scope": "resource" 284 | }, 285 | "code-runner.saveFileBeforeRun": { 286 | "type": "boolean", 287 | "default": false, 288 | "description": "Whether to save the current file before running.", 289 | "scope": "resource" 290 | }, 291 | "code-runner.enableAppInsights": { 292 | "type": "boolean", 293 | "default": true, 294 | "description": "Whether to enable AppInsights to track user telemetry data.", 295 | "scope": "resource" 296 | }, 297 | "code-runner.showExecutionMessage": { 298 | "type": "boolean", 299 | "default": true, 300 | "description": "Whether to show extra execution message like [Running] ... and [Done] ...", 301 | "scope": "resource" 302 | }, 303 | "code-runner.runInTerminal": { 304 | "type": "boolean", 305 | "default": false, 306 | "description": "Whether to run code in Integrated Terminal.", 307 | "scope": "resource" 308 | }, 309 | "code-runner.terminalRoot": { 310 | "type": "string", 311 | "default": "", 312 | "description": "For Windows system, replaces the Windows style drive letter in the command with a Unix style root when using a custom shell as the terminal, like Bash or Cgywin. Example: Setting this to '/mnt/' will replace 'C:\\path' with '/mnt/c/path'", 313 | "scope": "resource" 314 | }, 315 | "code-runner.preserveFocus": { 316 | "type": "boolean", 317 | "default": true, 318 | "description": "Whether to preserve focus on code editor after code run is triggered.", 319 | "scope": "resource" 320 | }, 321 | "code-runner.ignoreSelection": { 322 | "type": "boolean", 323 | "default": false, 324 | "description": "Whether to ignore selection to always run entire file.", 325 | "scope": "resource" 326 | }, 327 | "code-runner.showRunIconInEditorTitleMenu": { 328 | "type": "boolean", 329 | "default": true, 330 | "description": "Whether to show 'Run Code' icon in editor title menu.", 331 | "scope": "resource" 332 | }, 333 | "code-runner.showStopIconInEditorTitleMenu": { 334 | "type": "boolean", 335 | "default": true, 336 | "description": "Whether to show 'Stop code run' icon in the editor title menu when code is running.", 337 | "scope": "resource" 338 | }, 339 | "code-runner.showRunCommandInEditorContextMenu": { 340 | "type": "boolean", 341 | "default": true, 342 | "description": "Whether to show 'Run Code' command in editor context menu.", 343 | "scope": "resource" 344 | }, 345 | "code-runner.showRunCommandInExplorerContextMenu": { 346 | "type": "boolean", 347 | "default": true, 348 | "description": "Whether to show 'Run Code' command in explorer context menu.", 349 | "scope": "resource" 350 | }, 351 | "code-runner.temporaryFileName": { 352 | "type": "string", 353 | "default": "tempCodeRunnerFile", 354 | "description": "Temporary file name used in running selected code snippet. When it is set as empty, the file name will be random.", 355 | "scope": "resource" 356 | }, 357 | "code-runner.respectShebang": { 358 | "type": "boolean", 359 | "default": true, 360 | "description": "Whether to respect Shebang to run code.", 361 | "scope": "resource" 362 | } 363 | } 364 | }, 365 | "languages": [ 366 | { 367 | "id": "code-runner-output", 368 | "mimetypes": [ 369 | "text/x-code-output" 370 | ] 371 | } 372 | ], 373 | "grammars": [ 374 | { 375 | "language": "code-runner-output", 376 | "scopeName": "code-runner.output", 377 | "path": "./syntaxes/code-runner-output.tmLanguage" 378 | } 379 | ] 380 | }, 381 | "scripts": { 382 | "vscode:prepublish": "tsc -p ./", 383 | "compile": "tsc -watch -p ./", 384 | "tslint": "tslint -t verbose src/**/*.ts" 385 | }, 386 | "dependencies": { 387 | "applicationinsights": "^0.19.0", 388 | "micromatch": "^4.0.2", 389 | "tree-kill": "^1.2.2" 390 | }, 391 | "devDependencies": { 392 | "@types/micromatch": "^3.1.0", 393 | "@types/mocha": "^2.2.32", 394 | "@types/node": "^6.0.40", 395 | "@types/vscode": "^1.56.0", 396 | "mocha": "^6.1.4", 397 | "tslint": "^5.5.0", 398 | "typescript": "^3.8.3" 399 | } 400 | } 401 | -------------------------------------------------------------------------------- /src/appInsightsClient.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | import appInsights = require("applicationinsights"); 3 | import * as vscode from "vscode"; 4 | 5 | export class AppInsightsClient { 6 | private _client; 7 | private _enableAppInsights; 8 | 9 | constructor() { 10 | this._client = appInsights.getClient("a25ddf11-20fc-45c6-96ae-524f47754f28"); 11 | const config = vscode.workspace.getConfiguration("code-runner"); 12 | this._enableAppInsights = config.get("enableAppInsights"); 13 | } 14 | 15 | public sendEvent(eventName: string, properties?: { [key: string]: string; }): void { 16 | if (this._enableAppInsights) { 17 | this._client.trackEvent(eventName === "" ? "bat" : eventName, properties); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/codeManager.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | import * as fs from "fs"; 3 | import * as micromatch from "micromatch"; 4 | import * as os from "os"; 5 | import { basename, dirname, extname, join } from "path"; 6 | import * as vscode from "vscode"; 7 | import { AppInsightsClient } from "./appInsightsClient"; 8 | import { Constants } from "./constants"; 9 | import { Utility } from "./utility"; 10 | 11 | const TmpDir = os.tmpdir(); 12 | 13 | export class CodeManager implements vscode.Disposable { 14 | private _outputChannel: vscode.OutputChannel; 15 | private _terminal: vscode.Terminal; 16 | private _isRunning: boolean; 17 | private _process; 18 | private _codeFile: string; 19 | private _isTmpFile: boolean; 20 | private _languageId: string; 21 | private _cwd: string; 22 | private _runFromExplorer: boolean; 23 | private _document: vscode.TextDocument; 24 | private _workspaceFolder: string; 25 | private _config: vscode.WorkspaceConfiguration; 26 | private _appInsightsClient: AppInsightsClient; 27 | private _TERMINAL_DEFAULT_SHELL_WINDOWS: string | null = null; 28 | 29 | constructor() { 30 | this._outputChannel = vscode.window.createOutputChannel("Code"); 31 | this._terminal = null; 32 | this._appInsightsClient = new AppInsightsClient(); 33 | } 34 | 35 | public onDidCloseTerminal(): void { 36 | this._terminal = null; 37 | } 38 | 39 | public async run(languageId: string = null, fileUri: vscode.Uri = null) { 40 | if (this._isRunning) { 41 | vscode.window.showInformationMessage("Code is already running!"); 42 | return; 43 | } 44 | 45 | this._runFromExplorer = this.checkIsRunFromExplorer(fileUri); 46 | if (this._runFromExplorer) { 47 | this._document = await vscode.workspace.openTextDocument(fileUri); 48 | } else { 49 | const editor = vscode.window.activeTextEditor; 50 | if (editor) { 51 | this._document = editor.document; 52 | } else { 53 | vscode.window.showInformationMessage("No code found or selected."); 54 | return; 55 | } 56 | } 57 | 58 | this.initialize(); 59 | 60 | const fileExtension = extname(this._document.fileName); 61 | const executor = this.getExecutor(languageId, fileExtension); 62 | // undefined or null 63 | if (executor == null) { 64 | vscode.window.showInformationMessage("Code language not supported or defined."); 65 | return; 66 | } 67 | 68 | this.getCodeFileAndExecute(fileExtension, executor); 69 | } 70 | 71 | public runCustomCommand(): void { 72 | if (this._isRunning) { 73 | vscode.window.showInformationMessage("Code is already running!"); 74 | return; 75 | } 76 | 77 | this._runFromExplorer = false; 78 | const editor = vscode.window.activeTextEditor; 79 | if (editor) { 80 | this._document = editor.document; 81 | } 82 | 83 | this.initialize(); 84 | 85 | const executor = this._config.get("customCommand"); 86 | 87 | if (this._document) { 88 | const fileExtension = extname(this._document.fileName); 89 | this.getCodeFileAndExecute(fileExtension, executor, false); 90 | } else { 91 | this.executeCommand(executor, false); 92 | } 93 | } 94 | 95 | public runByLanguage(): void { 96 | this._appInsightsClient.sendEvent("runByLanguage"); 97 | const config = this.getConfiguration("code-runner"); 98 | const executorMap = config.get("executorMap"); 99 | vscode.window.showQuickPick(Object.keys(executorMap), { placeHolder: "Type or select language to run" }).then((languageId) => { 100 | if (languageId !== undefined) { 101 | this.run(languageId); 102 | } 103 | }); 104 | } 105 | 106 | public stop(): void { 107 | this._appInsightsClient.sendEvent("stop"); 108 | this.stopRunning(); 109 | } 110 | 111 | public dispose() { 112 | this.stopRunning(); 113 | } 114 | 115 | private checkIsRunFromExplorer(fileUri: vscode.Uri): boolean { 116 | const editor = vscode.window.activeTextEditor; 117 | if (!fileUri || !fileUri.fsPath) { 118 | return false; 119 | } 120 | if (!editor) { 121 | return true; 122 | } 123 | if (fileUri.fsPath === editor.document.uri.fsPath) { 124 | return false; 125 | } 126 | return true; 127 | } 128 | 129 | private stopRunning() { 130 | if (this._isRunning) { 131 | this._isRunning = false; 132 | vscode.commands.executeCommand("setContext", "code-runner.codeRunning", false); 133 | const kill = require("tree-kill"); 134 | kill(this._process.pid); 135 | } 136 | } 137 | 138 | private initialize(): void { 139 | this._config = this.getConfiguration("code-runner"); 140 | this._cwd = this._config.get("cwd"); 141 | if (this._cwd) { 142 | return; 143 | } 144 | this._workspaceFolder = this.getWorkspaceFolder(); 145 | if ((this._config.get("fileDirectoryAsCwd") || !this._workspaceFolder) 146 | && this._document && !this._document.isUntitled) { 147 | this._cwd = dirname(this._document.fileName); 148 | } else { 149 | this._cwd = this._workspaceFolder; 150 | } 151 | if (this._cwd) { 152 | return; 153 | } 154 | this._cwd = TmpDir; 155 | } 156 | 157 | private getConfiguration(section?: string): vscode.WorkspaceConfiguration { 158 | return Utility.getConfiguration(section, this._document); 159 | } 160 | 161 | private getWorkspaceFolder(): string { 162 | if (vscode.workspace.workspaceFolders) { 163 | if (this._document) { 164 | const workspaceFolder = vscode.workspace.getWorkspaceFolder(this._document.uri); 165 | if (workspaceFolder) { 166 | return workspaceFolder.uri.fsPath; 167 | } 168 | } 169 | return vscode.workspace.workspaceFolders[0].uri.fsPath; 170 | } else { 171 | return undefined; 172 | } 173 | } 174 | 175 | private getCodeFileAndExecute(fileExtension: string, executor: string, appendFile: boolean = true): any { 176 | let selection; 177 | const activeTextEditor = vscode.window.activeTextEditor; 178 | if (activeTextEditor) { 179 | selection = activeTextEditor.selection; 180 | } 181 | const ignoreSelection = this._config.get("ignoreSelection"); 182 | 183 | if ((this._runFromExplorer || !selection || selection.isEmpty || ignoreSelection) && !this._document.isUntitled) { 184 | this._isTmpFile = false; 185 | this._codeFile = this._document.fileName; 186 | 187 | if (this._config.get("saveAllFilesBeforeRun")) { 188 | return vscode.workspace.saveAll().then(() => { 189 | this.executeCommand(executor, appendFile); 190 | }); 191 | } 192 | 193 | if (this._config.get("saveFileBeforeRun")) { 194 | return this._document.save().then(() => { 195 | this.executeCommand(executor, appendFile); 196 | }); 197 | } 198 | } else { 199 | let text = (this._runFromExplorer || !selection || selection.isEmpty || ignoreSelection) ? 200 | this._document.getText() : this._document.getText(selection); 201 | 202 | if (this._languageId === "php") { 203 | text = text.trim(); 204 | if (!text.startsWith("("languageIdToFileExtensionMap"); 224 | if (this._languageId && languageIdToFileExtensionMap[this._languageId]) { 225 | fileType = languageIdToFileExtensionMap[this._languageId]; 226 | } else { 227 | if (fileExtension) { 228 | fileType = fileExtension; 229 | } else { 230 | fileType = "." + this._languageId; 231 | } 232 | } 233 | const temporaryFileName = this._config.get("temporaryFileName"); 234 | const tmpFileNameWithoutExt = temporaryFileName ? temporaryFileName : "temp" + this.rndName(); 235 | const tmpFileName = tmpFileNameWithoutExt + fileType; 236 | this._codeFile = join(folder, tmpFileName); 237 | fs.writeFileSync(this._codeFile, content); 238 | } 239 | 240 | private getExecutor(languageId: string, fileExtension: string): string { 241 | this._languageId = languageId === null ? this._document.languageId : languageId; 242 | 243 | let executor = null; 244 | 245 | // Check if file contains hash-bang 246 | if (languageId == null && this._config.get("respectShebang")) { 247 | const firstLineInFile = this._document.lineAt(0).text; 248 | if (/^#!(?!\[)/.test(firstLineInFile)) { // #![...] are used in rust https://doc.rust-lang.org/reference/attributes.html 249 | executor = firstLineInFile.slice(2); 250 | } 251 | } 252 | 253 | if (executor == null) { 254 | const executorMapByGlob = this._config.get("executorMapByGlob"); 255 | if (executorMapByGlob) { 256 | const fileBasename = basename(this._document.fileName); 257 | for (const glob of Object.keys(executorMapByGlob)) { 258 | if (micromatch.isMatch(fileBasename, glob)) { 259 | executor = executorMapByGlob[glob]; 260 | break; 261 | } 262 | } 263 | } 264 | } 265 | 266 | const executorMap = this._config.get("executorMap"); 267 | 268 | if (executor == null) { 269 | executor = executorMap[this._languageId]; 270 | } 271 | 272 | // executor is undefined or null 273 | if (executor == null && fileExtension) { 274 | const executorMapByFileExtension = this._config.get("executorMapByFileExtension"); 275 | executor = executorMapByFileExtension[fileExtension]; 276 | if (executor != null) { 277 | this._languageId = fileExtension; 278 | } 279 | } 280 | if (executor == null) { 281 | this._languageId = this._config.get("defaultLanguage"); 282 | executor = executorMap[this._languageId]; 283 | } 284 | 285 | return executor; 286 | } 287 | 288 | private executeCommand(executor: string, appendFile: boolean = true) { 289 | if (this._config.get("runInTerminal")) { 290 | this.executeCommandInTerminal(executor, appendFile); 291 | } else { 292 | this.executeCommandInOutputChannel(executor, appendFile); 293 | } 294 | } 295 | 296 | private getWorkspaceRoot(codeFileDir: string): string { 297 | return this._workspaceFolder ? this._workspaceFolder : codeFileDir; 298 | } 299 | 300 | /** 301 | * Gets the base name of the code file, that is without its directory. 302 | */ 303 | private getCodeBaseFile(): string { 304 | const regexMatch = this._codeFile.match(/.*[\/\\](.*)/); 305 | return regexMatch ? regexMatch[1] : this._codeFile; 306 | } 307 | 308 | /** 309 | * Gets the code file name without its directory and extension. 310 | */ 311 | private getCodeFileWithoutDirAndExt(): string { 312 | const regexMatch = this._codeFile.match(/.*[\/\\](.*(?=\..*))/); 313 | return regexMatch ? regexMatch[1] : this._codeFile; 314 | } 315 | 316 | /** 317 | * Gets the directory of the code file. 318 | */ 319 | private getCodeFileDir(): string { 320 | const regexMatch = this._codeFile.match(/(.*[\/\\]).*/); 321 | return regexMatch ? regexMatch[1] : this._codeFile; 322 | } 323 | 324 | /** 325 | * Gets the drive letter of the code file. 326 | */ 327 | private getDriveLetter(): string { 328 | const regexMatch = this._codeFile.match(/^([A-Za-z]:).*/); 329 | return regexMatch ? regexMatch[1] : "$driveLetter"; 330 | } 331 | 332 | /** 333 | * Gets the directory of the code file without a trailing slash. 334 | */ 335 | private getCodeFileDirWithoutTrailingSlash(): string { 336 | return this.getCodeFileDir().replace(/[\/\\]$/, ""); 337 | } 338 | 339 | /** 340 | * Includes double quotes around a given file name. 341 | */ 342 | private quoteFileName(fileName: string): string { 343 | return '\"' + fileName + '\"'; 344 | } 345 | 346 | /** 347 | * Gets the executor to run a source code file 348 | * and generates the complete command that allow that file to be run. 349 | * This executor command may include a variable $1 to indicate the place where 350 | * the source code file name have to be included. 351 | * If no such a variable is present in the executor command, 352 | * the file name is appended to the end of the executor command. 353 | * 354 | * @param executor The command used to run a source code file 355 | * @return the complete command to run the file, that includes the file name 356 | */ 357 | private async getFinalCommandToRunCodeFile(executor: string, appendFile: boolean = true): Promise { 358 | let cmd = executor; 359 | 360 | if (this._codeFile) { 361 | const codeFileDir = this.getCodeFileDir(); 362 | const pythonPath = cmd.includes("$pythonPath") ? await Utility.getPythonPath(this._document) : Constants.python; 363 | const placeholders: Array<{ regex: RegExp, replaceValue: string }> = [ 364 | // A placeholder that has to be replaced by the path of the folder opened in VS Code 365 | // If no folder is opened, replace with the directory of the code file 366 | { regex: /\$workspaceRoot/g, replaceValue: this.getWorkspaceRoot(codeFileDir) }, 367 | // A placeholder that has to be replaced by the code file name without its extension 368 | { regex: /\$fileNameWithoutExt/g, replaceValue: this.getCodeFileWithoutDirAndExt() }, 369 | // A placeholder that has to be replaced by the full code file name 370 | { regex: /\$fullFileName/g, replaceValue: this.quoteFileName(this._codeFile) }, 371 | // A placeholder that has to be replaced by the code file name without the directory 372 | { regex: /\$fileName/g, replaceValue: this.getCodeBaseFile() }, 373 | // A placeholder that has to be replaced by the drive letter of the code file (Windows only) 374 | { regex: /\$driveLetter/g, replaceValue: this.getDriveLetter() }, 375 | // A placeholder that has to be replaced by the directory of the code file without a trailing slash 376 | { regex: /\$dirWithoutTrailingSlash/g, replaceValue: this.quoteFileName(this.getCodeFileDirWithoutTrailingSlash()) }, 377 | // A placeholder that has to be replaced by the directory of the code file 378 | { regex: /\$dir/g, replaceValue: this.quoteFileName(codeFileDir) }, 379 | // A placeholder that has to be replaced by the path of Python interpreter 380 | { regex: /\$pythonPath/g, replaceValue: pythonPath }, 381 | ]; 382 | 383 | placeholders.forEach((placeholder) => { 384 | cmd = cmd.replace(placeholder.regex, placeholder.replaceValue); 385 | }); 386 | } 387 | 388 | return (cmd !== executor ? cmd : executor + (appendFile ? " " + this.quoteFileName(this._codeFile) : "")); 389 | } 390 | 391 | private changeExecutorFromCmdToPs(executor: string): string { 392 | if (executor.includes(" && ") && this.isPowershellOnWindows()) { 393 | let replacement = "; if ($?) {"; 394 | executor = executor.replace("&&", replacement); 395 | replacement = "} " + replacement; 396 | executor = executor.replace(/&&/g, replacement); 397 | executor = executor.replace(/\$dir\$fileNameWithoutExt/g, ".\\$fileNameWithoutExt"); 398 | return executor + " }"; 399 | } 400 | return executor; 401 | } 402 | 403 | private isPowershellOnWindows(): boolean { 404 | if (os.platform() === "win32") { 405 | const defaultProfile = vscode.workspace.getConfiguration("terminal").get("integrated.defaultProfile.windows"); 406 | if (defaultProfile) { 407 | if (defaultProfile.toLowerCase().includes("powershell")) { 408 | return true; 409 | } else if (defaultProfile === "Command Prompt") { 410 | return false; 411 | } 412 | } 413 | const windowsShell = vscode.env.shell; 414 | return (windowsShell && windowsShell.toLowerCase().includes("powershell")); 415 | } 416 | return false; 417 | } 418 | 419 | private changeFilePathForBashOnWindows(command: string): string { 420 | if (os.platform() === "win32") { 421 | const windowsShell = vscode.env.shell; 422 | const terminalRoot = this._config.get("terminalRoot"); 423 | if (windowsShell && terminalRoot) { 424 | command = command 425 | .replace(/([A-Za-z]):\\/g, (match, p1) => `${terminalRoot}${p1.toLowerCase()}/`) 426 | .replace(/\\/g, "/"); 427 | } else if (windowsShell && windowsShell.toLowerCase().indexOf("bash") > -1 && windowsShell.toLowerCase().indexOf("windows") > -1) { 428 | command = command.replace(/([A-Za-z]):\\/g, this.replacer).replace(/\\/g, "/"); 429 | } 430 | } 431 | return command; 432 | } 433 | 434 | private replacer(match: string, p1: string): string { 435 | return `/mnt/${p1.toLowerCase()}/`; 436 | } 437 | 438 | private async executeCommandInTerminal(executor: string, appendFile: boolean = true) { 439 | let isNewTerminal = false; 440 | if (this._terminal === null) { 441 | this._terminal = vscode.window.createTerminal("Code"); 442 | isNewTerminal = true; 443 | } 444 | this._terminal.show(this._config.get("preserveFocus")); 445 | this.sendRunEvent(executor, true); 446 | executor = this.changeExecutorFromCmdToPs(executor); 447 | let command = await this.getFinalCommandToRunCodeFile(executor, appendFile); 448 | command = this.changeFilePathForBashOnWindows(command); 449 | if (this._config.get("clearPreviousOutput") && !isNewTerminal) { 450 | await vscode.commands.executeCommand("workbench.action.terminal.clear"); 451 | } 452 | if (this._config.get("fileDirectoryAsCwd")) { 453 | const cwd = this.changeFilePathForBashOnWindows(this._cwd); 454 | this._terminal.sendText(`cd "${cwd}"`); 455 | } 456 | this._terminal.sendText(command); 457 | } 458 | 459 | private async executeCommandInOutputChannel(executor: string, appendFile: boolean = true) { 460 | this._isRunning = true; 461 | vscode.commands.executeCommand("setContext", "code-runner.codeRunning", true); 462 | const clearPreviousOutput = this._config.get("clearPreviousOutput"); 463 | if (clearPreviousOutput) { 464 | this._outputChannel.clear(); 465 | } 466 | const showExecutionMessage = this._config.get("showExecutionMessage"); 467 | this._outputChannel.show(this._config.get("preserveFocus")); 468 | const spawn = require("child_process").spawn; 469 | const command = await this.getFinalCommandToRunCodeFile(executor, appendFile); 470 | if (showExecutionMessage) { 471 | this._outputChannel.appendLine("[Running] " + command); 472 | } 473 | this.sendRunEvent(executor, false); 474 | const startTime = new Date(); 475 | this._process = spawn(command, [], { cwd: this._cwd, shell: true }); 476 | 477 | this._process.stdout.on("data", (data) => { 478 | this._outputChannel.append(data.toString()); 479 | }); 480 | 481 | this._process.stderr.on("data", (data) => { 482 | this._outputChannel.append(data.toString()); 483 | }); 484 | 485 | this._process.on("close", (code) => { 486 | this._isRunning = false; 487 | vscode.commands.executeCommand("setContext", "code-runner.codeRunning", false); 488 | const endTime = new Date(); 489 | const elapsedTime = (endTime.getTime() - startTime.getTime()) / 1000; 490 | this._outputChannel.appendLine(""); 491 | if (showExecutionMessage) { 492 | this._outputChannel.appendLine("[Done] exited with code=" + code + " in " + elapsedTime + " seconds"); 493 | this._outputChannel.appendLine(""); 494 | } 495 | if (this._isTmpFile) { 496 | fs.unlinkSync(this._codeFile); 497 | } 498 | }); 499 | } 500 | 501 | private sendRunEvent(executor: string, runFromTerminal: boolean) { 502 | const properties = { 503 | runFromTerminal: runFromTerminal.toString(), 504 | runFromExplorer: this._runFromExplorer.toString(), 505 | isTmpFile: this._isTmpFile.toString(), 506 | }; 507 | this._appInsightsClient.sendEvent(executor, properties); 508 | } 509 | } 510 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | export class Constants { 4 | public static readonly python = "python"; 5 | } 6 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | import * as vscode from "vscode"; 3 | import { CodeManager } from "./codeManager"; 4 | 5 | export function activate(context: vscode.ExtensionContext) { 6 | 7 | const codeManager = new CodeManager(); 8 | 9 | vscode.window.onDidCloseTerminal(() => { 10 | codeManager.onDidCloseTerminal(); 11 | }); 12 | 13 | const run = vscode.commands.registerCommand("code-runner.run", (fileUri: vscode.Uri) => { 14 | codeManager.run(null, fileUri); 15 | }); 16 | 17 | const runCustomCommand = vscode.commands.registerCommand("code-runner.runCustomCommand", () => { 18 | codeManager.runCustomCommand(); 19 | }); 20 | 21 | const runByLanguage = vscode.commands.registerCommand("code-runner.runByLanguage", () => { 22 | codeManager.runByLanguage(); 23 | }); 24 | 25 | const stop = vscode.commands.registerCommand("code-runner.stop", () => { 26 | codeManager.stop(); 27 | }); 28 | 29 | context.subscriptions.push(run); 30 | context.subscriptions.push(runCustomCommand); 31 | context.subscriptions.push(runByLanguage); 32 | context.subscriptions.push(stop); 33 | context.subscriptions.push(codeManager); 34 | } 35 | 36 | export function deactivate() { 37 | } 38 | -------------------------------------------------------------------------------- /src/utility.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | import * as vscode from "vscode"; 3 | import { Constants } from "./constants"; 4 | 5 | export class Utility { 6 | public static async getPythonPath(document: vscode.TextDocument): Promise { 7 | try { 8 | const extension = vscode.extensions.getExtension("ms-python.python"); 9 | if (!extension) { 10 | return Constants.python; 11 | } 12 | const usingNewInterpreterStorage = extension.packageJSON?.featureFlags?.usingNewInterpreterStorage; 13 | if (usingNewInterpreterStorage) { 14 | if (!extension.isActive) { 15 | await extension.activate(); 16 | } 17 | const execCommand = extension.exports.settings.getExecutionDetails ? 18 | extension.exports.settings.getExecutionDetails(document?.uri).execCommand : 19 | extension.exports.settings.getExecutionCommand(document?.uri); 20 | return execCommand ? execCommand.join(" ") : Constants.python; 21 | } else { 22 | return this.getConfiguration("python", document).get("pythonPath"); 23 | } 24 | } catch (error) { 25 | return Constants.python; 26 | } 27 | } 28 | 29 | public static getConfiguration(section?: string, document?: vscode.TextDocument): vscode.WorkspaceConfiguration { 30 | if (document) { 31 | return vscode.workspace.getConfiguration(section, document.uri); 32 | } else { 33 | return vscode.workspace.getConfiguration(section); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /syntaxes/code-runner-output.tmLanguage: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | scopeName 6 | code-runner.output 7 | name 8 | code-runner-output 9 | patterns 10 | 11 | 12 | captures 13 | 14 | 1 15 | 16 | name 17 | token.info-token 18 | 19 | 2 20 | 21 | name 22 | string 23 | 24 | 25 | match 26 | (\[Running\])(.*) 27 | name 28 | code-runner.running 29 | 30 | 31 | captures 32 | 33 | 1 34 | 35 | name 36 | token.info-token 37 | 38 | 2 39 | 40 | name 41 | string 42 | 43 | 3 44 | 45 | name 46 | token.debug-token 47 | 48 | 4 49 | 50 | name 51 | token.error-token 52 | 53 | 5 54 | 55 | name 56 | string 57 | 58 | 6 59 | 60 | name 61 | constant.numeric 62 | 63 | 7 64 | 65 | name 66 | string 67 | 68 | 69 | match 70 | (\[Done\])(.+)(?:(code=0)|(code=\d+))([^\d]+)(\d+(?:\.\d+)?)([^\d]+) 71 | name 72 | code-runner.done 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /test/extension.test.ts: -------------------------------------------------------------------------------- 1 | // 2 | // Note: This example test is leveraging the Mocha test framework. 3 | // Please refer to their documentation on https://mochajs.org/ for help. 4 | // 5 | 6 | // The module 'assert' provides assertion methods from node 7 | import * as assert from 'assert'; 8 | 9 | // You can import and use all API from the 'vscode' module 10 | // as well as import your extension to test it 11 | import * as vscode from 'vscode'; 12 | import * as myExtension from '../src/extension'; 13 | 14 | // Defines a Mocha test suite to group tests of similar kind together 15 | suite("Extension Tests", () => { 16 | 17 | // Defines a Mocha unit test 18 | test("Something 1", () => { 19 | assert.equal(-1, [1, 2, 3].indexOf(5)); 20 | assert.equal(-1, [1, 2, 3].indexOf(0)); 21 | }); 22 | }); -------------------------------------------------------------------------------- /test/index.ts: -------------------------------------------------------------------------------- 1 | // 2 | // PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING 3 | // 4 | // This file is providing the test runner to use when running extension tests. 5 | // By default the test runner in use is Mocha based. 6 | // 7 | // You can provide your own test runner if you want to override it by exporting 8 | // a function run(testRoot: string, clb: (error:Error) => void) that the extension 9 | // host can call to run the tests. The test runner is expected to use console.log 10 | // to report the results back to the caller. When the tests are finished, return 11 | // a possible error to the callback or null if none. 12 | 13 | var testRunner = require('vscode/lib/testrunner'); 14 | 15 | // You can directly control Mocha options by uncommenting the following lines 16 | // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info 17 | testRunner.configure({ 18 | ui: 'tdd', // the TDD UI is being used in extension.test.ts (suite, test, etc.) 19 | useColors: true // colored output from test results 20 | }); 21 | 22 | module.exports = testRunner; -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "ES2019" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "." 11 | }, 12 | "exclude": [ 13 | "node_modules", 14 | ".vscode-test" 15 | ] 16 | } -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint:recommended", 3 | "rules": { 4 | "variable-name": [ 5 | true, 6 | "ban-keywords", 7 | "check-format", 8 | "allow-pascal-case", 9 | "allow-leading-underscore" 10 | ], 11 | "max-line-length": [ 12 | true, 13 | 150 14 | ], 15 | "no-empty": false, 16 | "object-literal-sort-keys": false 17 | } 18 | } --------------------------------------------------------------------------------