├── .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 | [](https://gitter.im/formulahendry/vscode-code-runner?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)   [](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 | 
12 |
13 | ## WeChat Official Account
14 |
15 | VS Code 的热门文章、使用技巧、插件推荐、插件开发攻略等,请关注“**玩转VS Code**”公众号!
16 |
17 | 
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 | 
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 | 
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 | 
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 | }
--------------------------------------------------------------------------------