diff --git a/contrib/bake-vscode/Bakefile b/contrib/bake-vscode/Bakefile
index 06bb8a4..142dbc9 100644
--- a/contrib/bake-vscode/Bakefile
+++ b/contrib/bake-vscode/Bakefile
@@ -1,9 +1,10 @@
-render/syntax: @test
- cat $HELLO
- npx js-yaml syntaxes/bakefile.tmLanguage.yaml > syntaxes/bakefile.tmLanguage.json
+ms/publish: ms/package
+ vsce publish
-install/code:
- set -ex && code --install-extension kennethreitz.bake "$PWD"
+ms/package: install/system
+ cp ../../README.md README.md
+ vsce package
install/system:
- yarn add -g yo generator-code
+ npm install -g yo generator-code vsce
+vnfpzyctwdml75il7y5prfe3637lbvr4wpkje3mtecgbqbm3fhmq
diff --git a/contrib/bake-vscode/README.md b/contrib/bake-vscode/README.md
index feea101..6731b1c 100644
--- a/contrib/bake-vscode/README.md
+++ b/contrib/bake-vscode/README.md
@@ -1,65 +1,141 @@
-# bake README
+
-This is the README for your extension "bake". After writing up a brief description, we recommend including the following sections.
-## Features
+
+
+ $ bake, n:
+ the s☿rangely familiar task runner.
+
+
-Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file.
+--------------------
-For example if there is an image subfolder under your extension project workspace:
+I love using `Makefile` for one-off **tasks** in projects.
-\!\[feature X\]\(images/feature-x.png\)
+The problem with doing this is that you can't use familiar bash–isms when doing so, as **GNU Make** doesn't use the familiar **Bash** syntax, nor does it allow for simple ad–hoc use of arbitrary scripting languages (e.g. **Python**).
-> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow.
+This project seeks to bridge all of these worlds into a single entrypoint — ideal for cross–language repositories.
-## Requirements
+-----------------
-If you have any requirements or dependencies, add a section describing those and how to install and configure them.
+
+
+
-## Extension Settings
+----------------
-Include if your extension adds any VS Code settings through the `contributes.configuration` extension point.
+### Features 'n Things
-For example:
+- A `Bakefile`, which looks and feels like the good parts of a `Makefile`.
+- Except, you can write real bash code!
+- Environment variables are explicitly passed or whitelisted (allowed), not inherited from the parent shell.
+- Unlike `Makefile`, either tabs or 4 spaces can be used.
+- Tasks can be run safely and reliably. Rest assured that scripts are executed from the project root (e.g. location of the `Bakefile`).
+- See [advanced example](https://github.com/kennethreitz/bake#advanced-usage-sample) for further, juicy, details.
-This extension contributes the following settings:
+------------------
-* `myExtension.enable`: enable/disable this extension
-* `myExtension.thing`: set to `blah` to do something
+## Installing `$ bake`
-## Known Issues
+**MacOS**:
-Calling out known issues can help limit users opening duplicate issues against your extension.
+```console
+$ brew install kennethreitz/-/bake
+==> Installing bake from kennethreitz/-
+…
+🍺 /usr/local/Cellar/bake/19-09-16: 1,563 files, 16.7MB, built in 11 seconds
+```
-## Release Notes
+**Various Linux Distributions** (Python 3.6+):
-Users appreciate release notes as you update your extension.
+```console
+$ pip3 install bake-cli
+Collecting bake-cli
+…
+Successfully installed bake-cli-0.2.0 delegator.py-0.1.1 pexpect-4.7.0 ptyprocess-0.6.0
+```
-### 1.0.0
+✨🍰✨
-Initial release of ...
+---------------
-### 1.0.1
+## `$ cat Bakefile`
-Fixed issue #.
+```make
+full-install: system-deps install
+install: node-deps python-deps
+format:
+ black .
-### 1.1.0
+python-deps: @skip:key=Pipfile.lock
+ pipenv install
+node-deps: @skip:key=yarn.lock
+ yarn install
+system-deps: @confirm
+ brew install pipenv
+
+python-example:
+ #!/usr/bin/env python
+ import os
+ import sys
-Added features X, Y, and Z.
+ print(os.environ['KEY'])
+ print(sys.argv[1:])
------------------------------------------------------------------------------------------------------------
+dangerous-example: @confirm:secure
+ #
+ exit 0
+```
-## Working with Markdown
-**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts:
+### `$ bake install`
-* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux)
-* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux)
-* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets
+```console
+ + Executing 'node-deps':
+yarn install v1.17.3
+[1/4] 🔍 Resolving packages...
+success Already up-to-date.
+✨ Done in 0.03s.
+ + Executing 'python-deps':
+Installing dependencies from Pipfile.lock (2ee04c)…
+ 🐍 ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 8/8 — 00:00:01
+ + Done.
+```
-### For more information
-* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
-* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
+### `$ bake python-example KEY=VALUE 1 2 3`
-**Enjoy!**
+```console
+ + Executing 'python-argv':
+ VALUE
+ ['1', '2', '3']
+ + Done.
+ ```
+
+### `$ bake dangerous-example`
+
+```console
++ Executing '@confirm:secure' ·
+ What is 10 times 2?: 7
+Aborted.
+```
+
+## Advanced Usage Sample
+
+
+
+Fancy, eh?
+
+
+
+---------------------
+
+
+This repository has been brought to you, with much joy, by Kenneth Reitz.
+
+
+
+
+
+ As above, so below.
+
diff --git a/contrib/bake-vscode/bake-0.0.1.vsix b/contrib/bake-vscode/bake-0.0.1.vsix
new file mode 100644
index 0000000..88a312e
Binary files /dev/null and b/contrib/bake-vscode/bake-0.0.1.vsix differ
diff --git a/contrib/bake-vscode/node_modules/.bin/atob b/contrib/bake-vscode/node_modules/.bin/atob
new file mode 120000
index 0000000..a68344a
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/atob
@@ -0,0 +1 @@
+../atob/bin/atob.js
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/markdown-it b/contrib/bake-vscode/node_modules/.bin/markdown-it
new file mode 120000
index 0000000..894bcdb
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/markdown-it
@@ -0,0 +1 @@
+../markdown-it/bin/markdown-it.js
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/mime b/contrib/bake-vscode/node_modules/.bin/mime
new file mode 120000
index 0000000..fbb7ee0
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/mime
@@ -0,0 +1 @@
+../mime/cli.js
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/mkdirp b/contrib/bake-vscode/node_modules/.bin/mkdirp
new file mode 120000
index 0000000..017896c
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/mkdirp
@@ -0,0 +1 @@
+../mkdirp/bin/cmd.js
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/rimraf b/contrib/bake-vscode/node_modules/.bin/rimraf
new file mode 120000
index 0000000..4cd49a4
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/rimraf
@@ -0,0 +1 @@
+../rimraf/bin.js
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/semver b/contrib/bake-vscode/node_modules/.bin/semver
new file mode 120000
index 0000000..25348a1
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/semver
@@ -0,0 +1 @@
+../editions/node_modules/semver/bin/semver.js
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/shjs b/contrib/bake-vscode/node_modules/.bin/shjs
new file mode 120000
index 0000000..a044997
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/shjs
@@ -0,0 +1 @@
+../shelljs/bin/shjs
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/sshpk-conv b/contrib/bake-vscode/node_modules/.bin/sshpk-conv
new file mode 120000
index 0000000..a2a295c
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/sshpk-conv
@@ -0,0 +1 @@
+../sshpk/bin/sshpk-conv
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/sshpk-sign b/contrib/bake-vscode/node_modules/.bin/sshpk-sign
new file mode 120000
index 0000000..766b9b3
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/sshpk-sign
@@ -0,0 +1 @@
+../sshpk/bin/sshpk-sign
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/sshpk-verify b/contrib/bake-vscode/node_modules/.bin/sshpk-verify
new file mode 120000
index 0000000..bfd7e3a
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/sshpk-verify
@@ -0,0 +1 @@
+../sshpk/bin/sshpk-verify
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/uuid b/contrib/bake-vscode/node_modules/.bin/uuid
new file mode 120000
index 0000000..b3e45bc
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/uuid
@@ -0,0 +1 @@
+../uuid/bin/uuid
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/vsce b/contrib/bake-vscode/node_modules/.bin/vsce
new file mode 120000
index 0000000..059933e
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/vsce
@@ -0,0 +1 @@
+../vsce/out/vsce
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/which b/contrib/bake-vscode/node_modules/.bin/which
new file mode 120000
index 0000000..f62471c
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/which
@@ -0,0 +1 @@
+../which/bin/which
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.bin/yosay b/contrib/bake-vscode/node_modules/.bin/yosay
new file mode 120000
index 0000000..92e9daa
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.bin/yosay
@@ -0,0 +1 @@
+../yosay/cli.js
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/.yarn-integrity b/contrib/bake-vscode/node_modules/.yarn-integrity
new file mode 100644
index 0000000..98a3077
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/.yarn-integrity
@@ -0,0 +1,477 @@
+{
+ "systemParams": "darwin-x64-64",
+ "modulesFolders": [
+ "node_modules"
+ ],
+ "flags": [],
+ "linkedModules": [],
+ "topLevelPatterns": [
+ "generator-code@^1.2.6",
+ "vsce@^1.66.0"
+ ],
+ "lockfileEntries": {
+ "@mrmlnc/readdir-enhanced@^2.2.1": "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde",
+ "@nodelib/fs.stat@^1.1.2": "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b",
+ "@types/node@*": "https://registry.yarnpkg.com/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f",
+ "ajv@^6.5.5": "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52",
+ "ansi-escapes@^3.2.0": "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b",
+ "ansi-regex@^2.0.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
+ "ansi-regex@^3.0.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998",
+ "ansi-regex@^4.1.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997",
+ "ansi-styles@^2.2.1": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe",
+ "ansi-styles@^3.0.0": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d",
+ "ansi-styles@^3.2.1": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d",
+ "argparse@^1.0.7": "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911",
+ "arr-diff@^4.0.0": "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520",
+ "arr-flatten@^1.1.0": "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1",
+ "arr-union@^3.1.0": "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4",
+ "array-differ@^1.0.0": "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031",
+ "array-union@^1.0.1": "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39",
+ "array-uniq@^1.0.1": "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6",
+ "array-unique@^0.3.2": "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428",
+ "arrify@^1.0.0": "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d",
+ "arrify@^1.0.1": "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d",
+ "asn1@~0.2.3": "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136",
+ "assert-plus@1.0.0": "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525",
+ "assert-plus@^1.0.0": "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525",
+ "assign-symbols@^1.0.0": "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367",
+ "async@^2.6.0": "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff",
+ "asynckit@^0.4.0": "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79",
+ "atob@^2.1.1": "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9",
+ "aws-sign2@~0.7.0": "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8",
+ "aws4@^1.8.0": "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f",
+ "azure-devops-node-api@^7.2.0": "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz#131d4e01cf12ebc6e45569b5e0c5c249e4114d6d",
+ "balanced-match@^1.0.0": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767",
+ "base@^0.11.1": "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f",
+ "bcrypt-pbkdf@^1.0.0": "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e",
+ "binaryextensions@^2.1.2": "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.2.tgz#c83c3d74233ba7674e4f313cb2a2b70f54e94b7c",
+ "boolbase@~1.0.0": "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e",
+ "brace-expansion@^1.1.7": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd",
+ "braces@^2.3.1": "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729",
+ "buffer-alloc-unsafe@^1.1.0": "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0",
+ "buffer-alloc@^1.2.0": "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec",
+ "buffer-crc32@~0.2.3": "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242",
+ "buffer-fill@^1.0.0": "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c",
+ "cache-base@^1.0.1": "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2",
+ "call-me-maybe@^1.0.1": "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b",
+ "caseless@~0.12.0": "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc",
+ "chalk@^1.0.0": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98",
+ "chalk@^2.0.1": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
+ "chalk@^2.3.0": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
+ "chalk@^2.4.1": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
+ "chalk@^2.4.2": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
+ "chardet@^0.7.0": "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e",
+ "cheerio@^1.0.0-rc.1": "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6",
+ "class-utils@^0.3.5": "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463",
+ "cli-boxes@^1.0.0": "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143",
+ "cli-cursor@^2.1.0": "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5",
+ "cli-table@^0.3.1": "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23",
+ "cli-width@^2.0.0": "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639",
+ "clone-buffer@^1.0.0": "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58",
+ "clone-stats@^0.0.1": "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1",
+ "clone-stats@^1.0.0": "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680",
+ "clone@^1.0.0": "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e",
+ "clone@^2.1.1": "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f",
+ "cloneable-readable@^1.0.0": "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec",
+ "code-point-at@^1.0.0": "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77",
+ "collection-visit@^1.0.0": "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0",
+ "color-convert@^1.9.0": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8",
+ "color-name@1.1.3": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25",
+ "colors@1.0.3": "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b",
+ "combined-stream@^1.0.6": "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f",
+ "combined-stream@~1.0.6": "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f",
+ "commander@^2.8.1": "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422",
+ "commondir@^1.0.1": "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b",
+ "component-emitter@^1.2.1": "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0",
+ "concat-map@0.0.1": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "copy-descriptor@^0.1.0": "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d",
+ "core-util-is@1.0.2": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7",
+ "core-util-is@~1.0.0": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7",
+ "cross-spawn@^6.0.5": "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4",
+ "css-select@~1.2.0": "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858",
+ "css-what@2.1": "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2",
+ "dargs@^6.0.0": "https://registry.yarnpkg.com/dargs/-/dargs-6.1.0.tgz#1f3b9b56393ecf8caa7cbfd6c31496ffcfb9b272",
+ "dashdash@^1.12.0": "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0",
+ "dateformat@^3.0.3": "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae",
+ "debug@^2.2.0": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f",
+ "debug@^2.3.3": "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f",
+ "debug@^3.1.0": "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b",
+ "debug@^4.1.0": "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791",
+ "decode-uri-component@^0.2.0": "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545",
+ "decompress-response@^3.2.0": "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3",
+ "deep-extend@^0.6.0": "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac",
+ "define-property@^0.2.5": "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116",
+ "define-property@^1.0.0": "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6",
+ "define-property@^2.0.2": "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d",
+ "delayed-stream@~1.0.0": "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619",
+ "denodeify@^1.2.1": "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631",
+ "detect-conflict@^1.0.0": "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e",
+ "didyoumean@^1.2.1": "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff",
+ "diff@^3.5.0": "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12",
+ "dir-glob@2.0.0": "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034",
+ "dom-serializer@0": "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb",
+ "dom-serializer@~0.1.1": "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0",
+ "domelementtype@1": "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f",
+ "domelementtype@^1.3.0": "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f",
+ "domelementtype@^1.3.1": "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f",
+ "domelementtype@^2.0.1": "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d",
+ "domhandler@^2.3.0": "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803",
+ "domutils@1.5.1": "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf",
+ "domutils@^1.5.1": "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a",
+ "duplexer3@^0.1.4": "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2",
+ "ecc-jsbn@~0.1.1": "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9",
+ "editions@^2.1.3": "https://registry.yarnpkg.com/editions/-/editions-2.2.0.tgz#dacd0c2a9441ebef592bba316a6264febb337f35",
+ "ejs@^2.5.9": "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228",
+ "entities@^1.1.1": "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56",
+ "entities@^2.0.0": "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4",
+ "entities@~1.1.1": "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56",
+ "errlop@^1.1.2": "https://registry.yarnpkg.com/errlop/-/errlop-1.1.2.tgz#a99a48f37aa264d614e342ffdbbaa49eec9220e0",
+ "error-ex@^1.3.1": "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf",
+ "error@^7.0.2": "https://registry.yarnpkg.com/error/-/error-7.2.0.tgz#80c989885635b41df9309d145834a4f125ae2245",
+ "escape-string-regexp@^1.0.2": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
+ "escape-string-regexp@^1.0.5": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
+ "expand-brackets@^2.1.4": "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622",
+ "extend-shallow@^2.0.1": "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f",
+ "extend-shallow@^3.0.0": "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8",
+ "extend-shallow@^3.0.2": "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8",
+ "extend@~3.0.2": "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa",
+ "external-editor@^3.0.3": "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495",
+ "extglob@^2.0.4": "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543",
+ "extsprintf@1.3.0": "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05",
+ "extsprintf@^1.2.0": "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f",
+ "fast-deep-equal@^2.0.1": "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49",
+ "fast-glob@^2.0.2": "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d",
+ "fast-json-stable-stringify@^2.0.0": "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2",
+ "fast-plist@^0.1.2": "https://registry.yarnpkg.com/fast-plist/-/fast-plist-0.1.2.tgz#a45aff345196006d406ca6cdcd05f69051ef35b8",
+ "fd-slicer@~1.1.0": "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e",
+ "figures@^2.0.0": "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962",
+ "fill-range@^4.0.0": "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7",
+ "find-up@^3.0.0": "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73",
+ "first-chunk-stream@^2.0.0": "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70",
+ "for-in@^1.0.2": "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80",
+ "forever-agent@~0.6.1": "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91",
+ "form-data@~2.3.2": "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6",
+ "fragment-cache@^0.2.1": "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19",
+ "fs.realpath@^1.0.0": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f",
+ "generator-code@^1.2.6": "https://registry.yarnpkg.com/generator-code/-/generator-code-1.2.6.tgz#ffa5399a1d5f43ce1c259e72067292c86c37ab85",
+ "get-stdin@^4.0.1": "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe",
+ "get-stream@^3.0.0": "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14",
+ "get-value@^2.0.3": "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28",
+ "get-value@^2.0.6": "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28",
+ "getpass@^0.1.1": "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa",
+ "gh-got@^6.0.0": "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0",
+ "github-username@^4.0.0": "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417",
+ "glob-parent@^3.1.0": "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae",
+ "glob-to-regexp@^0.3.0": "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab",
+ "glob@^7.0.0": "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255",
+ "glob@^7.0.3": "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255",
+ "glob@^7.0.6": "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255",
+ "glob@^7.1.2": "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255",
+ "glob@^7.1.3": "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255",
+ "globby@^8.0.1": "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d",
+ "got@^7.0.0": "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a",
+ "graceful-fs@^4.1.2": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02",
+ "grouped-queue@^0.3.3": "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c",
+ "har-schema@^2.0.0": "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92",
+ "har-validator@~5.1.0": "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080",
+ "has-ansi@^2.0.0": "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91",
+ "has-flag@^3.0.0": "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd",
+ "has-symbol-support-x@^1.4.1": "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455",
+ "has-to-string-tag-x@^1.2.0": "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d",
+ "has-value@^0.3.1": "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f",
+ "has-value@^1.0.0": "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177",
+ "has-values@^0.1.4": "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771",
+ "has-values@^1.0.0": "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f",
+ "hosted-git-info@^2.1.4": "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546",
+ "htmlparser2@^3.9.1": "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f",
+ "http-signature@~1.2.0": "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1",
+ "iconv-lite@^0.4.24": "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b",
+ "ignore@^3.3.5": "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043",
+ "inflight@^1.0.4": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9",
+ "inherits@2": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "inherits@^2.0.1": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "inherits@^2.0.3": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "inherits@~2.0.3": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "inquirer@^6.0.0": "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca",
+ "interpret@^1.0.0": "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296",
+ "is-accessor-descriptor@^0.1.6": "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6",
+ "is-accessor-descriptor@^1.0.0": "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656",
+ "is-arrayish@^0.2.1": "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d",
+ "is-buffer@^1.1.5": "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be",
+ "is-data-descriptor@^0.1.4": "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56",
+ "is-data-descriptor@^1.0.0": "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7",
+ "is-descriptor@^0.1.0": "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca",
+ "is-descriptor@^1.0.0": "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec",
+ "is-descriptor@^1.0.2": "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec",
+ "is-extendable@^0.1.0": "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89",
+ "is-extendable@^0.1.1": "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89",
+ "is-extendable@^1.0.1": "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4",
+ "is-extglob@^2.1.0": "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2",
+ "is-extglob@^2.1.1": "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2",
+ "is-fullwidth-code-point@^1.0.0": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb",
+ "is-fullwidth-code-point@^2.0.0": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f",
+ "is-glob@^3.1.0": "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a",
+ "is-glob@^4.0.0": "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc",
+ "is-number@^3.0.0": "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195",
+ "is-object@^1.0.1": "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470",
+ "is-plain-obj@^1.1.0": "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e",
+ "is-plain-object@^2.0.3": "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677",
+ "is-plain-object@^2.0.4": "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677",
+ "is-promise@^2.1.0": "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa",
+ "is-retry-allowed@^1.0.0": "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4",
+ "is-scoped@^1.0.0": "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30",
+ "is-stream@^1.0.0": "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44",
+ "is-typedarray@~1.0.0": "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a",
+ "is-utf8@^0.2.0": "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72",
+ "is-windows@^1.0.2": "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d",
+ "isarray@1.0.0": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11",
+ "isarray@~1.0.0": "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11",
+ "isbinaryfile@^3.0.2": "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80",
+ "isexe@^2.0.0": "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10",
+ "isobject@^2.0.0": "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89",
+ "isobject@^3.0.0": "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df",
+ "isobject@^3.0.1": "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df",
+ "isstream@~0.1.2": "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a",
+ "istextorbinary@^2.2.1": "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.5.1.tgz#14a33824cf6b9d5d7743eac1be2bd2c310d0ccbd",
+ "isurl@^1.0.0-alpha5": "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67",
+ "jsbn@~0.1.0": "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513",
+ "json-parse-better-errors@^1.0.1": "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9",
+ "json-schema-traverse@^0.4.1": "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660",
+ "json-schema@0.2.3": "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13",
+ "json-stringify-safe@~5.0.1": "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb",
+ "jsprim@^1.2.2": "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2",
+ "kind-of@^3.0.2": "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64",
+ "kind-of@^3.0.3": "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64",
+ "kind-of@^3.2.0": "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64",
+ "kind-of@^4.0.0": "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57",
+ "kind-of@^5.0.0": "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d",
+ "kind-of@^6.0.0": "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051",
+ "kind-of@^6.0.2": "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051",
+ "linkify-it@^2.0.0": "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf",
+ "load-json-file@^4.0.0": "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b",
+ "locate-path@^3.0.0": "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e",
+ "lodash@^4.15.0": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
+ "lodash@^4.17.10": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
+ "lodash@^4.17.12": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
+ "lodash@^4.17.14": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
+ "lodash@^4.17.2": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548",
+ "log-symbols@^2.2.0": "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a",
+ "lowercase-keys@^1.0.0": "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f",
+ "make-dir@^1.1.0": "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c",
+ "map-cache@^0.2.2": "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf",
+ "map-visit@^1.0.0": "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f",
+ "markdown-it@^8.3.1": "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54",
+ "mdurl@^1.0.1": "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e",
+ "mem-fs-editor@^5.0.0": "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-5.1.0.tgz#51972241640be8567680a04f7adaffe5fc603667",
+ "mem-fs@^1.1.0": "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc",
+ "merge2@^1.2.3": "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81",
+ "micromatch@^3.1.10": "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23",
+ "mime-db@1.40.0": "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32",
+ "mime-types@^2.1.12": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81",
+ "mime-types@~2.1.19": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81",
+ "mime@^1.3.4": "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1",
+ "mimic-fn@^1.0.0": "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022",
+ "mimic-response@^1.0.0": "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b",
+ "minimatch@^3.0.0": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083",
+ "minimatch@^3.0.3": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083",
+ "minimatch@^3.0.4": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083",
+ "minimist@0.0.8": "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d",
+ "minimist@^1.1.0": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284",
+ "minimist@^1.2.0": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284",
+ "mixin-deep@^1.2.0": "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566",
+ "mkdirp@^0.5.0": "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903",
+ "ms@2.0.0": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8",
+ "ms@^2.1.1": "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009",
+ "multimatch@^2.0.0": "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b",
+ "mute-stream@0.0.7": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab",
+ "mute-stream@~0.0.4": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d",
+ "nanomatch@^1.2.9": "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119",
+ "nice-try@^1.0.4": "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366",
+ "normalize-package-data@^2.3.2": "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8",
+ "nth-check@~1.0.1": "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c",
+ "number-is-nan@^1.0.0": "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d",
+ "oauth-sign@~0.9.0": "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455",
+ "object-copy@^0.1.0": "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c",
+ "object-visit@^1.0.0": "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb",
+ "object.pick@^1.3.0": "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747",
+ "once@^1.3.0": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1",
+ "onetime@^2.0.0": "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4",
+ "os-homedir@^1.0.0": "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3",
+ "os-tmpdir@^1.0.0": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274",
+ "os-tmpdir@~1.0.1": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274",
+ "os-tmpdir@~1.0.2": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274",
+ "os@0.1.1": "https://registry.yarnpkg.com/os/-/os-0.1.1.tgz#208845e89e193ad4d971474b93947736a56d13f3",
+ "osenv@^0.1.3": "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410",
+ "p-cancelable@^0.3.0": "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa",
+ "p-finally@^1.0.0": "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae",
+ "p-limit@^2.0.0": "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537",
+ "p-locate@^3.0.0": "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4",
+ "p-timeout@^1.1.1": "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386",
+ "p-try@^2.0.0": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6",
+ "p-try@^2.1.0": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6",
+ "pad-component@0.0.1": "https://registry.yarnpkg.com/pad-component/-/pad-component-0.0.1.tgz#ad1f22ce1bf0fdc0d6ddd908af17f351a404b8ac",
+ "parse-json@^4.0.0": "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0",
+ "parse-semver@^1.1.1": "https://registry.yarnpkg.com/parse-semver/-/parse-semver-1.1.1.tgz#9a4afd6df063dc4826f93fba4a99cf223f666cb8",
+ "parse5@^3.0.1": "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c",
+ "pascalcase@^0.1.1": "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14",
+ "path-dirname@^1.0.0": "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0",
+ "path-exists@^3.0.0": "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515",
+ "path-is-absolute@^1.0.0": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f",
+ "path-key@^2.0.1": "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40",
+ "path-parse@^1.0.6": "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c",
+ "path-type@^3.0.0": "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f",
+ "pend@~1.2.0": "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50",
+ "performance-now@^2.1.0": "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b",
+ "pify@^2.3.0": "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c",
+ "pify@^3.0.0": "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176",
+ "pify@^4.0.1": "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231",
+ "pinkie-promise@^2.0.0": "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa",
+ "pinkie@^2.0.0": "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870",
+ "posix-character-classes@^0.1.0": "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab",
+ "prepend-http@^1.0.1": "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc",
+ "pretty-bytes@^5.1.0": "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2",
+ "process-nextick-args@^2.0.0": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2",
+ "process-nextick-args@~2.0.0": "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2",
+ "psl@^1.1.24": "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2",
+ "punycode@^1.4.1": "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e",
+ "punycode@^2.1.0": "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec",
+ "qs@~6.5.2": "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36",
+ "read-chunk@^3.0.0": "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca",
+ "read-pkg-up@^4.0.0": "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978",
+ "read-pkg@^3.0.0": "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389",
+ "read@^1.0.7": "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4",
+ "readable-stream@2 || 3": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc",
+ "readable-stream@^2.0.2": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf",
+ "readable-stream@^2.3.5": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf",
+ "readable-stream@^3.1.1": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc",
+ "readable-stream@~2.3.6": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf",
+ "rechoir@^0.6.2": "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384",
+ "regex-not@^1.0.0": "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c",
+ "regex-not@^1.0.2": "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c",
+ "remove-trailing-separator@^1.0.1": "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef",
+ "repeat-element@^1.1.2": "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce",
+ "repeat-string@^1.6.1": "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637",
+ "replace-ext@0.0.1": "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924",
+ "replace-ext@^1.0.0": "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb",
+ "request@^2.88.0": "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef",
+ "resolve-url@^0.2.1": "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a",
+ "resolve@^1.1.6": "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6",
+ "resolve@^1.10.0": "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6",
+ "restore-cursor@^2.0.0": "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf",
+ "ret@~0.1.10": "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc",
+ "rimraf@^2.2.8": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec",
+ "rimraf@^2.6.2": "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec",
+ "run-async@^2.0.0": "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0",
+ "run-async@^2.2.0": "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0",
+ "rxjs@^6.4.0": "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a",
+ "safe-buffer@^5.0.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519",
+ "safe-buffer@^5.1.2": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519",
+ "safe-buffer@~5.1.0": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d",
+ "safe-buffer@~5.1.1": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d",
+ "safe-buffer@~5.2.0": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519",
+ "safe-regex@^1.1.0": "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e",
+ "safer-buffer@>= 2.1.2 < 3": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a",
+ "safer-buffer@^2.0.2": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a",
+ "safer-buffer@^2.1.0": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a",
+ "safer-buffer@~2.1.0": "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a",
+ "sanitize-filename@^1.6.1": "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378",
+ "sax@^1.2.4": "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9",
+ "scoped-regex@^1.0.0": "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8",
+ "semver@2 || 3 || 4 || 5": "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7",
+ "semver@^5.1.0": "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7",
+ "semver@^5.5.0": "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7",
+ "semver@^6.3.0": "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d",
+ "set-value@^2.0.0": "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b",
+ "set-value@^2.0.1": "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b",
+ "shebang-command@^1.2.0": "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea",
+ "shebang-regex@^1.0.0": "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3",
+ "shelljs@^0.8.0": "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097",
+ "signal-exit@^3.0.2": "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d",
+ "slash@^1.0.0": "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55",
+ "snapdragon-node@^2.0.1": "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b",
+ "snapdragon-util@^3.0.1": "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2",
+ "snapdragon@^0.8.1": "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d",
+ "source-map-resolve@^0.5.0": "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259",
+ "source-map-url@^0.4.0": "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3",
+ "source-map@^0.5.6": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
+ "spdx-correct@^3.0.0": "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4",
+ "spdx-exceptions@^2.1.0": "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977",
+ "spdx-expression-parse@^3.0.0": "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0",
+ "spdx-license-ids@^3.0.0": "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654",
+ "split-string@^3.0.1": "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2",
+ "split-string@^3.0.2": "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2",
+ "sprintf-js@~1.0.2": "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c",
+ "sshpk@^1.7.0": "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877",
+ "static-extend@^0.1.1": "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6",
+ "string-template@~0.2.1": "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add",
+ "string-width@^1.0.1": "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3",
+ "string-width@^2.0.0": "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e",
+ "string-width@^2.1.0": "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e",
+ "string_decoder@^1.1.1": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e",
+ "string_decoder@~1.1.1": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8",
+ "strip-ansi@^3.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf",
+ "strip-ansi@^3.0.1": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf",
+ "strip-ansi@^4.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f",
+ "strip-ansi@^5.1.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae",
+ "strip-bom-stream@^2.0.0": "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca",
+ "strip-bom@^2.0.0": "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e",
+ "strip-bom@^3.0.0": "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3",
+ "supports-color@^2.0.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7",
+ "supports-color@^5.3.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f",
+ "taketalk@^1.0.0": "https://registry.yarnpkg.com/taketalk/-/taketalk-1.0.0.tgz#b4d4f0deed206ae7df775b129ea2ca6de52f26dd",
+ "text-table@^0.2.0": "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4",
+ "textextensions@^2.4.0": "https://registry.yarnpkg.com/textextensions/-/textextensions-2.5.0.tgz#e21d3831dafa37513dd80666dff541414e314293",
+ "through2@^2.0.0": "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd",
+ "through2@^3.0.0": "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a",
+ "through@^2.3.6": "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5",
+ "timed-out@^4.0.0": "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f",
+ "tmp@0.0.29": "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0",
+ "tmp@^0.0.33": "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9",
+ "to-object-path@^0.3.0": "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af",
+ "to-regex-range@^2.1.0": "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38",
+ "to-regex@^3.0.1": "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce",
+ "to-regex@^3.0.2": "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce",
+ "tough-cookie@~2.4.3": "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781",
+ "truncate-utf8-bytes@^1.0.0": "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b",
+ "tslib@^1.9.0": "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a",
+ "tunnel-agent@^0.6.0": "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd",
+ "tunnel@0.0.4": "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.4.tgz#2d3785a158c174c9a16dc2c046ec5fc5f1742213",
+ "tweetnacl@^0.14.3": "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64",
+ "tweetnacl@~0.14.0": "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64",
+ "typed-rest-client@1.2.0": "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.2.0.tgz#723085d203f38d7d147271e5ed3a75488eb44a02",
+ "uc.micro@^1.0.1": "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac",
+ "uc.micro@^1.0.5": "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac",
+ "underscore@1.8.3": "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
+ "union-value@^1.0.0": "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847",
+ "unset-value@^1.0.0": "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559",
+ "untildify@^3.0.3": "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9",
+ "uri-js@^4.2.2": "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0",
+ "urix@^0.1.0": "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72",
+ "url-join@^1.1.0": "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78",
+ "url-parse-lax@^1.0.0": "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73",
+ "url-to-options@^1.0.1": "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9",
+ "use@^3.1.0": "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f",
+ "utf8-byte-length@^1.0.1": "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61",
+ "util-deprecate@^1.0.1": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf",
+ "util-deprecate@~1.0.1": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf",
+ "uuid@^3.3.2": "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866",
+ "validate-npm-package-license@^3.0.1": "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a",
+ "verror@1.10.0": "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400",
+ "vinyl-file@^2.0.0": "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a",
+ "vinyl@^1.1.0": "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884",
+ "vinyl@^2.0.1": "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86",
+ "vsce@^1.66.0": "https://registry.yarnpkg.com/vsce/-/vsce-1.66.0.tgz#8cf1d64a4825d5d0523ea5efd0bf41e2c6829565",
+ "which@^1.2.9": "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a",
+ "with-open-file@^0.1.6": "https://registry.yarnpkg.com/with-open-file/-/with-open-file-0.1.6.tgz#0bc178ecab75f6baac8ae11c85e07445d690ea50",
+ "wrap-ansi@^2.0.0": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85",
+ "wrappy@1": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
+ "xtend@~4.0.1": "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54",
+ "yauzl@^2.3.1": "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9",
+ "yazl@^2.2.2": "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35",
+ "yeoman-environment@^2.0.5": "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.4.0.tgz#4829445dc1306b02d9f5f7027cd224bf77a8224d",
+ "yeoman-generator@^3.2.0": "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-3.2.0.tgz#02077d2d7ff28fedc1ed7dad7f9967fd7c3604cc",
+ "yosay@^2.0.2": "https://registry.yarnpkg.com/yosay/-/yosay-2.0.2.tgz#a7017e764cd88d64a1ae64812201de5b157adf6d"
+ },
+ "files": [],
+ "artifacts": {}
+}
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/CHANGELOG.md b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/CHANGELOG.md
new file mode 100644
index 0000000..6391ab6
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/CHANGELOG.md
@@ -0,0 +1,49 @@
+# Change Log
+All notable changes will be documented in this file.
+`readdir-enhanced` adheres to [Semantic Versioning](http://semver.org/).
+
+
+## [v2.2.0](https://github.com/BigstickCarpet/readdir-enhanced/tree/v2.2.0) (2018-01-09)
+
+- Refactored the codebase to use ES6 syntax (Node v4.x compatible)
+
+- You can now provide [your own implementation](https://github.com/BigstickCarpet/readdir-enhanced#custom-fs-methods) for the [filesystem module](https://nodejs.org/api/fs.html) that's used by `readdir-enhanced`. Just set the `fs` option to your implementation. Thanks to [@mrmlnc](https://github.com/mrmlnc) for the idea and [the PR](https://github.com/BigstickCarpet/readdir-enhanced/pull/10)!
+
+- [Better error handling](https://github.com/BigstickCarpet/readdir-enhanced/commit/0d330b68524bafbdeae11566a3e8af1bc3f184bf), especially around user-specified logic, such as `options.deep`, `options.filter`, and `options.fs`
+
+[Full Changelog](https://github.com/BigstickCarpet/readdir-enhanced/compare/v2.1.0...v2.2.0)
+
+
+## [v2.1.0](https://github.com/BigstickCarpet/readdir-enhanced/tree/v2.1.0) (2017-12-01)
+
+- The `fs.Stats` objects now include a `depth` property, which indicates the number of subdirectories beneath the base path. Thanks to [@mrmlnc](https://github.com/mrmlnc) for [the PR](https://github.com/BigstickCarpet/readdir-enhanced/pull/8)!
+
+[Full Changelog](https://github.com/BigstickCarpet/readdir-enhanced/compare/v2.0.0...v2.1.0)
+
+
+## [v2.0.0](https://github.com/BigstickCarpet/readdir-enhanced/tree/v2.0.0) (2017-11-15)
+
+- Dropped support for Node v0.x, which is no longer actively maintained. Please upgrade to Node 4 or newer.
+
+[Full Changelog](https://github.com/BigstickCarpet/readdir-enhanced/compare/v1.5.0...v2.0.0)
+
+
+## [v1.5.0](https://github.com/BigstickCarpet/readdir-enhanced/tree/v1.5.0) (2017-04-10)
+
+The [`deep` option](README.md#deep) can now be set to a [regular expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp), a [glob pattern](https://github.com/isaacs/node-glob#glob-primer), or a function, which allows you to customize which subdirectories get crawled. Of course, you can also still still set the `deep` option to `true` to crawl _all_ subdirectories, or a number if you just want to limit the recursion depth.
+
+[Full Changelog](https://github.com/BigstickCarpet/readdir-enhanced/compare/v1.4.0...v1.5.0)
+
+
+## [v1.4.0](https://github.com/BigstickCarpet/readdir-enhanced/tree/v1.4.0) (2016-08-26)
+
+The [`filter` option](README.md#filter) can now be set to a regular expression or a glob pattern string, which simplifies filtering based on file names. Of course, you can still set the `filter` option to a function if you need to perform more advanced filtering based on the [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) of each file.
+
+[Full Changelog](https://github.com/BigstickCarpet/readdir-enhanced/compare/v1.3.4...v1.4.0)
+
+
+## [v1.3.4](https://github.com/BigstickCarpet/readdir-enhanced/tree/v1.3.4) (2016-08-26)
+
+As of this release, `readdir-enhanced` is fully tested on all major Node versions (0.x, 4.x, 5.x, 6.x) on [linux](https://travis-ci.org/BigstickCarpet/readdir-enhanced) and [Windows](https://ci.appveyor.com/project/BigstickCarpet/readdir-enhanced/branch/master), with [nearly 100% code coverage](https://coveralls.io/github/BigstickCarpet/readdir-enhanced?branch=master). I do all of my local development and testing on MacOS, so that's covered too.
+
+[Full Changelog](https://github.com/BigstickCarpet/readdir-enhanced/compare/v1.0.1...v1.3.4)
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/LICENSE b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/LICENSE
new file mode 100644
index 0000000..9ff003f
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/LICENSE
@@ -0,0 +1,23 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 James Messinger
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+.
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/README.md b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/README.md
new file mode 100644
index 0000000..bcf9b26
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/README.md
@@ -0,0 +1,347 @@
+Enhanced `fs.readdir()`
+=======================
+
+> :warning: This is «fork» for original `readdir-enhanced` package but with some monkey fixes.
+
+[](https://travis-ci.org/BigstickCarpet/readdir-enhanced)
+[](https://ci.appveyor.com/project/BigstickCarpet/readdir-enhanced/branch/master)
+
+[](https://coveralls.io/github/BigstickCarpet/readdir-enhanced?branch=master)
+[](https://www.codacy.com/public/jamesmessinger/readdir-enhanced)
+[](http://inch-ci.org/github/BigstickCarpet/readdir-enhanced)
+[](https://david-dm.org/BigstickCarpet/readdir-enhanced)
+
+[](https://www.npmjs.com/package/readdir-enhanced)
+[](LICENSE)
+
+`readdir-enhanced` is a [backward-compatible](#backward-compatible) drop-in replacement for [`fs.readdir()`](https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback) and [`fs.readdirSync()`](https://nodejs.org/api/fs.html#fs_fs_readdirsync_path_options) with tons of extra features ([filtering](#filter), [recursion](#deep), [absolute paths](#basepath), [stats](#stats), and more) as well as additional APIs for Promises, Streams, and EventEmitters.
+
+
+Pick Your API
+-----------------
+`readdir-enhanced` has multiple APIs, so you can pick whichever one you prefer. There are three main APIs:
+
+- **Synchronous API**
+aliases: `readdir.sync`, `readdir.readdirSync`
+Blocks the thread until all directory contents are read, and then returns all the results.
+
+- **Async API**
+aliases: `readdir`, `readdir.async`, `readdir.readdirAsync`
+Reads the starting directory contents asynchronously and buffers all the results until all contents have been read. Supports callback or Promise syntax (see example below).
+
+- **Streaming API**
+aliases: `readdir.stream`, `readdir.readdirStream`
+The streaming API reads the starting directory asynchronously and returns the results in real-time as they are read. The results can be [piped](https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options) to other Node.js streams, or you can listen for specific events via the [EventEmitter](https://nodejs.org/api/events.html#events_class_eventemitter) interface. (see example below)
+
+```javascript
+var readdir = require('readdir-enhanced');
+var through2 = require('through2');
+
+// Synchronous API
+var files = readdir.sync('my/directory');
+
+// Callback API
+readdir.async('my/directory', function(err, files) { ... });
+
+// Promises API
+readdir.async('my/directory')
+ .then(function(files) { ... })
+ .catch(function(err) { ... });
+
+// EventEmitter API
+readdir.stream('my/directory')
+ .on('data', function(path) { ... })
+ .on('file', function(path) { ... })
+ .on('directory', function(path) { ... })
+ .on('symlink', function(path) { ... })
+ .on('error', function(err) { ... });
+
+// Streaming API
+var stream = readdir.stream('my/directory')
+ .pipe(through2.obj(function(data, enc, next) {
+ console.log(data);
+ this.push(data);
+ next();
+ });
+```
+
+
+
+Enhanced Features
+-----------------
+`readdir-enhanced` adds several features to the built-in `fs.readdir()` function. All of the enhanced features are opt-in, which makes `readdir-enhanced` [fully backward compatible by default](#backward-compatible). You can enable any of the features by passing-in an `options` argument as the second parameter.
+
+
+
+### Recursion
+By default, `readdir-enhanced` will only return the top-level contents of the starting directory. But you can set the `deep` option to recursively traverse the subdirectories and return their contents as well.
+
+#### Crawl ALL subdirectories
+
+The `deep` option can be set to `true` to traverse the entire directory structure.
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+readdir('my/directory', {deep: true}, function(err, files) {
+ console.log(files);
+ // => subdir1
+ // => subdir1/file.txt
+ // => subdir1/subdir2
+ // => subdir1/subdir2/file.txt
+ // => subdir1/subdir2/subdir3
+ // => subdir1/subdir2/subdir3/file.txt
+});
+```
+
+#### Crawl to a specific depth
+The `deep` option can be set to a number to only traverse that many levels deep. For example, calling `readdir('my/directory', {deep: 2})` will return `subdir1/file.txt` and `subdir1/subdir2/file.txt`, but it _won't_ return `subdir1/subdir2/subdir3/file.txt`.
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+readdir('my/directory', {deep: 2}, function(err, files) {
+ console.log(files);
+ // => subdir1
+ // => subdir1/file.txt
+ // => subdir1/subdir2
+ // => subdir1/subdir2/file.txt
+ // => subdir1/subdir2/subdir3
+});
+```
+
+#### Crawl subdirectories by name
+For simple use-cases, you can use a [regular expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) or a [glob pattern](https://github.com/isaacs/node-glob#glob-primer) to crawl only the directories whose path matches the pattern. The path is relative to the starting directory by default, but you can customize this via [`options.basePath`](#basepath).
+
+> **NOTE:** Glob patterns [_always_ use forward-slashes](https://github.com/isaacs/node-glob#windows), even on Windows. This _does not_ apply to regular expressions though. Regular expressions should use the appropraite path separator for the environment. Or, you can match both types of separators using `[\\/]`.
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+// Only crawl the "lib" and "bin" subdirectories
+// (notice that the "node_modules" subdirectory does NOT get crawled)
+readdir('my/directory', {deep: /lib|bin/}, function(err, files) {
+ console.log(files);
+ // => bin
+ // => bin/cli.js
+ // => lib
+ // => lib/index.js
+ // => node_modules
+ // => package.json
+});
+```
+
+#### Custom recursion logic
+For more advanced recursion, you can set the `deep` option to a function that accepts an [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object and returns a truthy value if the starting directory should be crawled.
+
+> **NOTE:** The [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that's passed to the function has additional `path` and `depth` properties. The `path` is relative to the starting directory by default, but you can customize this via [`options.basePath`](#basepath). The `depth` is the number of subdirectories beneath the base path (see [`options.deep`](#deep)).
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+// Crawl all subdirectories, except "node_modules"
+function ignoreNodeModules (stats) {
+ return stats.path.indexOf('node_modules') === -1;
+}
+
+readdir('my/directory', {deep: ignoreNodeModules}, function(err, files) {
+ console.log(files);
+ // => bin
+ // => bin/cli.js
+ // => lib
+ // => lib/index.js
+ // => node_modules
+ // => package.json
+});
+```
+
+
+
+### Filtering
+The `filter` option lets you limit the results based on any criteria you want.
+
+#### Filter by name
+For simple use-cases, you can use a [regular expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) or a [glob pattern](https://github.com/isaacs/node-glob#glob-primer) to filter items by their path. The path is relative to the starting directory by default, but you can customize this via [`options.basePath`](#basepath).
+
+> **NOTE:** Glob patterns [_always_ use forward-slashes](https://github.com/isaacs/node-glob#windows), even on Windows. This _does not_ apply to regular expressions though. Regular expressions should use the appropraite path separator for the environment. Or, you can match both types of separators using `[\\/]`.
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+// Find all .txt files
+readdir('my/directory', {filter: '*.txt'});
+
+// Find all package.json files
+readdir('my/directory', {filter: '**/package.json', deep: true});
+
+// Find everything with at least one number in the name
+readdir('my/directory', {filter: /\d+/});
+```
+
+#### Custom filtering logic
+For more advanced filtering, you can specify a filter function that accepts an [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object and returns a truthy value if the item should be included in the results.
+
+> **NOTE:** The [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) object that's passed to the filter function has additional `path` and `depth` properties. The `path` is relative to the starting directory by default, but you can customize this via [`options.basePath`](#basepath). The `depth` is the number of subdirectories beneath the base path (see [`options.deep`](#deep)).
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+// Only return file names containing an underscore
+function myFilter(stats) {
+ return stats.isFile() && stats.path.indexOf('_') >= 0;
+}
+
+readdir('my/directory', {filter: myFilter}, function(err, files) {
+ console.log(files);
+ // => __myFile.txt
+ // => my_other_file.txt
+ // => img_1.jpg
+ // => node_modules
+});
+```
+
+
+
+### Base Path
+By default all `readdir-enhanced` functions return paths that are relative to the starting directory. But you can use the `basePath` option to customize this. The `basePath` will be prepended to all of the returned paths. One common use-case for this is to set `basePath` to the absolute path of the starting directory, so that all of the returned paths will be absolute.
+
+```javascript
+var readdir = require('readdir-enhanced');
+var path = require('path');
+
+// Get absolute paths
+var absPath = path.resolve('my/dir');
+readdir('my/directory', {basePath: absPath}, function(err, files) {
+ console.log(files);
+ // => /absolute/path/to/my/directory/file1.txt
+ // => /absolute/path/to/my/directory/file2.txt
+ // => /absolute/path/to/my/directory/subdir
+});
+
+// Get paths relative to the working directory
+readdir('my/directory', {basePath: 'my/directory'}, function(err, files) {
+ console.log(files);
+ // => my/directory/file1.txt
+ // => my/directory/file2.txt
+ // => my/directory/subdir
+});
+```
+
+
+
+### Path Separator
+By default, `readdir-enhanced` uses the correct path separator for your OS (`\` on Windows, `/` on Linux & MacOS). But you can set the `sep` option to any separator character(s) that you want to use instead. This is usually used to ensure consistent path separators across different OSes.
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+// Always use Windows path separators
+readdir('my/directory', {sep: '\\', deep: true}, function(err, files) {
+ console.log(files);
+ // => subdir1
+ // => subdir1\file.txt
+ // => subdir1\subdir2
+ // => subdir1\subdir2\file.txt
+ // => subdir1\subdir2\subdir3
+ // => subdir1\subdir2\subdir3\file.txt
+});
+```
+
+
+### Custom FS methods
+By default, `readdir-enhanced` uses the default [Node.js FileSystem module](https://nodejs.org/api/fs.html) for methods like `fs.stat`, `fs.readdir` and `fs.lstat`. But in some situations, you can want to use your own FS methods (FTP, SSH, remote drive and etc). So you can provide your own implementation of FS methods by setting `options.fs` or specific methods, such as `options.fs.stat`.
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+function myCustomReaddirMethod(dir, callback) {
+ callback(null, ['__myFile.txt']);
+}
+
+var options = {
+ fs: {
+ readdir: myCustomReaddirMethod
+ }
+};
+
+readdir('my/directory', options, function(err, files) {
+ console.log(files);
+ // => __myFile.txt
+});
+```
+
+
+Get `fs.Stats` objects instead of strings
+------------------------
+All of the `readdir-enhanced` functions listed above return an array of strings (paths). But in some situations, the path isn't enough information. So, `readdir-enhanced` provides alternative versions of each function, which return an array of [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) objects instead of strings. The `fs.Stats` object contains all sorts of useful information, such as the size, the creation date/time, and helper methods such as `isFile()`, `isDirectory()`, `isSymbolicLink()`, etc.
+
+> **NOTE:** The [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) objects that are returned also have additional `path` and `depth` properties. The `path` is relative to the starting directory by default, but you can customize this via [`options.basePath`](#basepath). The `depth` is the number of subdirectories beneath the base path (see [`options.deep`](#deep)).
+
+To get `fs.Stats` objects instead of strings, just add the word "Stat" to the function name. As with the normal functions, each one is aliased (e.g. `readdir.async.stat` is the same as `readdir.readdirAsyncStat`), so you can use whichever naming style you prefer.
+
+```javascript
+var readdir = require('readdir-enhanced');
+
+// Synchronous API
+var stats = readdir.sync.stat('my/directory');
+var stats = readdir.readdirSyncStat('my/directory');
+
+// Async API
+readdir.async.stat('my/directory', function(err, stats) { ... });
+readdir.readdirAsyncStat('my/directory', function(err, stats) { ... });
+
+// Streaming API
+readdir.stream.stat('my/directory')
+ .on('data', function(stat) { ... })
+ .on('file', function(stat) { ... })
+ .on('directory', function(stat) { ... })
+ .on('symlink', function(stat) { ... });
+
+readdir.readdirStreamStat('my/directory')
+ .on('data', function(stat) { ... })
+ .on('file', function(stat) { ... })
+ .on('directory', function(stat) { ... })
+ .on('symlink', function(stat) { ... });
+
+```
+
+
+Backward Compatible
+--------------------
+`readdir-enhanced` is fully backward-compatible with Node.js' built-in `fs.readdir()` and `fs.readdirSync()` functions, so you can use it as a drop-in replacement in existing projects without affecting existing functionality, while still being able to use the enhanced features as needed.
+
+```javascript
+var readdir = require('readdir-enhanced');
+var readdirSync = readdir.sync;
+
+// Use it just like Node's built-in fs.readdir function
+readdir('my/directory', function(err, files) { ... });
+
+// Use it just like Node's built-in fs.readdirSync function
+var files = readdirSync('my/directory');
+```
+
+
+
+Contributing
+--------------------------
+I welcome any contributions, enhancements, and bug-fixes. [File an issue](https://github.com/BigstickCarpet/readdir-enhanced/issues) on GitHub and [submit a pull request](https://github.com/BigstickCarpet/readdir-enhanced/pulls).
+
+#### Building
+To build the project locally on your computer:
+
+1. __Clone this repo__
+`git clone https://github.com/bigstickcarpet/readdir-enhanced.git`
+
+2. __Install dependencies__
+`npm install`
+
+3. __Run the tests__
+`npm test`
+
+
+
+License
+--------------------------
+`readdir-enhanced` is 100% free and open-source, under the [MIT license](LICENSE). Use it however you want.
+
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/async/for-each.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/async/for-each.js
new file mode 100644
index 0000000..1ac9b2f
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/async/for-each.js
@@ -0,0 +1,29 @@
+'use strict';
+
+module.exports = asyncForEach;
+
+/**
+ * Simultaneously processes all items in the given array.
+ *
+ * @param {array} array - The array to iterate over
+ * @param {function} iterator - The function to call for each item in the array
+ * @param {function} done - The function to call when all iterators have completed
+ */
+function asyncForEach (array, iterator, done) {
+ if (array.length === 0) {
+ // NOTE: Normally a bad idea to mix sync and async, but it's safe here because
+ // of the way that this method is currently used by DirectoryReader.
+ done();
+ return;
+ }
+
+ // Simultaneously process all items in the array.
+ let pending = array.length;
+ array.forEach(item => {
+ iterator(item, () => {
+ if (--pending === 0) {
+ done();
+ }
+ });
+ });
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/async/index.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/async/index.js
new file mode 100644
index 0000000..677e0b6
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/async/index.js
@@ -0,0 +1,48 @@
+'use strict';
+
+module.exports = readdirAsync;
+
+const maybe = require('call-me-maybe');
+const DirectoryReader = require('../directory-reader');
+
+let asyncFacade = {
+ fs: require('fs'),
+ forEach: require('./for-each'),
+ async: true
+};
+
+/**
+ * Returns the buffered output from an asynchronous {@link DirectoryReader},
+ * via an error-first callback or a {@link Promise}.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @param {function} [callback]
+ * @param {object} internalOptions
+ */
+function readdirAsync (dir, options, callback, internalOptions) {
+ if (typeof options === 'function') {
+ callback = options;
+ options = undefined;
+ }
+
+ return maybe(callback, new Promise(((resolve, reject) => {
+ let results = [];
+
+ internalOptions.facade = asyncFacade;
+
+ let reader = new DirectoryReader(dir, options, internalOptions);
+ let stream = reader.stream;
+
+ stream.on('error', err => {
+ reject(err);
+ stream.pause();
+ });
+ stream.on('data', result => {
+ results.push(result);
+ });
+ stream.on('end', () => {
+ resolve(results);
+ });
+ })));
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/call.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/call.js
new file mode 100644
index 0000000..07e3d84
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/call.js
@@ -0,0 +1,54 @@
+'use strict';
+
+let call = module.exports = {
+ safe: safeCall,
+ once: callOnce,
+};
+
+/**
+ * Calls a function with the given arguments, and ensures that the error-first callback is _always_
+ * invoked exactly once, even if the function throws an error.
+ *
+ * @param {function} fn - The function to invoke
+ * @param {...*} args - The arguments to pass to the function. The final argument must be a callback function.
+ */
+function safeCall (fn, args) {
+ // Get the function arguments as an array
+ args = Array.prototype.slice.call(arguments, 1);
+
+ // Replace the callback function with a wrapper that ensures it will only be called once
+ let callback = call.once(args.pop());
+ args.push(callback);
+
+ try {
+ fn.apply(null, args);
+ }
+ catch (err) {
+ callback(err);
+ }
+}
+
+/**
+ * Returns a wrapper function that ensures the given callback function is only called once.
+ * Subsequent calls are ignored, unless the first argument is an Error, in which case the
+ * error is thrown.
+ *
+ * @param {function} fn - The function that should only be called once
+ * @returns {function}
+ */
+function callOnce (fn) {
+ let fulfilled = false;
+
+ return function onceWrapper (err) {
+ if (!fulfilled) {
+ fulfilled = true;
+ return fn.apply(this, arguments);
+ }
+ else if (err) {
+ // The callback has already been called, but now an error has occurred
+ // (most likely inside the callback function). So re-throw the error,
+ // so it gets handled further up the call stack
+ throw err;
+ }
+ };
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/directory-reader.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/directory-reader.js
new file mode 100644
index 0000000..569d793
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/directory-reader.js
@@ -0,0 +1,380 @@
+'use strict';
+
+const Readable = require('stream').Readable;
+const EventEmitter = require('events').EventEmitter;
+const path = require('path');
+const normalizeOptions = require('./normalize-options');
+const stat = require('./stat');
+const call = require('./call');
+
+/**
+ * Asynchronously reads the contents of a directory and streams the results
+ * via a {@link stream.Readable}.
+ */
+class DirectoryReader {
+ /**
+ * @param {string} dir - The absolute or relative directory path to read
+ * @param {object} [options] - User-specified options, if any (see {@link normalizeOptions})
+ * @param {object} internalOptions - Internal options that aren't part of the public API
+ * @class
+ */
+ constructor (dir, options, internalOptions) {
+ this.options = options = normalizeOptions(options, internalOptions);
+
+ // Indicates whether we should keep reading
+ // This is set false if stream.Readable.push() returns false.
+ this.shouldRead = true;
+
+ // The directories to read
+ // (initialized with the top-level directory)
+ this.queue = [{
+ path: dir,
+ basePath: options.basePath,
+ posixBasePath: options.posixBasePath,
+ depth: 0
+ }];
+
+ // The number of directories that are currently being processed
+ this.pending = 0;
+
+ // The data that has been read, but not yet emitted
+ this.buffer = [];
+
+ this.stream = new Readable({ objectMode: true });
+ this.stream._read = () => {
+ // Start (or resume) reading
+ this.shouldRead = true;
+
+ // If we have data in the buffer, then send the next chunk
+ if (this.buffer.length > 0) {
+ this.pushFromBuffer();
+ }
+
+ // If we have directories queued, then start processing the next one
+ if (this.queue.length > 0) {
+ if (this.options.facade.sync) {
+ while (this.queue.length > 0) {
+ this.readNextDirectory();
+ }
+ }
+ else {
+ this.readNextDirectory();
+ }
+ }
+
+ this.checkForEOF();
+ };
+ }
+
+ /**
+ * Reads the next directory in the queue
+ */
+ readNextDirectory () {
+ let facade = this.options.facade;
+ let dir = this.queue.shift();
+ this.pending++;
+
+ // Read the directory listing
+ call.safe(facade.fs.readdir, dir.path, (err, items) => {
+ if (err) {
+ // fs.readdir threw an error
+ this.emit('error', err);
+ return this.finishedReadingDirectory();
+ }
+
+ try {
+ // Process each item in the directory (simultaneously, if async)
+ facade.forEach(
+ items,
+ this.processItem.bind(this, dir),
+ this.finishedReadingDirectory.bind(this, dir)
+ );
+ }
+ catch (err2) {
+ // facade.forEach threw an error
+ // (probably because fs.readdir returned an invalid result)
+ this.emit('error', err2);
+ this.finishedReadingDirectory();
+ }
+ });
+ }
+
+ /**
+ * This method is called after all items in a directory have been processed.
+ *
+ * NOTE: This does not necessarily mean that the reader is finished, since there may still
+ * be other directories queued or pending.
+ */
+ finishedReadingDirectory () {
+ this.pending--;
+
+ if (this.shouldRead) {
+ // If we have directories queued, then start processing the next one
+ if (this.queue.length > 0 && this.options.facade.async) {
+ this.readNextDirectory();
+ }
+
+ this.checkForEOF();
+ }
+ }
+
+ /**
+ * Determines whether the reader has finished processing all items in all directories.
+ * If so, then the "end" event is fired (via {@Readable#push})
+ */
+ checkForEOF () {
+ if (this.buffer.length === 0 && // The stuff we've already read
+ this.pending === 0 && // The stuff we're currently reading
+ this.queue.length === 0) { // The stuff we haven't read yet
+ // There's no more stuff!
+ this.stream.push(null);
+ }
+ }
+
+ /**
+ * Processes a single item in a directory.
+ *
+ * If the item is a directory, and `option.deep` is enabled, then the item will be added
+ * to the directory queue.
+ *
+ * If the item meets the filter criteria, then it will be emitted to the reader's stream.
+ *
+ * @param {object} dir - A directory object from the queue
+ * @param {string} item - The name of the item (name only, no path)
+ * @param {function} done - A callback function that is called after the item has been processed
+ */
+ processItem (dir, item, done) {
+ let stream = this.stream;
+ let options = this.options;
+
+ let itemPath = dir.basePath + item;
+ let posixPath = dir.posixBasePath + item;
+ let fullPath = path.join(dir.path, item);
+
+ // If `options.deep` is a number, and we've already recursed to the max depth,
+ // then there's no need to check fs.Stats to know if it's a directory.
+ // If `options.deep` is a function, then we'll need fs.Stats
+ let maxDepthReached = dir.depth >= options.recurseDepth;
+
+ // Do we need to call `fs.stat`?
+ let needStats =
+ !maxDepthReached || // we need the fs.Stats to know if it's a directory
+ options.stats || // the user wants fs.Stats objects returned
+ options.recurseFn || // we need fs.Stats for the recurse function
+ options.filterFn || // we need fs.Stats for the filter function
+ EventEmitter.listenerCount(stream, 'file') || // we need the fs.Stats to know if it's a file
+ EventEmitter.listenerCount(stream, 'directory') || // we need the fs.Stats to know if it's a directory
+ EventEmitter.listenerCount(stream, 'symlink'); // we need the fs.Stats to know if it's a symlink
+
+ // If we don't need stats, then exit early
+ if (!needStats) {
+ if (this.filter(itemPath, posixPath)) {
+ this.pushOrBuffer({ data: itemPath });
+ }
+ return done();
+ }
+
+ // Get the fs.Stats object for this path
+ stat(options.facade.fs, fullPath, (err, stats) => {
+ if (err) {
+ // fs.stat threw an error
+ this.emit('error', err);
+ return done();
+ }
+
+ try {
+ // Add the item's path to the fs.Stats object
+ // The base of this path, and its separators are determined by the options
+ // (i.e. options.basePath and options.sep)
+ stats.path = itemPath;
+
+ // Add depth of the path to the fs.Stats object for use this in the filter function
+ stats.depth = dir.depth;
+
+ if (this.shouldRecurse(stats, posixPath, maxDepthReached)) {
+ // Add this subdirectory to the queue
+ this.queue.push({
+ path: fullPath,
+ basePath: itemPath + options.sep,
+ posixBasePath: posixPath + '/',
+ depth: dir.depth + 1,
+ });
+ }
+
+ // Determine whether this item matches the filter criteria
+ if (this.filter(stats, posixPath)) {
+ this.pushOrBuffer({
+ data: options.stats ? stats : itemPath,
+ file: stats.isFile(),
+ directory: stats.isDirectory(),
+ symlink: stats.isSymbolicLink(),
+ });
+ }
+
+ done();
+ }
+ catch (err2) {
+ // An error occurred while processing the item
+ // (probably during a user-specified function, such as options.deep, options.filter, etc.)
+ this.emit('error', err2);
+ done();
+ }
+ });
+ }
+
+ /**
+ * Pushes the given chunk of data to the stream, or adds it to the buffer,
+ * depending on the state of the stream.
+ *
+ * @param {object} chunk
+ */
+ pushOrBuffer (chunk) {
+ // Add the chunk to the buffer
+ this.buffer.push(chunk);
+
+ // If we're still reading, then immediately emit the next chunk in the buffer
+ // (which may or may not be the chunk that we just added)
+ if (this.shouldRead) {
+ this.pushFromBuffer();
+ }
+ }
+
+ /**
+ * Immediately pushes the next chunk in the buffer to the reader's stream.
+ * The "data" event will always be fired (via {@link Readable#push}).
+ * In addition, the "file", "directory", and/or "symlink" events may be fired,
+ * depending on the type of properties of the chunk.
+ */
+ pushFromBuffer () {
+ let stream = this.stream;
+ let chunk = this.buffer.shift();
+
+ // Stream the data
+ try {
+ this.shouldRead = stream.push(chunk.data);
+ }
+ catch (err) {
+ this.emit('error', err);
+ }
+
+ // Also emit specific events, based on the type of chunk
+ chunk.file && this.emit('file', chunk.data);
+ chunk.symlink && this.emit('symlink', chunk.data);
+ chunk.directory && this.emit('directory', chunk.data);
+ }
+
+ /**
+ * Determines whether the given directory meets the user-specified recursion criteria.
+ * If the user didn't specify recursion criteria, then this function will default to true.
+ *
+ * @param {fs.Stats} stats - The directory's {@link fs.Stats} object
+ * @param {string} posixPath - The item's POSIX path (used for glob matching)
+ * @param {boolean} maxDepthReached - Whether we've already crawled the user-specified depth
+ * @returns {boolean}
+ */
+ shouldRecurse (stats, posixPath, maxDepthReached) {
+ let options = this.options;
+
+ if (maxDepthReached) {
+ // We've already crawled to the maximum depth. So no more recursion.
+ return false;
+ }
+ else if (!stats.isDirectory()) {
+ // It's not a directory. So don't try to crawl it.
+ return false;
+ }
+ else if (options.recurseGlob) {
+ // Glob patterns are always tested against the POSIX path, even on Windows
+ // https://github.com/isaacs/node-glob#windows
+ return options.recurseGlob.test(posixPath);
+ }
+ else if (options.recurseRegExp) {
+ // Regular expressions are tested against the normal path
+ // (based on the OS or options.sep)
+ return options.recurseRegExp.test(stats.path);
+ }
+ else if (options.recurseFn) {
+ try {
+ // Run the user-specified recursion criteria
+ return options.recurseFn.call(null, stats);
+ }
+ catch (err) {
+ // An error occurred in the user's code.
+ // In Sync and Async modes, this will return an error.
+ // In Streaming mode, we emit an "error" event, but continue processing
+ this.emit('error', err);
+ }
+ }
+ else {
+ // No recursion function was specified, and we're within the maximum depth.
+ // So crawl this directory.
+ return true;
+ }
+ }
+
+ /**
+ * Determines whether the given item meets the user-specified filter criteria.
+ * If the user didn't specify a filter, then this function will always return true.
+ *
+ * @param {string|fs.Stats} value - Either the item's path, or the item's {@link fs.Stats} object
+ * @param {string} posixPath - The item's POSIX path (used for glob matching)
+ * @returns {boolean}
+ */
+ filter (value, posixPath) {
+ let options = this.options;
+
+ if (options.filterGlob) {
+ // Glob patterns are always tested against the POSIX path, even on Windows
+ // https://github.com/isaacs/node-glob#windows
+ return options.filterGlob.test(posixPath);
+ }
+ else if (options.filterRegExp) {
+ // Regular expressions are tested against the normal path
+ // (based on the OS or options.sep)
+ return options.filterRegExp.test(value.path || value);
+ }
+ else if (options.filterFn) {
+ try {
+ // Run the user-specified filter function
+ return options.filterFn.call(null, value);
+ }
+ catch (err) {
+ // An error occurred in the user's code.
+ // In Sync and Async modes, this will return an error.
+ // In Streaming mode, we emit an "error" event, but continue processing
+ this.emit('error', err);
+ }
+ }
+ else {
+ // No filter was specified, so match everything
+ return true;
+ }
+ }
+
+ /**
+ * Emits an event. If one of the event listeners throws an error,
+ * then an "error" event is emitted.
+ *
+ * @param {string} eventName
+ * @param {*} data
+ */
+ emit (eventName, data) {
+ let stream = this.stream;
+
+ try {
+ stream.emit(eventName, data);
+ }
+ catch (err) {
+ if (eventName === 'error') {
+ // Don't recursively emit "error" events.
+ // If the first one fails, then just throw
+ throw err;
+ }
+ else {
+ stream.emit('error', err);
+ }
+ }
+ }
+}
+
+module.exports = DirectoryReader;
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/index.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/index.js
new file mode 100644
index 0000000..f77d2c6
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/index.js
@@ -0,0 +1,85 @@
+'use strict';
+
+const readdirSync = require('./sync');
+const readdirAsync = require('./async');
+const readdirStream = require('./stream');
+
+module.exports = exports = readdirAsyncPath;
+exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath;
+exports.readdirAsyncStat = exports.async.stat = readdirAsyncStat;
+exports.readdirStream = exports.stream = readdirStreamPath;
+exports.readdirStreamStat = exports.stream.stat = readdirStreamStat;
+exports.readdirSync = exports.sync = readdirSyncPath;
+exports.readdirSyncStat = exports.sync.stat = readdirSyncStat;
+
+/**
+ * Synchronous readdir that returns an array of string paths.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @returns {string[]}
+ */
+function readdirSyncPath (dir, options) {
+ return readdirSync(dir, options, {});
+}
+
+/**
+ * Synchronous readdir that returns results as an array of {@link fs.Stats} objects
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @returns {fs.Stats[]}
+ */
+function readdirSyncStat (dir, options) {
+ return readdirSync(dir, options, { stats: true });
+}
+
+/**
+ * Aynchronous readdir (accepts an error-first callback or returns a {@link Promise}).
+ * Results are an array of path strings.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @param {function} [callback]
+ * @returns {Promise}
+ */
+function readdirAsyncPath (dir, options, callback) {
+ return readdirAsync(dir, options, callback, {});
+}
+
+/**
+ * Aynchronous readdir (accepts an error-first callback or returns a {@link Promise}).
+ * Results are an array of {@link fs.Stats} objects.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @param {function} [callback]
+ * @returns {Promise}
+ */
+function readdirAsyncStat (dir, options, callback) {
+ return readdirAsync(dir, options, callback, { stats: true });
+}
+
+/**
+ * Aynchronous readdir that returns a {@link stream.Readable} (which is also an {@link EventEmitter}).
+ * All stream data events ("data", "file", "directory", "symlink") are passed a path string.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @returns {stream.Readable}
+ */
+function readdirStreamPath (dir, options) {
+ return readdirStream(dir, options, {});
+}
+
+/**
+ * Aynchronous readdir that returns a {@link stream.Readable} (which is also an {@link EventEmitter})
+ * All stream data events ("data", "file", "directory", "symlink") are passed an {@link fs.Stats} object.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @returns {stream.Readable}
+ */
+function readdirStreamStat (dir, options) {
+ return readdirStream(dir, options, { stats: true });
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/normalize-options.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/normalize-options.js
new file mode 100644
index 0000000..66f1158
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/normalize-options.js
@@ -0,0 +1,177 @@
+'use strict';
+
+const path = require('path');
+const globToRegExp = require('glob-to-regexp');
+
+module.exports = normalizeOptions;
+
+let isWindows = /^win/.test(process.platform);
+
+/**
+ * @typedef {Object} FSFacade
+ * @property {fs.readdir} readdir
+ * @property {fs.stat} stat
+ * @property {fs.lstat} lstat
+ */
+
+/**
+ * Validates and normalizes the options argument
+ *
+ * @param {object} [options] - User-specified options, if any
+ * @param {object} internalOptions - Internal options that aren't part of the public API
+ *
+ * @param {number|boolean|function} [options.deep]
+ * The number of directories to recursively traverse. Any falsy value or negative number will
+ * default to zero, so only the top-level contents will be returned. Set to `true` or `Infinity`
+ * to traverse all subdirectories. Or provide a function that accepts a {@link fs.Stats} object
+ * and returns a truthy value if the directory's contents should be crawled.
+ *
+ * @param {function|string|RegExp} [options.filter]
+ * A function that accepts a {@link fs.Stats} object and returns a truthy value if the data should
+ * be returned. Or a RegExp or glob string pattern, to filter by file name.
+ *
+ * @param {string} [options.sep]
+ * The path separator to use. By default, the OS-specific separator will be used, but this can be
+ * set to a specific value to ensure consistency across platforms.
+ *
+ * @param {string} [options.basePath]
+ * The base path to prepend to each result. If empty, then all results will be relative to `dir`.
+ *
+ * @param {FSFacade} [options.fs]
+ * Synchronous or asynchronous facades for Node.js File System module
+ *
+ * @param {object} [internalOptions.facade]
+ * Synchronous or asynchronous facades for various methods, including for the Node.js File System module
+ *
+ * @param {boolean} [internalOptions.emit]
+ * Indicates whether the reader should emit "file", "directory", and "symlink" events
+ *
+ * @param {boolean} [internalOptions.stats]
+ * Indicates whether the reader should emit {@link fs.Stats} objects instead of path strings
+ *
+ * @returns {object}
+ */
+function normalizeOptions (options, internalOptions) {
+ if (options === null || options === undefined) {
+ options = {};
+ }
+ else if (typeof options !== 'object') {
+ throw new TypeError('options must be an object');
+ }
+
+ let recurseDepth, recurseFn, recurseRegExp, recurseGlob, deep = options.deep;
+ if (deep === null || deep === undefined) {
+ recurseDepth = 0;
+ }
+ else if (typeof deep === 'boolean') {
+ recurseDepth = deep ? Infinity : 0;
+ }
+ else if (typeof deep === 'number') {
+ if (deep < 0 || isNaN(deep)) {
+ throw new Error('options.deep must be a positive number');
+ }
+ else if (Math.floor(deep) !== deep) {
+ throw new Error('options.deep must be an integer');
+ }
+ else {
+ recurseDepth = deep;
+ }
+ }
+ else if (typeof deep === 'function') {
+ recurseDepth = Infinity;
+ recurseFn = deep;
+ }
+ else if (deep instanceof RegExp) {
+ recurseDepth = Infinity;
+ recurseRegExp = deep;
+ }
+ else if (typeof deep === 'string' && deep.length > 0) {
+ recurseDepth = Infinity;
+ recurseGlob = globToRegExp(deep, { extended: true, globstar: true });
+ }
+ else {
+ throw new TypeError('options.deep must be a boolean, number, function, regular expression, or glob pattern');
+ }
+
+ let filterFn, filterRegExp, filterGlob, filter = options.filter;
+ if (filter !== null && filter !== undefined) {
+ if (typeof filter === 'function') {
+ filterFn = filter;
+ }
+ else if (filter instanceof RegExp) {
+ filterRegExp = filter;
+ }
+ else if (typeof filter === 'string' && filter.length > 0) {
+ filterGlob = globToRegExp(filter, { extended: true, globstar: true });
+ }
+ else {
+ throw new TypeError('options.filter must be a function, regular expression, or glob pattern');
+ }
+ }
+
+ let sep = options.sep;
+ if (sep === null || sep === undefined) {
+ sep = path.sep;
+ }
+ else if (typeof sep !== 'string') {
+ throw new TypeError('options.sep must be a string');
+ }
+
+ let basePath = options.basePath;
+ if (basePath === null || basePath === undefined) {
+ basePath = '';
+ }
+ else if (typeof basePath === 'string') {
+ // Append a path separator to the basePath, if necessary
+ if (basePath && basePath.substr(-1) !== sep) {
+ basePath += sep;
+ }
+ }
+ else {
+ throw new TypeError('options.basePath must be a string');
+ }
+
+ // Convert the basePath to POSIX (forward slashes)
+ // so that glob pattern matching works consistently, even on Windows
+ let posixBasePath = basePath;
+ if (posixBasePath && sep !== '/') {
+ posixBasePath = posixBasePath.replace(new RegExp('\\' + sep, 'g'), '/');
+
+ /* istanbul ignore if */
+ if (isWindows) {
+ // Convert Windows root paths (C:\) and UNCs (\\) to POSIX root paths
+ posixBasePath = posixBasePath.replace(/^([a-zA-Z]\:\/|\/\/)/, '/');
+ }
+ }
+
+ // Determine which facade methods to use
+ let facade;
+ if (options.fs === null || options.fs === undefined) {
+ // The user didn't provide their own facades, so use our internal ones
+ facade = internalOptions.facade;
+ }
+ else if (typeof options.fs === 'object') {
+ // Merge the internal facade methods with the user-provided `fs` facades
+ facade = Object.assign({}, internalOptions.facade);
+ facade.fs = Object.assign({}, internalOptions.facade.fs, options.fs);
+ }
+ else {
+ throw new TypeError('options.fs must be an object');
+ }
+
+ return {
+ recurseDepth,
+ recurseFn,
+ recurseRegExp,
+ recurseGlob,
+ filterFn,
+ filterRegExp,
+ filterGlob,
+ sep,
+ basePath,
+ posixBasePath,
+ facade,
+ emit: !!internalOptions.emit,
+ stats: !!internalOptions.stats,
+ };
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/stat.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/stat.js
new file mode 100644
index 0000000..e338693
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/stat.js
@@ -0,0 +1,74 @@
+'use strict';
+
+const call = require('./call');
+
+module.exports = stat;
+
+/**
+ * Retrieves the {@link fs.Stats} for the given path. If the path is a symbolic link,
+ * then the Stats of the symlink's target are returned instead. If the symlink is broken,
+ * then the Stats of the symlink itself are returned.
+ *
+ * @param {object} fs - Synchronous or Asynchronouse facade for the "fs" module
+ * @param {string} path - The path to return stats for
+ * @param {function} callback
+ */
+function stat (fs, path, callback) {
+ let isSymLink = false;
+
+ call.safe(fs.lstat, path, (err, lstats) => {
+ if (err) {
+ // fs.lstat threw an eror
+ return callback(err);
+ }
+
+ try {
+ isSymLink = lstats.isSymbolicLink();
+ }
+ catch (err2) {
+ // lstats.isSymbolicLink() threw an error
+ // (probably because fs.lstat returned an invalid result)
+ return callback(err2);
+ }
+
+ if (isSymLink) {
+ // Try to resolve the symlink
+ symlinkStat(fs, path, lstats, callback);
+ }
+ else {
+ // It's not a symlink, so return the stats as-is
+ callback(null, lstats);
+ }
+ });
+}
+
+/**
+ * Retrieves the {@link fs.Stats} for the target of the given symlink.
+ * If the symlink is broken, then the Stats of the symlink itself are returned.
+ *
+ * @param {object} fs - Synchronous or Asynchronouse facade for the "fs" module
+ * @param {string} path - The path of the symlink to return stats for
+ * @param {object} lstats - The stats of the symlink
+ * @param {function} callback
+ */
+function symlinkStat (fs, path, lstats, callback) {
+ call.safe(fs.stat, path, (err, stats) => {
+ if (err) {
+ // The symlink is broken, so return the stats for the link itself
+ return callback(null, lstats);
+ }
+
+ try {
+ // Return the stats for the resolved symlink target,
+ // and override the `isSymbolicLink` method to indicate that it's a symlink
+ stats.isSymbolicLink = () => true;
+ }
+ catch (err2) {
+ // Setting stats.isSymbolicLink threw an error
+ // (probably because fs.stat returned an invalid result)
+ return callback(err2);
+ }
+
+ callback(null, stats);
+ });
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/stream/index.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/stream/index.js
new file mode 100644
index 0000000..22a9609
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/stream/index.js
@@ -0,0 +1,25 @@
+'use strict';
+
+module.exports = readdirStream;
+
+const DirectoryReader = require('../directory-reader');
+
+let streamFacade = {
+ fs: require('fs'),
+ forEach: require('../async/for-each'),
+ async: true
+};
+
+/**
+ * Returns the {@link stream.Readable} of an asynchronous {@link DirectoryReader}.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @param {object} internalOptions
+ */
+function readdirStream (dir, options, internalOptions) {
+ internalOptions.facade = streamFacade;
+
+ let reader = new DirectoryReader(dir, options, internalOptions);
+ return reader.stream;
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/for-each.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/for-each.js
new file mode 100644
index 0000000..c5ec088
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/for-each.js
@@ -0,0 +1,22 @@
+'use strict';
+
+module.exports = syncForEach;
+
+/**
+ * A facade that allows {@link Array.forEach} to be called as though it were asynchronous.
+ *
+ * @param {array} array - The array to iterate over
+ * @param {function} iterator - The function to call for each item in the array
+ * @param {function} done - The function to call when all iterators have completed
+ */
+function syncForEach (array, iterator, done) {
+ array.forEach(item => {
+ iterator(item, () => {
+ // Note: No error-handling here because this is currently only ever called
+ // by DirectoryReader, which never passes an `error` parameter to the callback.
+ // Instead, DirectoryReader emits an "error" event if an error occurs.
+ });
+ });
+
+ done();
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/fs.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/fs.js
new file mode 100644
index 0000000..3aada77
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/fs.js
@@ -0,0 +1,64 @@
+'use strict';
+
+const fs = require('fs');
+const call = require('../call');
+
+/**
+ * A facade around {@link fs.readdirSync} that allows it to be called
+ * the same way as {@link fs.readdir}.
+ *
+ * @param {string} dir
+ * @param {function} callback
+ */
+exports.readdir = function (dir, callback) {
+ // Make sure the callback is only called once
+ callback = call.once(callback);
+
+ try {
+ let items = fs.readdirSync(dir);
+ callback(null, items);
+ }
+ catch (err) {
+ callback(err);
+ }
+};
+
+/**
+ * A facade around {@link fs.statSync} that allows it to be called
+ * the same way as {@link fs.stat}.
+ *
+ * @param {string} path
+ * @param {function} callback
+ */
+exports.stat = function (path, callback) {
+ // Make sure the callback is only called once
+ callback = call.once(callback);
+
+ try {
+ let stats = fs.statSync(path);
+ callback(null, stats);
+ }
+ catch (err) {
+ callback(err);
+ }
+};
+
+/**
+ * A facade around {@link fs.lstatSync} that allows it to be called
+ * the same way as {@link fs.lstat}.
+ *
+ * @param {string} path
+ * @param {function} callback
+ */
+exports.lstat = function (path, callback) {
+ // Make sure the callback is only called once
+ callback = call.once(callback);
+
+ try {
+ let stats = fs.lstatSync(path);
+ callback(null, stats);
+ }
+ catch (err) {
+ callback(err);
+ }
+};
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/index.js b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/index.js
new file mode 100644
index 0000000..60243a1
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/lib/sync/index.js
@@ -0,0 +1,34 @@
+'use strict';
+
+module.exports = readdirSync;
+
+const DirectoryReader = require('../directory-reader');
+
+let syncFacade = {
+ fs: require('./fs'),
+ forEach: require('./for-each'),
+ sync: true
+};
+
+/**
+ * Returns the buffered output from a synchronous {@link DirectoryReader}.
+ *
+ * @param {string} dir
+ * @param {object} [options]
+ * @param {object} internalOptions
+ */
+function readdirSync (dir, options, internalOptions) {
+ internalOptions.facade = syncFacade;
+
+ let reader = new DirectoryReader(dir, options, internalOptions);
+ let stream = reader.stream;
+
+ let results = [];
+ let data = stream.read();
+ while (data !== null) {
+ results.push(data);
+ data = stream.read();
+ }
+
+ return results;
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/package.json b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/package.json
new file mode 100644
index 0000000..77a03f7
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "@mrmlnc/readdir-enhanced",
+ "version": "2.2.1",
+ "description": "fs.readdir with sync, async, and streaming APIs + filtering, recursion, absolute paths, etc.",
+ "keywords": [
+ "fs",
+ "readdir",
+ "stream",
+ "event",
+ "recursive",
+ "deep",
+ "filter",
+ "absolute"
+ ],
+ "author": {
+ "name": "James Messinger",
+ "url": "http://bigstickcarpet.com"
+ },
+ "homepage": "https://github.com/bigstickcarpet/readdir-enhanced",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/bigstickcarpet/readdir-enhanced.git"
+ },
+ "license": "MIT",
+ "main": "lib/index.js",
+ "typings": "types.d.ts",
+ "files": [
+ "lib",
+ "types.d.ts"
+ ],
+ "scripts": {
+ "lint": "eslint lib test --fix",
+ "test": "mocha && npm run lint",
+ "cover": "istanbul cover _mocha",
+ "upgrade": "npm-check -u",
+ "bump": "bump --prompt --tag --push --all",
+ "release": "npm run upgrade && npm test && npm run bump && npm publish"
+ },
+ "devDependencies": {
+ "chai": "^4.1.2",
+ "codacy-coverage": "^2.0.3",
+ "coveralls": "^3.0.0",
+ "del": "^3.0.0",
+ "eslint": "^4.15.0",
+ "eslint-config-modular": "^4.1.1",
+ "istanbul": "^0.4.5",
+ "mkdirp": "^0.5.1",
+ "mocha": "^4.1.0",
+ "npm-check": "^5.5.2",
+ "through2": "^2.0.3",
+ "version-bump-prompt": "^4.0.0"
+ },
+ "dependencies": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+}
diff --git a/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/types.d.ts b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/types.d.ts
new file mode 100644
index 0000000..2f4e622
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@mrmlnc/readdir-enhanced/types.d.ts
@@ -0,0 +1,67 @@
+///
+
+import fs = require('fs');
+
+declare namespace re {
+ interface Entry extends fs.Stats {
+ path: string;
+ depth: number;
+ }
+
+ type FilterFunction = (stat: Entry) => boolean;
+ type Callback = (err: NodeJS.ErrnoException, result: T) => void;
+ type CallbackString = Callback;
+ type CallbackEntry = Callback;
+
+ interface FileSystem {
+ readdir?: (path: string, callback: Callback) => void;
+ lstat?: (path: string, callback: Callback) => void;
+ stat?: (path: string, callback: Callback) => void;
+ }
+
+ interface Options {
+ filter?: string | RegExp | FilterFunction;
+ deep?: boolean | number | RegExp | FilterFunction;
+ sep?: string;
+ basePath?: string;
+ fs?: FileSystem;
+ }
+
+ function stat(root: string, options?: Options): Promise;
+ function stat(root: string, callback: CallbackEntry): void;
+ function stat(root: string, options: Options, callback: CallbackEntry): void;
+
+ function async(root: string, options?: Options): Promise;
+ function async(root: string, callback: CallbackString): void;
+ function async(root: string, options: Options, callback: CallbackString): void;
+
+ function readdirAsyncStat(root: string, options?: Options): Promise;
+ function readdirAsyncStat(root: string, callback: CallbackEntry): void;
+ function readdirAsyncStat(root: string, options: Options, callback: CallbackEntry): void;
+
+ namespace async {
+ function stat(root: string, options?: Options): Promise;
+ function stat(root: string, callback: CallbackEntry): void;
+ function stat(root: string, options: Options, callback: CallbackEntry): void;
+ }
+
+ function stream(root: string, options?: Options): NodeJS.ReadableStream;
+ function readdirStreamStat(root: string, options?: Options): NodeJS.ReadableStream;
+
+ namespace stream {
+ function stat(root: string, options?: Options): NodeJS.ReadableStream;
+ }
+
+ function sync(root: string, options?: Options): string[];
+ function readdirSyncStat(root: string, options?: Options): Entry[];
+
+ namespace sync {
+ function stat(root: string, options?: Options): Entry[];
+ }
+}
+
+declare function re(root: string, options?: re.Options): Promise;
+declare function re(root: string, callback: re.CallbackString): void;
+declare function re(root: string, options: re.Options, callback: re.CallbackString): void;
+
+export = re;
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/README.md b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/README.md
new file mode 100644
index 0000000..3f7b835
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/README.md
@@ -0,0 +1,92 @@
+# @nodelib/fs.stat
+
+> Get the status of a file with some features.
+
+## :bulb: Highlights
+
+Wrapper over standard methods ([`fs.lstat`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_fs_lstat_path_callback), [`fs.stat`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_fs_stat_path_callback)) with some features.
+
+ * :beginner: Normally follows symlinks.
+ * :gear: Can safely work with broken symlinks (returns information about symlink instead of generating an error).
+
+## Install
+
+```
+$ npm install @nodelib/fs.stat
+```
+
+## Usage
+
+```js
+const fsStat = require('@nodelib/fs.stat');
+
+fsStat.stat('path').then((stat) => {
+ console.log(stat); // => fs.Stats
+});
+```
+
+## API
+
+### fsStat.stat(path, [options])
+
+Returns a [`Promise`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_class_fs_stats) for provided path.
+
+### fsStat.statSync(path, [options])
+
+Returns a [`fs.Stats`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_class_fs_stats) for provided path.
+
+### fsStat.statCallback(path, [options], callback)
+
+Returns a [`fs.Stats`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_class_fs_stats) for provided path with standard callback-style.
+
+#### path
+
+ * Type: `string | Buffer | URL`
+
+The `path` argument for [`fs.lstat`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_fs_lstat_path_callback) or [`fs.stat`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_fs_stat_path_callback) method.
+
+#### options
+
+ * Type: `Object`
+
+See [options](#options-1) section for more detailed information.
+
+## Options
+
+### throwErrorOnBrokenSymlinks
+
+ * Type: `boolean`
+ * Default: `true`
+
+Throw an error or return information about symlink, when symlink is broken. When `false`, methods will be return lstat call for broken symlinks.
+
+### followSymlinks
+
+ * Type: `boolean`
+ * Default: `true`
+
+By default, the methods of this package follows symlinks. If you do not want it, set this option to `false` or use the standard method [`fs.lstat`](https://nodejs.org/dist/latest/docs/api/fs.html#fs_fs_lstat_path_callback).
+
+### fs
+
+ * Type: `FileSystemAdapter`
+ * Default: `built-in FS methods`
+
+By default, the built-in Node.js module (`fs`) is used to work with the file system. You can replace each method with your own.
+
+```ts
+interface FileSystemAdapter {
+ lstat?: typeof fs.lstat;
+ stat?: typeof fs.stat;
+ lstatSync?: typeof fs.lstatSync;
+ statSync?: typeof fs.statSync;
+}
+```
+
+## Changelog
+
+See the [Releases section of our GitHub project](https://github.com/nodelib/nodelib/releases) for changelogs for each release version.
+
+## License
+
+This software is released under the terms of the MIT license.
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts
new file mode 100644
index 0000000..a8e6117
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/adapters/fs.d.ts
@@ -0,0 +1,11 @@
+///
+import * as fs from 'fs';
+export interface FileSystemAdapter {
+ lstat: typeof fs.lstat;
+ stat: typeof fs.stat;
+ lstatSync: typeof fs.lstatSync;
+ statSync: typeof fs.statSync;
+}
+export declare const FILE_SYSTEM_ADAPTER: FileSystemAdapter;
+export declare function getFileSystemAdapter(fsMethods?: Partial): FileSystemAdapter;
+//# sourceMappingURL=fs.d.ts.map
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/adapters/fs.js b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/adapters/fs.js
new file mode 100644
index 0000000..30319b6
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/adapters/fs.js
@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+exports.FILE_SYSTEM_ADAPTER = {
+ lstat: fs.lstat,
+ stat: fs.stat,
+ lstatSync: fs.lstatSync,
+ statSync: fs.statSync
+};
+function getFileSystemAdapter(fsMethods) {
+ if (!fsMethods) {
+ return exports.FILE_SYSTEM_ADAPTER;
+ }
+ return Object.assign({}, exports.FILE_SYSTEM_ADAPTER, fsMethods);
+}
+exports.getFileSystemAdapter = getFileSystemAdapter;
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/index.d.ts b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/index.d.ts
new file mode 100644
index 0000000..bda407d
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/index.d.ts
@@ -0,0 +1,22 @@
+///
+import * as fs from 'fs';
+import { FileSystemAdapter } from './adapters/fs';
+import { Options } from './managers/options';
+import { AsyncCallback } from './providers/stat';
+/**
+ * Asynchronous API.
+ */
+export declare function stat(path: fs.PathLike, opts?: Options): Promise;
+/**
+ * Callback API.
+ */
+export declare function statCallback(path: fs.PathLike, callback: AsyncCallback): void;
+export declare function statCallback(path: fs.PathLike, opts: Options, callback: AsyncCallback): void;
+/**
+ * Synchronous API.
+ */
+export declare function statSync(path: fs.PathLike, opts?: Options): fs.Stats;
+export declare type Options = Options;
+export declare type StatAsyncCallback = AsyncCallback;
+export declare type FileSystemAdapter = FileSystemAdapter;
+//# sourceMappingURL=index.d.ts.map
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/index.js b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/index.js
new file mode 100644
index 0000000..26c5ba8
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/index.js
@@ -0,0 +1,31 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const optionsManager = require("./managers/options");
+const statProvider = require("./providers/stat");
+/**
+ * Asynchronous API.
+ */
+function stat(path, opts) {
+ return new Promise((resolve, reject) => {
+ statProvider.async(path, optionsManager.prepare(opts), (err, stats) => err ? reject(err) : resolve(stats));
+ });
+}
+exports.stat = stat;
+function statCallback(path, optsOrCallback, callback) {
+ if (typeof optsOrCallback === 'function') {
+ callback = optsOrCallback; /* tslint:disable-line: no-parameter-reassignment */
+ optsOrCallback = undefined; /* tslint:disable-line: no-parameter-reassignment */
+ }
+ if (typeof callback === 'undefined') {
+ throw new TypeError('The "callback" argument must be of type Function.');
+ }
+ statProvider.async(path, optionsManager.prepare(optsOrCallback), callback);
+}
+exports.statCallback = statCallback;
+/**
+ * Synchronous API.
+ */
+function statSync(path, opts) {
+ return statProvider.sync(path, optionsManager.prepare(opts));
+}
+exports.statSync = statSync;
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/managers/options.d.ts b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/managers/options.d.ts
new file mode 100644
index 0000000..6e2e9b0
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/managers/options.d.ts
@@ -0,0 +1,11 @@
+import { FileSystemAdapter } from '../adapters/fs';
+export interface Options {
+ fs?: Partial;
+ throwErrorOnBrokenSymlinks?: boolean;
+ followSymlinks?: boolean;
+}
+export declare type StrictOptions = {
+ fs: FileSystemAdapter;
+} & Required;
+export declare function prepare(opts?: Options): StrictOptions;
+//# sourceMappingURL=options.d.ts.map
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/managers/options.js b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/managers/options.js
new file mode 100644
index 0000000..ae52922
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/managers/options.js
@@ -0,0 +1,12 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const fsAdapter = require("../adapters/fs");
+function prepare(opts) {
+ const options = Object.assign({
+ fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined),
+ throwErrorOnBrokenSymlinks: true,
+ followSymlinks: true
+ }, opts);
+ return options;
+}
+exports.prepare = prepare;
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/providers/stat.d.ts b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/providers/stat.d.ts
new file mode 100644
index 0000000..47c0bd1
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/providers/stat.d.ts
@@ -0,0 +1,11 @@
+///
+import * as fs from 'fs';
+import { StrictOptions } from '../managers/options';
+export declare function sync(path: fs.PathLike, options: StrictOptions): fs.Stats;
+export declare type AsyncCallback = (err: NodeJS.ErrnoException | null, stats?: fs.Stats) => void;
+export declare function async(path: fs.PathLike, options: StrictOptions, callback: AsyncCallback): void;
+/**
+ * Returns `true` for followed symlink.
+ */
+export declare function isFollowedSymlink(stat: fs.Stats, options: StrictOptions): boolean;
+//# sourceMappingURL=stat.d.ts.map
\ No newline at end of file
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/providers/stat.js b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/providers/stat.js
new file mode 100644
index 0000000..a7bbc52
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/out/providers/stat.js
@@ -0,0 +1,45 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+function sync(path, options) {
+ const lstat = options.fs.lstatSync(path);
+ if (!isFollowedSymlink(lstat, options)) {
+ return lstat;
+ }
+ try {
+ const stat = options.fs.statSync(path);
+ stat.isSymbolicLink = () => true;
+ return stat;
+ }
+ catch (err) {
+ if (!options.throwErrorOnBrokenSymlinks) {
+ return lstat;
+ }
+ throw err;
+ }
+}
+exports.sync = sync;
+function async(path, options, callback) {
+ options.fs.lstat(path, (err0, lstat) => {
+ if (err0) {
+ return callback(err0, undefined);
+ }
+ if (!isFollowedSymlink(lstat, options)) {
+ return callback(null, lstat);
+ }
+ options.fs.stat(path, (err1, stat) => {
+ if (err1) {
+ return options.throwErrorOnBrokenSymlinks ? callback(err1) : callback(null, lstat);
+ }
+ stat.isSymbolicLink = () => true;
+ callback(null, stat);
+ });
+ });
+}
+exports.async = async;
+/**
+ * Returns `true` for followed symlink.
+ */
+function isFollowedSymlink(stat, options) {
+ return stat.isSymbolicLink() && options.followSymlinks;
+}
+exports.isFollowedSymlink = isFollowedSymlink;
diff --git a/contrib/bake-vscode/node_modules/@nodelib/fs.stat/package.json b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/package.json
new file mode 100644
index 0000000..f49d525
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@nodelib/fs.stat/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "@nodelib/fs.stat",
+ "version": "1.1.3",
+ "description": "Get the status of a file with some features",
+ "license": "MIT",
+ "repository": "https://github.com/nodelib/nodelib/tree/master/packages/fs/fs.stat",
+ "keywords": [
+ "NodeLib",
+ "fs",
+ "FileSystem",
+ "file system",
+ "stat"
+ ],
+ "engines": {
+ "node": ">= 6"
+ },
+ "main": "out/index.js",
+ "typings": "out/index.d.ts",
+ "scripts": {
+ "clean": "rimraf out",
+ "lint": "tslint \"src/**/*.ts\" -p . -t stylish",
+ "compile": "tsc -b .",
+ "compile:watch": "tsc -p . --watch --sourceMap",
+ "test": "mocha \"out/**/*.spec.js\" -s 0",
+ "build": "npm run clean && npm run lint && npm run compile && npm test",
+ "watch": "npm run clean && npm run compile:watch"
+ }
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/LICENSE b/contrib/bake-vscode/node_modules/@types/node/LICENSE
new file mode 100644
index 0000000..4b1ad51
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/LICENSE
@@ -0,0 +1,21 @@
+ MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
diff --git a/contrib/bake-vscode/node_modules/@types/node/README.md b/contrib/bake-vscode/node_modules/@types/node/README.md
new file mode 100644
index 0000000..5010be2
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/README.md
@@ -0,0 +1,16 @@
+# Installation
+> `npm install --save @types/node`
+
+# Summary
+This package contains type definitions for Node.js (http://nodejs.org/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node
+
+Additional Details
+ * Last updated: Wed, 11 Sep 2019 05:46:27 GMT
+ * Dependencies: none
+ * Global values: Buffer, NodeJS, Symbol, __dirname, __filename, clearImmediate, clearInterval, clearTimeout, console, exports, global, module, process, queueMicrotask, require, setImmediate, setInterval, setTimeout
+
+# Credits
+These definitions were written by Microsoft TypeScript , DefinitelyTyped , Alberto Schiabel , Alexander T. , Alvis HT Tang , Andrew Makarov , Benjamin Toueg , Bruno Scheufler , Chigozirim C. , Christian Vaagland Tellnes , David Junger , Deividas Bakanas , Eugene Y. Q. Shen , Flarna , Hannes Magnusson , Hoàng Văn Khải , Huw , Kelvin Jin , Klaus Meinhardt , Lishude , Mariusz Wiktorczyk , Matthieu Sieben , Mohsen Azimi , Nicolas Even , Nicolas Voigt , Parambir Singh , Sebastian Silbermann , Simon Schick , Thomas den Hollander , Wilco Bakker , wwwy3y3 , Zane Hannan AU , Samuel Ainsworth , Kyle Uehlein , Jordi Oliveras Rovira , Thanik Bhongbhibhat , Marcin Kopacz , and Trivikram Kamat .
diff --git a/contrib/bake-vscode/node_modules/@types/node/assert.d.ts b/contrib/bake-vscode/node_modules/@types/node/assert.d.ts
new file mode 100644
index 0000000..319e5b4
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/assert.d.ts
@@ -0,0 +1,52 @@
+declare module "assert" {
+ function internal(value: any, message?: string | Error): void;
+ namespace internal {
+ class AssertionError implements Error {
+ name: string;
+ message: string;
+ actual: any;
+ expected: any;
+ operator: string;
+ generatedMessage: boolean;
+ code: 'ERR_ASSERTION';
+
+ constructor(options?: {
+ message?: string; actual?: any; expected?: any;
+ operator?: string; stackStartFn?: Function
+ });
+ }
+
+ function fail(message?: string | Error): never;
+ /** @deprecated since v10.0.0 - use fail([message]) or other assert functions instead. */
+ function fail(actual: any, expected: any, message?: string | Error, operator?: string, stackStartFn?: Function): never;
+ function ok(value: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use strictEqual() instead. */
+ function equal(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use notStrictEqual() instead. */
+ function notEqual(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use deepStrictEqual() instead. */
+ function deepEqual(actual: any, expected: any, message?: string | Error): void;
+ /** @deprecated since v9.9.0 - use notDeepStrictEqual() instead. */
+ function notDeepEqual(actual: any, expected: any, message?: string | Error): void;
+ function strictEqual(actual: any, expected: any, message?: string | Error): void;
+ function notStrictEqual(actual: any, expected: any, message?: string | Error): void;
+ function deepStrictEqual(actual: any, expected: any, message?: string | Error): void;
+ function notDeepStrictEqual(actual: any, expected: any, message?: string | Error): void;
+
+ function throws(block: () => any, message?: string | Error): void;
+ function throws(block: () => any, error: RegExp | Function | Object | Error, message?: string | Error): void;
+ function doesNotThrow(block: () => any, message?: string | Error): void;
+ function doesNotThrow(block: () => any, error: RegExp | Function, message?: string | Error): void;
+
+ function ifError(value: any): void;
+
+ function rejects(block: (() => Promise) | Promise, message?: string | Error): Promise;
+ function rejects(block: (() => Promise) | Promise, error: RegExp | Function | Object | Error, message?: string | Error): Promise;
+ function doesNotReject(block: (() => Promise) | Promise, message?: string | Error): Promise;
+ function doesNotReject(block: (() => Promise) | Promise, error: RegExp | Function, message?: string | Error): Promise;
+
+ const strict: typeof internal;
+ }
+
+ export = internal;
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/async_hooks.d.ts b/contrib/bake-vscode/node_modules/@types/node/async_hooks.d.ts
new file mode 100644
index 0000000..cca992e
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/async_hooks.d.ts
@@ -0,0 +1,132 @@
+/**
+ * Async Hooks module: https://nodejs.org/api/async_hooks.html
+ */
+declare module "async_hooks" {
+ /**
+ * Returns the asyncId of the current execution context.
+ */
+ function executionAsyncId(): number;
+
+ /**
+ * Returns the ID of the resource responsible for calling the callback that is currently being executed.
+ */
+ function triggerAsyncId(): number;
+
+ interface HookCallbacks {
+ /**
+ * Called when a class is constructed that has the possibility to emit an asynchronous event.
+ * @param asyncId a unique ID for the async resource
+ * @param type the type of the async resource
+ * @param triggerAsyncId the unique ID of the async resource in whose execution context this async resource was created
+ * @param resource reference to the resource representing the async operation, needs to be released during destroy
+ */
+ init?(asyncId: number, type: string, triggerAsyncId: number, resource: Object): void;
+
+ /**
+ * When an asynchronous operation is initiated or completes a callback is called to notify the user.
+ * The before callback is called just before said callback is executed.
+ * @param asyncId the unique identifier assigned to the resource about to execute the callback.
+ */
+ before?(asyncId: number): void;
+
+ /**
+ * Called immediately after the callback specified in before is completed.
+ * @param asyncId the unique identifier assigned to the resource which has executed the callback.
+ */
+ after?(asyncId: number): void;
+
+ /**
+ * Called when a promise has resolve() called. This may not be in the same execution id
+ * as the promise itself.
+ * @param asyncId the unique id for the promise that was resolve()d.
+ */
+ promiseResolve?(asyncId: number): void;
+
+ /**
+ * Called after the resource corresponding to asyncId is destroyed
+ * @param asyncId a unique ID for the async resource
+ */
+ destroy?(asyncId: number): void;
+ }
+
+ interface AsyncHook {
+ /**
+ * Enable the callbacks for a given AsyncHook instance. If no callbacks are provided enabling is a noop.
+ */
+ enable(): this;
+
+ /**
+ * Disable the callbacks for a given AsyncHook instance from the global pool of AsyncHook callbacks to be executed. Once a hook has been disabled it will not be called again until enabled.
+ */
+ disable(): this;
+ }
+
+ /**
+ * Registers functions to be called for different lifetime events of each async operation.
+ * @param options the callbacks to register
+ * @return an AsyncHooks instance used for disabling and enabling hooks
+ */
+ function createHook(options: HookCallbacks): AsyncHook;
+
+ interface AsyncResourceOptions {
+ /**
+ * The ID of the execution context that created this async event.
+ * Default: `executionAsyncId()`
+ */
+ triggerAsyncId?: number;
+
+ /**
+ * Disables automatic `emitDestroy` when the object is garbage collected.
+ * This usually does not need to be set (even if `emitDestroy` is called
+ * manually), unless the resource's `asyncId` is retrieved and the
+ * sensitive API's `emitDestroy` is called with it.
+ * Default: `false`
+ */
+ requireManualDestroy?: boolean;
+ }
+
+ /**
+ * The class AsyncResource was designed to be extended by the embedder's async resources.
+ * Using this users can easily trigger the lifetime events of their own resources.
+ */
+ class AsyncResource {
+ /**
+ * AsyncResource() is meant to be extended. Instantiating a
+ * new AsyncResource() also triggers init. If triggerAsyncId is omitted then
+ * async_hook.executionAsyncId() is used.
+ * @param type The type of async event.
+ * @param triggerAsyncId The ID of the execution context that created
+ * this async event (default: `executionAsyncId()`), or an
+ * AsyncResourceOptions object (since 9.3)
+ */
+ constructor(type: string, triggerAsyncId?: number|AsyncResourceOptions);
+
+ /**
+ * Call the provided function with the provided arguments in the
+ * execution context of the async resource. This will establish the
+ * context, trigger the AsyncHooks before callbacks, call the function,
+ * trigger the AsyncHooks after callbacks, and then restore the original
+ * execution context.
+ * @param fn The function to call in the execution context of this
+ * async resource.
+ * @param thisArg The receiver to be used for the function call.
+ * @param args Optional arguments to pass to the function.
+ */
+ runInAsyncScope(fn: (this: This, ...args: any[]) => Result, thisArg?: This, ...args: any[]): Result;
+
+ /**
+ * Call AsyncHooks destroy callbacks.
+ */
+ emitDestroy(): void;
+
+ /**
+ * @return the unique ID assigned to this AsyncResource instance.
+ */
+ asyncId(): number;
+
+ /**
+ * @return the trigger ID for this AsyncResource instance.
+ */
+ triggerAsyncId(): number;
+ }
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/base.d.ts b/contrib/bake-vscode/node_modules/@types/node/base.d.ts
new file mode 100644
index 0000000..70983d9
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/base.d.ts
@@ -0,0 +1,41 @@
+// base definnitions for all NodeJS modules that are not specific to any version of TypeScript
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
+///
diff --git a/contrib/bake-vscode/node_modules/@types/node/buffer.d.ts b/contrib/bake-vscode/node_modules/@types/node/buffer.d.ts
new file mode 100644
index 0000000..7eb1061
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/buffer.d.ts
@@ -0,0 +1,22 @@
+declare module "buffer" {
+ export const INSPECT_MAX_BYTES: number;
+ export const kMaxLength: number;
+ export const kStringMaxLength: number;
+ export const constants: {
+ MAX_LENGTH: number;
+ MAX_STRING_LENGTH: number;
+ };
+ const BuffType: typeof Buffer;
+
+ export type TranscodeEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "latin1" | "binary";
+
+ export function transcode(source: Uint8Array, fromEnc: TranscodeEncoding, toEnc: TranscodeEncoding): Buffer;
+
+ export const SlowBuffer: {
+ /** @deprecated since v6.0.0, use Buffer.allocUnsafeSlow() */
+ new(size: number): Buffer;
+ prototype: Buffer;
+ };
+
+ export { BuffType as Buffer };
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/child_process.d.ts b/contrib/bake-vscode/node_modules/@types/node/child_process.d.ts
new file mode 100644
index 0000000..cff058d
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/child_process.d.ts
@@ -0,0 +1,478 @@
+declare module "child_process" {
+ import * as events from "events";
+ import * as net from "net";
+ import { Writable, Readable, Stream, Pipe } from "stream";
+
+ interface ChildProcess extends events.EventEmitter {
+ stdin: Writable | null;
+ stdout: Readable | null;
+ stderr: Readable | null;
+ readonly channel?: Pipe | null;
+ readonly stdio: [
+ Writable | null, // stdin
+ Readable | null, // stdout
+ Readable | null, // stderr
+ Readable | Writable | null | undefined, // extra
+ Readable | Writable | null | undefined // extra
+ ];
+ readonly killed: boolean;
+ readonly pid: number;
+ readonly connected: boolean;
+ kill(signal?: string): void;
+ send(message: any, callback?: (error: Error | null) => void): boolean;
+ send(message: any, sendHandle?: net.Socket | net.Server, callback?: (error: Error | null) => void): boolean;
+ send(message: any, sendHandle?: net.Socket | net.Server, options?: MessageOptions, callback?: (error: Error | null) => void): boolean;
+ disconnect(): void;
+ unref(): void;
+ ref(): void;
+
+ /**
+ * events.EventEmitter
+ * 1. close
+ * 2. disconnect
+ * 3. error
+ * 4. exit
+ * 5. message
+ */
+
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "close", listener: (code: number, signal: string) => void): this;
+ addListener(event: "disconnect", listener: () => void): this;
+ addListener(event: "error", listener: (err: Error) => void): this;
+ addListener(event: "exit", listener: (code: number | null, signal: string | null) => void): this;
+ addListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "close", code: number, signal: string): boolean;
+ emit(event: "disconnect"): boolean;
+ emit(event: "error", err: Error): boolean;
+ emit(event: "exit", code: number | null, signal: string | null): boolean;
+ emit(event: "message", message: any, sendHandle: net.Socket | net.Server): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "close", listener: (code: number, signal: string) => void): this;
+ on(event: "disconnect", listener: () => void): this;
+ on(event: "error", listener: (err: Error) => void): this;
+ on(event: "exit", listener: (code: number | null, signal: string | null) => void): this;
+ on(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "close", listener: (code: number, signal: string) => void): this;
+ once(event: "disconnect", listener: () => void): this;
+ once(event: "error", listener: (err: Error) => void): this;
+ once(event: "exit", listener: (code: number | null, signal: string | null) => void): this;
+ once(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "close", listener: (code: number, signal: string) => void): this;
+ prependListener(event: "disconnect", listener: () => void): this;
+ prependListener(event: "error", listener: (err: Error) => void): this;
+ prependListener(event: "exit", listener: (code: number | null, signal: string | null) => void): this;
+ prependListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "close", listener: (code: number, signal: string) => void): this;
+ prependOnceListener(event: "disconnect", listener: () => void): this;
+ prependOnceListener(event: "error", listener: (err: Error) => void): this;
+ prependOnceListener(event: "exit", listener: (code: number | null, signal: string | null) => void): this;
+ prependOnceListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this;
+ }
+
+ // return this object when stdio option is undefined or not specified
+ interface ChildProcessWithoutNullStreams extends ChildProcess {
+ stdin: Writable;
+ stdout: Readable;
+ stderr: Readable;
+ readonly stdio: [
+ Writable, // stdin
+ Readable, // stdout
+ Readable, // stderr
+ Readable | Writable | null | undefined, // extra, no modification
+ Readable | Writable | null | undefined // extra, no modification
+ ];
+ }
+
+ // return this object when stdio option is a tuple of 3
+ interface ChildProcessByStdio<
+ I extends null | Writable,
+ O extends null | Readable,
+ E extends null | Readable,
+ > extends ChildProcess {
+ stdin: I;
+ stdout: O;
+ stderr: E;
+ readonly stdio: [
+ I,
+ O,
+ E,
+ Readable | Writable | null | undefined, // extra, no modification
+ Readable | Writable | null | undefined // extra, no modification
+ ];
+ }
+
+ interface MessageOptions {
+ keepOpen?: boolean;
+ }
+
+ type StdioOptions = "pipe" | "ignore" | "inherit" | Array<("pipe" | "ipc" | "ignore" | "inherit" | Stream | number | null | undefined)>;
+
+ interface ProcessEnvOptions {
+ uid?: number;
+ gid?: number;
+ cwd?: string;
+ env?: NodeJS.ProcessEnv;
+ }
+
+ interface CommonOptions extends ProcessEnvOptions {
+ /**
+ * @default true
+ */
+ windowsHide?: boolean;
+ /**
+ * @default 0
+ */
+ timeout?: number;
+ }
+
+ interface SpawnOptions extends CommonOptions {
+ argv0?: string;
+ stdio?: StdioOptions;
+ detached?: boolean;
+ shell?: boolean | string;
+ windowsVerbatimArguments?: boolean;
+ }
+
+ interface SpawnOptionsWithoutStdio extends SpawnOptions {
+ stdio?: 'pipe' | Array;
+ }
+
+ type StdioNull = 'inherit' | 'ignore' | Stream;
+ type StdioPipe = undefined | null | 'pipe';
+
+ interface SpawnOptionsWithStdioTuple<
+ Stdin extends StdioNull | StdioPipe,
+ Stdout extends StdioNull | StdioPipe,
+ Stderr extends StdioNull | StdioPipe,
+ > extends SpawnOptions {
+ stdio: [Stdin, Stdout, Stderr];
+ }
+
+ // overloads of spawn without 'args'
+ function spawn(command: string, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+
+ function spawn(command: string, options: SpawnOptions): ChildProcess;
+
+ // overloads of spawn with 'args'
+ function spawn(command: string, args?: ReadonlyArray, options?: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
+
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+ function spawn(
+ command: string,
+ args: ReadonlyArray,
+ options: SpawnOptionsWithStdioTuple,
+ ): ChildProcessByStdio;
+
+ function spawn(command: string, args: ReadonlyArray, options: SpawnOptions): ChildProcess;
+
+ interface ExecOptions extends CommonOptions {
+ shell?: string;
+ maxBuffer?: number;
+ killSignal?: string;
+ }
+
+ interface ExecOptionsWithStringEncoding extends ExecOptions {
+ encoding: BufferEncoding;
+ }
+
+ interface ExecOptionsWithBufferEncoding extends ExecOptions {
+ encoding: string | null; // specify `null`.
+ }
+
+ interface ExecException extends Error {
+ cmd?: string;
+ killed?: boolean;
+ code?: number;
+ signal?: string;
+ }
+
+ // no `options` definitely means stdout/stderr are `string`.
+ function exec(command: string, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function exec(command: string, options: { encoding: "buffer" | null } & ExecOptions, callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+
+ // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+ function exec(command: string, options: { encoding: BufferEncoding } & ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+ // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+ function exec(command: string, options: { encoding: string } & ExecOptions, callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess;
+
+ // `options` without an `encoding` means stdout/stderr are definitely `string`.
+ function exec(command: string, options: ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function exec(
+ command: string,
+ options: ({ encoding?: string | null } & ExecOptions) | undefined | null,
+ callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ interface PromiseWithChild extends Promise {
+ child: ChildProcess;
+ }
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace exec {
+ function __promisify__(command: string): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(command: string, options: { encoding: "buffer" | null } & ExecOptions): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+ function __promisify__(command: string, options: { encoding: BufferEncoding } & ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(command: string, options: ExecOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(command: string, options?: ({ encoding?: string | null } & ExecOptions) | null): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+ }
+
+ interface ExecFileOptions extends CommonOptions {
+ maxBuffer?: number;
+ killSignal?: string;
+ windowsVerbatimArguments?: boolean;
+ shell?: boolean | string;
+ }
+ interface ExecFileOptionsWithStringEncoding extends ExecFileOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions {
+ encoding: 'buffer' | null;
+ }
+ interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions {
+ encoding: string;
+ }
+
+ function execFile(file: string): ChildProcess;
+ function execFile(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess;
+ function execFile(file: string, args?: ReadonlyArray | null): ChildProcess;
+ function execFile(file: string, args: ReadonlyArray | undefined | null, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess;
+
+ // no `options` definitely means stdout/stderr are `string`.
+ function execFile(file: string, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+ function execFile(file: string, args: ReadonlyArray | undefined | null, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`.
+ function execFile(file: string, options: ExecFileOptionsWithBufferEncoding, callback: (error: Error | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithBufferEncoding,
+ callback: (error: Error | null, stdout: Buffer, stderr: Buffer) => void,
+ ): ChildProcess;
+
+ // `options` with well known `encoding` means stdout/stderr are definitely `string`.
+ function execFile(file: string, options: ExecFileOptionsWithStringEncoding, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithStringEncoding,
+ callback: (error: Error | null, stdout: string, stderr: string) => void,
+ ): ChildProcess;
+
+ // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`.
+ // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`.
+ function execFile(
+ file: string,
+ options: ExecFileOptionsWithOtherEncoding,
+ callback: (error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ExecFileOptionsWithOtherEncoding,
+ callback: (error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void,
+ ): ChildProcess;
+
+ // `options` without an `encoding` means stdout/stderr are definitely `string`.
+ function execFile(file: string, options: ExecFileOptions, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+ function execFile(file: string, args: ReadonlyArray | undefined | null, options: ExecFileOptions, callback: (error: Error | null, stdout: string, stderr: string) => void): ChildProcess;
+
+ // fallback if nothing else matches. Worst case is always `string | Buffer`.
+ function execFile(
+ file: string,
+ options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
+ callback: ((error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
+ ): ChildProcess;
+ function execFile(
+ file: string,
+ args: ReadonlyArray | undefined | null,
+ options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
+ callback: ((error: Error | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null,
+ ): ChildProcess;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace execFile {
+ function __promisify__(file: string): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, args: string[] | undefined | null): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, options: ExecFileOptionsWithBufferEncoding): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+ function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithBufferEncoding): PromiseWithChild<{ stdout: Buffer, stderr: Buffer }>;
+ function __promisify__(file: string, options: ExecFileOptionsWithStringEncoding): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithStringEncoding): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, options: ExecFileOptionsWithOtherEncoding): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+ function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptionsWithOtherEncoding): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+ function __promisify__(file: string, options: ExecFileOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, args: string[] | undefined | null, options: ExecFileOptions): PromiseWithChild<{ stdout: string, stderr: string }>;
+ function __promisify__(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+ function __promisify__(
+ file: string,
+ args: string[] | undefined | null,
+ options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null,
+ ): PromiseWithChild<{ stdout: string | Buffer, stderr: string | Buffer }>;
+ }
+
+ interface ForkOptions extends ProcessEnvOptions {
+ execPath?: string;
+ execArgv?: string[];
+ silent?: boolean;
+ stdio?: StdioOptions;
+ detached?: boolean;
+ windowsVerbatimArguments?: boolean;
+ }
+ function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess;
+
+ interface SpawnSyncOptions extends CommonOptions {
+ argv0?: string; // Not specified in the docs
+ input?: string | NodeJS.TypedArray | DataView;
+ stdio?: StdioOptions;
+ killSignal?: string | number;
+ maxBuffer?: number;
+ encoding?: string;
+ shell?: boolean | string;
+ windowsVerbatimArguments?: boolean;
+ }
+ interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions {
+ encoding: string; // specify `null`.
+ }
+ interface SpawnSyncReturns {
+ pid: number;
+ output: string[];
+ stdout: T;
+ stderr: T;
+ status: number | null;
+ signal: string | null;
+ error?: Error;
+ }
+ function spawnSync(command: string): SpawnSyncReturns;
+ function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns;
+ function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns;
+ function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptions): SpawnSyncReturns;
+
+ interface ExecSyncOptions extends CommonOptions {
+ input?: string | Uint8Array;
+ stdio?: StdioOptions;
+ shell?: string;
+ killSignal?: string | number;
+ maxBuffer?: number;
+ encoding?: string;
+ }
+ interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions {
+ encoding: string; // specify `null`.
+ }
+ function execSync(command: string): Buffer;
+ function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string;
+ function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer;
+ function execSync(command: string, options?: ExecSyncOptions): Buffer;
+
+ interface ExecFileSyncOptions extends CommonOptions {
+ input?: string | NodeJS.TypedArray | DataView;
+ stdio?: StdioOptions;
+ killSignal?: string | number;
+ maxBuffer?: number;
+ encoding?: string;
+ shell?: boolean | string;
+ }
+ interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions {
+ encoding: BufferEncoding;
+ }
+ interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions {
+ encoding: string; // specify `null`.
+ }
+ function execFileSync(command: string): Buffer;
+ function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string;
+ function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
+ function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer;
+ function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptionsWithStringEncoding): string;
+ function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer;
+ function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptions): Buffer;
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/cluster.d.ts b/contrib/bake-vscode/node_modules/@types/node/cluster.d.ts
new file mode 100644
index 0000000..43340ff
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/cluster.d.ts
@@ -0,0 +1,260 @@
+declare module "cluster" {
+ import * as child from "child_process";
+ import * as events from "events";
+ import * as net from "net";
+
+ // interfaces
+ interface ClusterSettings {
+ execArgv?: string[]; // default: process.execArgv
+ exec?: string;
+ args?: string[];
+ silent?: boolean;
+ stdio?: any[];
+ uid?: number;
+ gid?: number;
+ inspectPort?: number | (() => number);
+ }
+
+ interface Address {
+ address: string;
+ port: number;
+ addressType: number | "udp4" | "udp6"; // 4, 6, -1, "udp4", "udp6"
+ }
+
+ class Worker extends events.EventEmitter {
+ id: number;
+ process: child.ChildProcess;
+ send(message: any, sendHandle?: any, callback?: (error: Error | null) => void): boolean;
+ kill(signal?: string): void;
+ destroy(signal?: string): void;
+ disconnect(): void;
+ isConnected(): boolean;
+ isDead(): boolean;
+ exitedAfterDisconnect: boolean;
+
+ /**
+ * events.EventEmitter
+ * 1. disconnect
+ * 2. error
+ * 3. exit
+ * 4. listening
+ * 5. message
+ * 6. online
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "disconnect", listener: () => void): this;
+ addListener(event: "error", listener: (error: Error) => void): this;
+ addListener(event: "exit", listener: (code: number, signal: string) => void): this;
+ addListener(event: "listening", listener: (address: Address) => void): this;
+ addListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ addListener(event: "online", listener: () => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "disconnect"): boolean;
+ emit(event: "error", error: Error): boolean;
+ emit(event: "exit", code: number, signal: string): boolean;
+ emit(event: "listening", address: Address): boolean;
+ emit(event: "message", message: any, handle: net.Socket | net.Server): boolean;
+ emit(event: "online"): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "disconnect", listener: () => void): this;
+ on(event: "error", listener: (error: Error) => void): this;
+ on(event: "exit", listener: (code: number, signal: string) => void): this;
+ on(event: "listening", listener: (address: Address) => void): this;
+ on(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ on(event: "online", listener: () => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "disconnect", listener: () => void): this;
+ once(event: "error", listener: (error: Error) => void): this;
+ once(event: "exit", listener: (code: number, signal: string) => void): this;
+ once(event: "listening", listener: (address: Address) => void): this;
+ once(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ once(event: "online", listener: () => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "disconnect", listener: () => void): this;
+ prependListener(event: "error", listener: (error: Error) => void): this;
+ prependListener(event: "exit", listener: (code: number, signal: string) => void): this;
+ prependListener(event: "listening", listener: (address: Address) => void): this;
+ prependListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ prependListener(event: "online", listener: () => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "disconnect", listener: () => void): this;
+ prependOnceListener(event: "error", listener: (error: Error) => void): this;
+ prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this;
+ prependOnceListener(event: "listening", listener: (address: Address) => void): this;
+ prependOnceListener(event: "message", listener: (message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ prependOnceListener(event: "online", listener: () => void): this;
+ }
+
+ interface Cluster extends events.EventEmitter {
+ Worker: Worker;
+ disconnect(callback?: () => void): void;
+ fork(env?: any): Worker;
+ isMaster: boolean;
+ isWorker: boolean;
+ // TODO: cluster.schedulingPolicy
+ settings: ClusterSettings;
+ setupMaster(settings?: ClusterSettings): void;
+ worker?: Worker;
+ workers?: {
+ [index: string]: Worker | undefined
+ };
+
+ /**
+ * events.EventEmitter
+ * 1. disconnect
+ * 2. exit
+ * 3. fork
+ * 4. listening
+ * 5. message
+ * 6. online
+ * 7. setup
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "disconnect", listener: (worker: Worker) => void): this;
+ addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ addListener(event: "fork", listener: (worker: Worker) => void): this;
+ addListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ addListener(event: "online", listener: (worker: Worker) => void): this;
+ addListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "disconnect", worker: Worker): boolean;
+ emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
+ emit(event: "fork", worker: Worker): boolean;
+ emit(event: "listening", worker: Worker, address: Address): boolean;
+ emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
+ emit(event: "online", worker: Worker): boolean;
+ emit(event: "setup", settings: ClusterSettings): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "disconnect", listener: (worker: Worker) => void): this;
+ on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ on(event: "fork", listener: (worker: Worker) => void): this;
+ on(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ on(event: "online", listener: (worker: Worker) => void): this;
+ on(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "disconnect", listener: (worker: Worker) => void): this;
+ once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ once(event: "fork", listener: (worker: Worker) => void): this;
+ once(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ once(event: "online", listener: (worker: Worker) => void): this;
+ once(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "disconnect", listener: (worker: Worker) => void): this;
+ prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ prependListener(event: "fork", listener: (worker: Worker) => void): this;
+ prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this; // the handle is a net.Socket or net.Server object, or undefined.
+ prependListener(event: "online", listener: (worker: Worker) => void): this;
+ prependListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): this;
+ prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): this;
+ prependOnceListener(event: "fork", listener: (worker: Worker) => void): this;
+ prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): this;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): this;
+ prependOnceListener(event: "online", listener: (worker: Worker) => void): this;
+ prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): this;
+ }
+
+ function disconnect(callback?: () => void): void;
+ function fork(env?: any): Worker;
+ const isMaster: boolean;
+ const isWorker: boolean;
+ // TODO: cluster.schedulingPolicy
+ const settings: ClusterSettings;
+ function setupMaster(settings?: ClusterSettings): void;
+ const worker: Worker;
+ const workers: {
+ [index: string]: Worker | undefined
+ };
+
+ /**
+ * events.EventEmitter
+ * 1. disconnect
+ * 2. exit
+ * 3. fork
+ * 4. listening
+ * 5. message
+ * 6. online
+ * 7. setup
+ */
+ function addListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function addListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function addListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function addListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function addListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ function addListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
+ function addListener(event: "online", listener: (worker: Worker) => void): Cluster;
+ function addListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function emit(event: string | symbol, ...args: any[]): boolean;
+ function emit(event: "disconnect", worker: Worker): boolean;
+ function emit(event: "exit", worker: Worker, code: number, signal: string): boolean;
+ function emit(event: "fork", worker: Worker): boolean;
+ function emit(event: "listening", worker: Worker, address: Address): boolean;
+ function emit(event: "message", worker: Worker, message: any, handle: net.Socket | net.Server): boolean;
+ function emit(event: "online", worker: Worker): boolean;
+ function emit(event: "setup", settings: ClusterSettings): boolean;
+
+ function on(event: string, listener: (...args: any[]) => void): Cluster;
+ function on(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function on(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function on(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function on(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ function on(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
+ function on(event: "online", listener: (worker: Worker) => void): Cluster;
+ function on(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function once(event: string, listener: (...args: any[]) => void): Cluster;
+ function once(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function once(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function once(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function once(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ function once(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster; // the handle is a net.Socket or net.Server object, or undefined.
+ function once(event: "online", listener: (worker: Worker) => void): Cluster;
+ function once(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function removeListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function removeAllListeners(event?: string): Cluster;
+ function setMaxListeners(n: number): Cluster;
+ function getMaxListeners(): number;
+ function listeners(event: string): Function[];
+ function listenerCount(type: string): number;
+
+ function prependListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function prependListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function prependListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function prependListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function prependListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ function prependListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
+ function prependListener(event: "online", listener: (worker: Worker) => void): Cluster;
+ function prependListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function prependOnceListener(event: string, listener: (...args: any[]) => void): Cluster;
+ function prependOnceListener(event: "disconnect", listener: (worker: Worker) => void): Cluster;
+ function prependOnceListener(event: "exit", listener: (worker: Worker, code: number, signal: string) => void): Cluster;
+ function prependOnceListener(event: "fork", listener: (worker: Worker) => void): Cluster;
+ function prependOnceListener(event: "listening", listener: (worker: Worker, address: Address) => void): Cluster;
+ // the handle is a net.Socket or net.Server object, or undefined.
+ function prependOnceListener(event: "message", listener: (worker: Worker, message: any, handle: net.Socket | net.Server) => void): Cluster;
+ function prependOnceListener(event: "online", listener: (worker: Worker) => void): Cluster;
+ function prependOnceListener(event: "setup", listener: (settings: ClusterSettings) => void): Cluster;
+
+ function eventNames(): string[];
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/console.d.ts b/contrib/bake-vscode/node_modules/@types/node/console.d.ts
new file mode 100644
index 0000000..d30d13f
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/console.d.ts
@@ -0,0 +1,3 @@
+declare module "console" {
+ export = console;
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/constants.d.ts b/contrib/bake-vscode/node_modules/@types/node/constants.d.ts
new file mode 100644
index 0000000..577860f
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/constants.d.ts
@@ -0,0 +1,278 @@
+declare module "constants" {
+ const E2BIG: number;
+ const EACCES: number;
+ const EADDRINUSE: number;
+ const EADDRNOTAVAIL: number;
+ const EAFNOSUPPORT: number;
+ const EAGAIN: number;
+ const EALREADY: number;
+ const EBADF: number;
+ const EBADMSG: number;
+ const EBUSY: number;
+ const ECANCELED: number;
+ const ECHILD: number;
+ const ECONNABORTED: number;
+ const ECONNREFUSED: number;
+ const ECONNRESET: number;
+ const EDEADLK: number;
+ const EDESTADDRREQ: number;
+ const EDOM: number;
+ const EEXIST: number;
+ const EFAULT: number;
+ const EFBIG: number;
+ const EHOSTUNREACH: number;
+ const EIDRM: number;
+ const EILSEQ: number;
+ const EINPROGRESS: number;
+ const EINTR: number;
+ const EINVAL: number;
+ const EIO: number;
+ const EISCONN: number;
+ const EISDIR: number;
+ const ELOOP: number;
+ const EMFILE: number;
+ const EMLINK: number;
+ const EMSGSIZE: number;
+ const ENAMETOOLONG: number;
+ const ENETDOWN: number;
+ const ENETRESET: number;
+ const ENETUNREACH: number;
+ const ENFILE: number;
+ const ENOBUFS: number;
+ const ENODATA: number;
+ const ENODEV: number;
+ const ENOENT: number;
+ const ENOEXEC: number;
+ const ENOLCK: number;
+ const ENOLINK: number;
+ const ENOMEM: number;
+ const ENOMSG: number;
+ const ENOPROTOOPT: number;
+ const ENOSPC: number;
+ const ENOSR: number;
+ const ENOSTR: number;
+ const ENOSYS: number;
+ const ENOTCONN: number;
+ const ENOTDIR: number;
+ const ENOTEMPTY: number;
+ const ENOTSOCK: number;
+ const ENOTSUP: number;
+ const ENOTTY: number;
+ const ENXIO: number;
+ const EOPNOTSUPP: number;
+ const EOVERFLOW: number;
+ const EPERM: number;
+ const EPIPE: number;
+ const EPROTO: number;
+ const EPROTONOSUPPORT: number;
+ const EPROTOTYPE: number;
+ const ERANGE: number;
+ const EROFS: number;
+ const ESPIPE: number;
+ const ESRCH: number;
+ const ETIME: number;
+ const ETIMEDOUT: number;
+ const ETXTBSY: number;
+ const EWOULDBLOCK: number;
+ const EXDEV: number;
+ const WSAEINTR: number;
+ const WSAEBADF: number;
+ const WSAEACCES: number;
+ const WSAEFAULT: number;
+ const WSAEINVAL: number;
+ const WSAEMFILE: number;
+ const WSAEWOULDBLOCK: number;
+ const WSAEINPROGRESS: number;
+ const WSAEALREADY: number;
+ const WSAENOTSOCK: number;
+ const WSAEDESTADDRREQ: number;
+ const WSAEMSGSIZE: number;
+ const WSAEPROTOTYPE: number;
+ const WSAENOPROTOOPT: number;
+ const WSAEPROTONOSUPPORT: number;
+ const WSAESOCKTNOSUPPORT: number;
+ const WSAEOPNOTSUPP: number;
+ const WSAEPFNOSUPPORT: number;
+ const WSAEAFNOSUPPORT: number;
+ const WSAEADDRINUSE: number;
+ const WSAEADDRNOTAVAIL: number;
+ const WSAENETDOWN: number;
+ const WSAENETUNREACH: number;
+ const WSAENETRESET: number;
+ const WSAECONNABORTED: number;
+ const WSAECONNRESET: number;
+ const WSAENOBUFS: number;
+ const WSAEISCONN: number;
+ const WSAENOTCONN: number;
+ const WSAESHUTDOWN: number;
+ const WSAETOOMANYREFS: number;
+ const WSAETIMEDOUT: number;
+ const WSAECONNREFUSED: number;
+ const WSAELOOP: number;
+ const WSAENAMETOOLONG: number;
+ const WSAEHOSTDOWN: number;
+ const WSAEHOSTUNREACH: number;
+ const WSAENOTEMPTY: number;
+ const WSAEPROCLIM: number;
+ const WSAEUSERS: number;
+ const WSAEDQUOT: number;
+ const WSAESTALE: number;
+ const WSAEREMOTE: number;
+ const WSASYSNOTREADY: number;
+ const WSAVERNOTSUPPORTED: number;
+ const WSANOTINITIALISED: number;
+ const WSAEDISCON: number;
+ const WSAENOMORE: number;
+ const WSAECANCELLED: number;
+ const WSAEINVALIDPROCTABLE: number;
+ const WSAEINVALIDPROVIDER: number;
+ const WSAEPROVIDERFAILEDINIT: number;
+ const WSASYSCALLFAILURE: number;
+ const WSASERVICE_NOT_FOUND: number;
+ const WSATYPE_NOT_FOUND: number;
+ const WSA_E_NO_MORE: number;
+ const WSA_E_CANCELLED: number;
+ const WSAEREFUSED: number;
+ const SIGHUP: number;
+ const SIGINT: number;
+ const SIGILL: number;
+ const SIGABRT: number;
+ const SIGFPE: number;
+ const SIGKILL: number;
+ const SIGSEGV: number;
+ const SIGTERM: number;
+ const SIGBREAK: number;
+ const SIGWINCH: number;
+ const SSL_OP_ALL: number;
+ const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
+ const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
+ const SSL_OP_CISCO_ANYCONNECT: number;
+ const SSL_OP_COOKIE_EXCHANGE: number;
+ const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
+ const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
+ const SSL_OP_EPHEMERAL_RSA: number;
+ const SSL_OP_LEGACY_SERVER_CONNECT: number;
+ const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
+ const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
+ const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
+ const SSL_OP_NETSCAPE_CA_DN_BUG: number;
+ const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
+ const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
+ const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
+ const SSL_OP_NO_COMPRESSION: number;
+ const SSL_OP_NO_QUERY_MTU: number;
+ const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
+ const SSL_OP_NO_SSLv2: number;
+ const SSL_OP_NO_SSLv3: number;
+ const SSL_OP_NO_TICKET: number;
+ const SSL_OP_NO_TLSv1: number;
+ const SSL_OP_NO_TLSv1_1: number;
+ const SSL_OP_NO_TLSv1_2: number;
+ const SSL_OP_PKCS1_CHECK_1: number;
+ const SSL_OP_PKCS1_CHECK_2: number;
+ const SSL_OP_SINGLE_DH_USE: number;
+ const SSL_OP_SINGLE_ECDH_USE: number;
+ const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
+ const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
+ const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
+ const SSL_OP_TLS_D5_BUG: number;
+ const SSL_OP_TLS_ROLLBACK_BUG: number;
+ const ENGINE_METHOD_DSA: number;
+ const ENGINE_METHOD_DH: number;
+ const ENGINE_METHOD_RAND: number;
+ const ENGINE_METHOD_ECDH: number;
+ const ENGINE_METHOD_ECDSA: number;
+ const ENGINE_METHOD_CIPHERS: number;
+ const ENGINE_METHOD_DIGESTS: number;
+ const ENGINE_METHOD_STORE: number;
+ const ENGINE_METHOD_PKEY_METHS: number;
+ const ENGINE_METHOD_PKEY_ASN1_METHS: number;
+ const ENGINE_METHOD_ALL: number;
+ const ENGINE_METHOD_NONE: number;
+ const DH_CHECK_P_NOT_SAFE_PRIME: number;
+ const DH_CHECK_P_NOT_PRIME: number;
+ const DH_UNABLE_TO_CHECK_GENERATOR: number;
+ const DH_NOT_SUITABLE_GENERATOR: number;
+ const RSA_PKCS1_PADDING: number;
+ const RSA_SSLV23_PADDING: number;
+ const RSA_NO_PADDING: number;
+ const RSA_PKCS1_OAEP_PADDING: number;
+ const RSA_X931_PADDING: number;
+ const RSA_PKCS1_PSS_PADDING: number;
+ const POINT_CONVERSION_COMPRESSED: number;
+ const POINT_CONVERSION_UNCOMPRESSED: number;
+ const POINT_CONVERSION_HYBRID: number;
+ const O_RDONLY: number;
+ const O_WRONLY: number;
+ const O_RDWR: number;
+ const S_IFMT: number;
+ const S_IFREG: number;
+ const S_IFDIR: number;
+ const S_IFCHR: number;
+ const S_IFBLK: number;
+ const S_IFIFO: number;
+ const S_IFSOCK: number;
+ const S_IRWXU: number;
+ const S_IRUSR: number;
+ const S_IWUSR: number;
+ const S_IXUSR: number;
+ const S_IRWXG: number;
+ const S_IRGRP: number;
+ const S_IWGRP: number;
+ const S_IXGRP: number;
+ const S_IRWXO: number;
+ const S_IROTH: number;
+ const S_IWOTH: number;
+ const S_IXOTH: number;
+ const S_IFLNK: number;
+ const O_CREAT: number;
+ const O_EXCL: number;
+ const O_NOCTTY: number;
+ const O_DIRECTORY: number;
+ const O_NOATIME: number;
+ const O_NOFOLLOW: number;
+ const O_SYNC: number;
+ const O_DSYNC: number;
+ const O_SYMLINK: number;
+ const O_DIRECT: number;
+ const O_NONBLOCK: number;
+ const O_TRUNC: number;
+ const O_APPEND: number;
+ const F_OK: number;
+ const R_OK: number;
+ const W_OK: number;
+ const X_OK: number;
+ const COPYFILE_EXCL: number;
+ const COPYFILE_FICLONE: number;
+ const COPYFILE_FICLONE_FORCE: number;
+ const UV_UDP_REUSEADDR: number;
+ const SIGQUIT: number;
+ const SIGTRAP: number;
+ const SIGIOT: number;
+ const SIGBUS: number;
+ const SIGUSR1: number;
+ const SIGUSR2: number;
+ const SIGPIPE: number;
+ const SIGALRM: number;
+ const SIGCHLD: number;
+ const SIGSTKFLT: number;
+ const SIGCONT: number;
+ const SIGSTOP: number;
+ const SIGTSTP: number;
+ const SIGTTIN: number;
+ const SIGTTOU: number;
+ const SIGURG: number;
+ const SIGXCPU: number;
+ const SIGXFSZ: number;
+ const SIGVTALRM: number;
+ const SIGPROF: number;
+ const SIGIO: number;
+ const SIGPOLL: number;
+ const SIGPWR: number;
+ const SIGSYS: number;
+ const SIGUNUSED: number;
+ const defaultCoreCipherList: string;
+ const defaultCipherList: string;
+ const ENGINE_METHOD_RSA: number;
+ const ALPN_ENABLED: number;
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/crypto.d.ts b/contrib/bake-vscode/node_modules/@types/node/crypto.d.ts
new file mode 100644
index 0000000..5c2dc09
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/crypto.d.ts
@@ -0,0 +1,602 @@
+declare module "crypto" {
+ import * as stream from "stream";
+
+ interface Certificate {
+ exportChallenge(spkac: BinaryLike): Buffer;
+ exportPublicKey(spkac: BinaryLike): Buffer;
+ verifySpkac(spkac: Binary): boolean;
+ }
+ const Certificate: {
+ new(): Certificate;
+ (): Certificate;
+ };
+
+ namespace constants { // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants
+ const OPENSSL_VERSION_NUMBER: number;
+
+ /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */
+ const SSL_OP_ALL: number;
+ /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+ const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
+ /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
+ const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
+ /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */
+ const SSL_OP_CISCO_ANYCONNECT: number;
+ /** Instructs OpenSSL to turn on cookie exchange. */
+ const SSL_OP_COOKIE_EXCHANGE: number;
+ /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */
+ const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
+ /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */
+ const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
+ /** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */
+ const SSL_OP_EPHEMERAL_RSA: number;
+ /** Allows initial connection to servers that do not support RI. */
+ const SSL_OP_LEGACY_SERVER_CONNECT: number;
+ const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
+ const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
+ /** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */
+ const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
+ const SSL_OP_NETSCAPE_CA_DN_BUG: number;
+ const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
+ const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
+ const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
+ /** Instructs OpenSSL to disable support for SSL/TLS compression. */
+ const SSL_OP_NO_COMPRESSION: number;
+ const SSL_OP_NO_QUERY_MTU: number;
+ /** Instructs OpenSSL to always start a new session when performing renegotiation. */
+ const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
+ const SSL_OP_NO_SSLv2: number;
+ const SSL_OP_NO_SSLv3: number;
+ const SSL_OP_NO_TICKET: number;
+ const SSL_OP_NO_TLSv1: number;
+ const SSL_OP_NO_TLSv1_1: number;
+ const SSL_OP_NO_TLSv1_2: number;
+ const SSL_OP_PKCS1_CHECK_1: number;
+ const SSL_OP_PKCS1_CHECK_2: number;
+ /** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */
+ const SSL_OP_SINGLE_DH_USE: number;
+ /** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */
+ const SSL_OP_SINGLE_ECDH_USE: number;
+ const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
+ const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
+ const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
+ const SSL_OP_TLS_D5_BUG: number;
+ /** Instructs OpenSSL to disable version rollback attack detection. */
+ const SSL_OP_TLS_ROLLBACK_BUG: number;
+
+ const ENGINE_METHOD_RSA: number;
+ const ENGINE_METHOD_DSA: number;
+ const ENGINE_METHOD_DH: number;
+ const ENGINE_METHOD_RAND: number;
+ const ENGINE_METHOD_EC: number;
+ const ENGINE_METHOD_CIPHERS: number;
+ const ENGINE_METHOD_DIGESTS: number;
+ const ENGINE_METHOD_PKEY_METHS: number;
+ const ENGINE_METHOD_PKEY_ASN1_METHS: number;
+ const ENGINE_METHOD_ALL: number;
+ const ENGINE_METHOD_NONE: number;
+
+ const DH_CHECK_P_NOT_SAFE_PRIME: number;
+ const DH_CHECK_P_NOT_PRIME: number;
+ const DH_UNABLE_TO_CHECK_GENERATOR: number;
+ const DH_NOT_SUITABLE_GENERATOR: number;
+
+ const ALPN_ENABLED: number;
+
+ const RSA_PKCS1_PADDING: number;
+ const RSA_SSLV23_PADDING: number;
+ const RSA_NO_PADDING: number;
+ const RSA_PKCS1_OAEP_PADDING: number;
+ const RSA_X931_PADDING: number;
+ const RSA_PKCS1_PSS_PADDING: number;
+ /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */
+ const RSA_PSS_SALTLEN_DIGEST: number;
+ /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */
+ const RSA_PSS_SALTLEN_MAX_SIGN: number;
+ /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */
+ const RSA_PSS_SALTLEN_AUTO: number;
+
+ const POINT_CONVERSION_COMPRESSED: number;
+ const POINT_CONVERSION_UNCOMPRESSED: number;
+ const POINT_CONVERSION_HYBRID: number;
+
+ /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */
+ const defaultCoreCipherList: string;
+ /** Specifies the active default cipher list used by the current Node.js process (colon-separated values). */
+ const defaultCipherList: string;
+ }
+
+ /** @deprecated since v10.0.0 */
+ const fips: boolean;
+
+ function createHash(algorithm: string, options?: stream.TransformOptions): Hash;
+ function createHmac(algorithm: string, key: BinaryLike, options?: stream.TransformOptions): Hmac;
+
+ type Utf8AsciiLatin1Encoding = "utf8" | "ascii" | "latin1";
+ type HexBase64Latin1Encoding = "latin1" | "hex" | "base64";
+ type Utf8AsciiBinaryEncoding = "utf8" | "ascii" | "binary";
+ type HexBase64BinaryEncoding = "binary" | "base64" | "hex";
+ type ECDHKeyFormat = "compressed" | "uncompressed" | "hybrid";
+
+ class Hash extends stream.Transform {
+ private constructor();
+ update(data: BinaryLike): Hash;
+ update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hash;
+ digest(): Buffer;
+ digest(encoding: HexBase64Latin1Encoding): string;
+ }
+ class Hmac extends stream.Transform {
+ private constructor();
+ update(data: BinaryLike): Hmac;
+ update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Hmac;
+ digest(): Buffer;
+ digest(encoding: HexBase64Latin1Encoding): string;
+ }
+
+ export type KeyObjectType = 'secret' | 'public' | 'private';
+
+ interface KeyExportOptions {
+ type: 'pkcs1' | 'spki' | 'pkcs8' | 'sec1';
+ format: T;
+ cipher?: string;
+ passphrase?: string | Buffer;
+ }
+
+ class KeyObject {
+ private constructor();
+ asymmetricKeyType?: KeyType;
+ /**
+ * For asymmetric keys, this property represents the size of the embedded key in
+ * bytes. This property is `undefined` for symmetric keys.
+ */
+ asymmetricKeySize?: number;
+ export(options: KeyExportOptions<'pem'>): string | Buffer;
+ export(options?: KeyExportOptions<'der'>): Buffer;
+ symmetricSize?: number;
+ type: KeyObjectType;
+ }
+
+ type CipherCCMTypes = 'aes-128-ccm' | 'aes-192-ccm' | 'aes-256-ccm';
+ type CipherGCMTypes = 'aes-128-gcm' | 'aes-192-gcm' | 'aes-256-gcm';
+
+ type Binary = NodeJS.TypedArray | DataView;
+ type BinaryLike = string | Binary;
+
+ type CipherKey = BinaryLike | KeyObject;
+
+ interface CipherCCMOptions extends stream.TransformOptions {
+ authTagLength: number;
+ }
+ interface CipherGCMOptions extends stream.TransformOptions {
+ authTagLength?: number;
+ }
+ /** @deprecated since v10.0.0 use createCipheriv() */
+ function createCipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): CipherCCM;
+ /** @deprecated since v10.0.0 use createCipheriv() */
+ function createCipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): CipherGCM;
+ /** @deprecated since v10.0.0 use createCipheriv() */
+ function createCipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Cipher;
+
+ function createCipheriv(
+ algorithm: CipherCCMTypes,
+ key: CipherKey,
+ iv: BinaryLike | null,
+ options: CipherCCMOptions
+ ): CipherCCM;
+ function createCipheriv(
+ algorithm: CipherGCMTypes,
+ key: CipherKey,
+ iv: BinaryLike | null,
+ options?: CipherGCMOptions
+ ): CipherGCM;
+ function createCipheriv(
+ algorithm: string, key: CipherKey, iv: BinaryLike | null, options?: stream.TransformOptions
+ ): Cipher;
+
+ class Cipher extends stream.Transform {
+ private constructor();
+ update(data: BinaryLike): Buffer;
+ update(data: string, input_encoding: Utf8AsciiBinaryEncoding): Buffer;
+ update(data: Binary, input_encoding: undefined, output_encoding: HexBase64BinaryEncoding): string;
+ update(data: string, input_encoding: Utf8AsciiBinaryEncoding | undefined, output_encoding: HexBase64BinaryEncoding): string;
+ final(): Buffer;
+ final(output_encoding: string): string;
+ setAutoPadding(auto_padding?: boolean): this;
+ // getAuthTag(): Buffer;
+ // setAAD(buffer: Buffer): this; // docs only say buffer
+ }
+ interface CipherCCM extends Cipher {
+ setAAD(buffer: Buffer, options: { plaintextLength: number }): this;
+ getAuthTag(): Buffer;
+ }
+ interface CipherGCM extends Cipher {
+ setAAD(buffer: Buffer, options?: { plaintextLength: number }): this;
+ getAuthTag(): Buffer;
+ }
+ /** @deprecated since v10.0.0 use createCipheriv() */
+ function createDecipher(algorithm: CipherCCMTypes, password: BinaryLike, options: CipherCCMOptions): DecipherCCM;
+ /** @deprecated since v10.0.0 use createCipheriv() */
+ function createDecipher(algorithm: CipherGCMTypes, password: BinaryLike, options?: CipherGCMOptions): DecipherGCM;
+ /** @deprecated since v10.0.0 use createCipheriv() */
+ function createDecipher(algorithm: string, password: BinaryLike, options?: stream.TransformOptions): Decipher;
+
+ function createDecipheriv(
+ algorithm: CipherCCMTypes,
+ key: BinaryLike,
+ iv: BinaryLike | null,
+ options: CipherCCMOptions,
+ ): DecipherCCM;
+ function createDecipheriv(
+ algorithm: CipherGCMTypes,
+ key: BinaryLike,
+ iv: BinaryLike | null,
+ options?: CipherGCMOptions,
+ ): DecipherGCM;
+ function createDecipheriv(algorithm: string, key: BinaryLike, iv: BinaryLike | null, options?: stream.TransformOptions): Decipher;
+
+ class Decipher extends stream.Transform {
+ private constructor();
+ update(data: Binary): Buffer;
+ update(data: string, input_encoding: HexBase64BinaryEncoding): Buffer;
+ update(data: Binary, input_encoding: undefined, output_encoding: Utf8AsciiBinaryEncoding): string;
+ update(data: string, input_encoding: HexBase64BinaryEncoding | undefined, output_encoding: Utf8AsciiBinaryEncoding): string;
+ final(): Buffer;
+ final(output_encoding: string): string;
+ setAutoPadding(auto_padding?: boolean): this;
+ // setAuthTag(tag: Binary): this;
+ // setAAD(buffer: Binary): this;
+ }
+ interface DecipherCCM extends Decipher {
+ setAuthTag(buffer: Binary): this;
+ setAAD(buffer: Binary, options: { plaintextLength: number }): this;
+ }
+ interface DecipherGCM extends Decipher {
+ setAuthTag(buffer: Binary): this;
+ setAAD(buffer: Binary, options?: { plaintextLength: number }): this;
+ }
+
+ interface PrivateKeyInput {
+ key: string | Buffer;
+ format?: KeyFormat;
+ type?: 'pkcs1' | 'pkcs8' | 'sec1';
+ passphrase?: string | Buffer;
+ }
+
+ interface PublicKeyInput {
+ key: string | Buffer;
+ format?: KeyFormat;
+ type?: 'pkcs1' | 'spki';
+ }
+
+ function createPrivateKey(key: PrivateKeyInput | string | Buffer): KeyObject;
+ function createPublicKey(key: PublicKeyInput | string | Buffer | KeyObject): KeyObject;
+ function createSecretKey(key: Buffer): KeyObject;
+
+ function createSign(algorithm: string, options?: stream.WritableOptions): Signer;
+
+ interface SigningOptions {
+ /**
+ * @See crypto.constants.RSA_PKCS1_PADDING
+ */
+ padding?: number;
+ saltLength?: number;
+ }
+
+ interface SignPrivateKeyInput extends PrivateKeyInput, SigningOptions {
+ }
+
+ type KeyLike = string | Buffer | KeyObject;
+
+ class Signer extends stream.Writable {
+ private constructor();
+
+ update(data: BinaryLike): Signer;
+ update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Signer;
+ sign(private_key: SignPrivateKeyInput | KeyLike): Buffer;
+ sign(private_key: SignPrivateKeyInput | KeyLike, output_format: HexBase64Latin1Encoding): string;
+ }
+
+ function createVerify(algorithm: string, options?: stream.WritableOptions): Verify;
+ class Verify extends stream.Writable {
+ private constructor();
+
+ update(data: BinaryLike): Verify;
+ update(data: string, input_encoding: Utf8AsciiLatin1Encoding): Verify;
+ verify(object: Object | KeyLike, signature: Binary): boolean;
+ verify(object: Object | KeyLike, signature: string, signature_format?: HexBase64Latin1Encoding): boolean;
+ // https://nodejs.org/api/crypto.html#crypto_verifier_verify_object_signature_signature_format
+ // The signature field accepts a TypedArray type, but it is only available starting ES2017
+ }
+ function createDiffieHellman(prime_length: number, generator?: number | Binary): DiffieHellman;
+ function createDiffieHellman(prime: Binary): DiffieHellman;
+ function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding): DiffieHellman;
+ function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: number | Binary): DiffieHellman;
+ function createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding, generator: string, generator_encoding: HexBase64Latin1Encoding): DiffieHellman;
+ class DiffieHellman {
+ private constructor();
+ generateKeys(): Buffer;
+ generateKeys(encoding: HexBase64Latin1Encoding): string;
+ computeSecret(other_public_key: Binary): Buffer;
+ computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
+ computeSecret(other_public_key: Binary, output_encoding: HexBase64Latin1Encoding): string;
+ computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
+ getPrime(): Buffer;
+ getPrime(encoding: HexBase64Latin1Encoding): string;
+ getGenerator(): Buffer;
+ getGenerator(encoding: HexBase64Latin1Encoding): string;
+ getPublicKey(): Buffer;
+ getPublicKey(encoding: HexBase64Latin1Encoding): string;
+ getPrivateKey(): Buffer;
+ getPrivateKey(encoding: HexBase64Latin1Encoding): string;
+ setPublicKey(public_key: Binary): void;
+ setPublicKey(public_key: string, encoding: string): void;
+ setPrivateKey(private_key: Binary): void;
+ setPrivateKey(private_key: string, encoding: string): void;
+ verifyError: number;
+ }
+ function getDiffieHellman(group_name: string): DiffieHellman;
+ function pbkdf2(
+ password: BinaryLike,
+ salt: BinaryLike,
+ iterations: number,
+ keylen: number,
+ digest: string,
+ callback: (err: Error | null, derivedKey: Buffer) => any,
+ ): void;
+ function pbkdf2Sync(password: BinaryLike, salt: BinaryLike, iterations: number, keylen: number, digest: string): Buffer;
+
+ function randomBytes(size: number): Buffer;
+ function randomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
+ function pseudoRandomBytes(size: number): Buffer;
+ function pseudoRandomBytes(size: number, callback: (err: Error | null, buf: Buffer) => void): void;
+
+ function randomFillSync(buffer: T, offset?: number, size?: number): T;
+ function randomFill(buffer: T, callback: (err: Error | null, buf: T) => void): void;
+ function randomFill(buffer: T, offset: number, callback: (err: Error | null, buf: T) => void): void;
+ function randomFill(buffer: T, offset: number, size: number, callback: (err: Error | null, buf: T) => void): void;
+
+ interface ScryptOptions {
+ N?: number;
+ r?: number;
+ p?: number;
+ maxmem?: number;
+ }
+ function scrypt(
+ password: BinaryLike,
+ salt: BinaryLike,
+ keylen: number, callback: (err: Error | null, derivedKey: Buffer) => void,
+ ): void;
+ function scrypt(
+ password: BinaryLike,
+ salt: BinaryLike,
+ keylen: number,
+ options: ScryptOptions,
+ callback: (err: Error | null, derivedKey: Buffer) => void,
+ ): void;
+ function scryptSync(password: BinaryLike, salt: BinaryLike, keylen: number, options?: ScryptOptions): Buffer;
+
+ interface RsaPublicKey {
+ key: KeyLike;
+ padding?: number;
+ }
+ interface RsaPrivateKey {
+ key: KeyLike;
+ passphrase?: string;
+ padding?: number;
+ }
+ function publicEncrypt(public_key: RsaPublicKey | KeyLike, buffer: Binary): Buffer;
+ function privateDecrypt(private_key: RsaPrivateKey | KeyLike, buffer: Binary): Buffer;
+ function privateEncrypt(private_key: RsaPrivateKey | KeyLike, buffer: Binary): Buffer;
+ function publicDecrypt(public_key: RsaPublicKey | KeyLike, buffer: Binary): Buffer;
+ function getCiphers(): string[];
+ function getCurves(): string[];
+ function getHashes(): string[];
+ class ECDH {
+ private constructor();
+ static convertKey(
+ key: BinaryLike,
+ curve: string,
+ inputEncoding?: HexBase64Latin1Encoding,
+ outputEncoding?: "latin1" | "hex" | "base64",
+ format?: "uncompressed" | "compressed" | "hybrid",
+ ): Buffer | string;
+ generateKeys(): Buffer;
+ generateKeys(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string;
+ computeSecret(other_public_key: Binary): Buffer;
+ computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding): Buffer;
+ computeSecret(other_public_key: Binary, output_encoding: HexBase64Latin1Encoding): string;
+ computeSecret(other_public_key: string, input_encoding: HexBase64Latin1Encoding, output_encoding: HexBase64Latin1Encoding): string;
+ getPrivateKey(): Buffer;
+ getPrivateKey(encoding: HexBase64Latin1Encoding): string;
+ getPublicKey(): Buffer;
+ getPublicKey(encoding: HexBase64Latin1Encoding, format?: ECDHKeyFormat): string;
+ setPrivateKey(private_key: Binary): void;
+ setPrivateKey(private_key: string, encoding: HexBase64Latin1Encoding): void;
+ }
+ function createECDH(curve_name: string): ECDH;
+ function timingSafeEqual(a: Binary, b: Binary): boolean;
+ /** @deprecated since v10.0.0 */
+ const DEFAULT_ENCODING: string;
+
+ export type KeyType = 'rsa' | 'dsa' | 'ec';
+ export type KeyFormat = 'pem' | 'der';
+
+ interface BasePrivateKeyEncodingOptions {
+ format: T;
+ cipher?: string;
+ passphrase?: string;
+ }
+
+ interface KeyPairKeyObjectResult {
+ publicKey: KeyObject;
+ privateKey: KeyObject;
+ }
+
+ interface ECKeyPairKeyObjectOptions {
+ /**
+ * Name of the curve to use.
+ */
+ namedCurve: string;
+ }
+
+ interface RSAKeyPairKeyObjectOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+
+ /**
+ * @default 0x10001
+ */
+ publicExponent?: number;
+ }
+
+ interface DSAKeyPairKeyObjectOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+
+ /**
+ * Size of q in bits
+ */
+ divisorLength: number;
+ }
+
+ interface RSAKeyPairOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+ /**
+ * @default 0x10001
+ */
+ publicExponent?: number;
+
+ publicKeyEncoding: {
+ type: 'pkcs1' | 'spki';
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: 'pkcs1' | 'pkcs8';
+ };
+ }
+
+ interface DSAKeyPairOptions {
+ /**
+ * Key size in bits
+ */
+ modulusLength: number;
+ /**
+ * Size of q in bits
+ */
+ divisorLength: number;
+
+ publicKeyEncoding: {
+ type: 'spki';
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: 'pkcs8';
+ };
+ }
+
+ interface ECKeyPairOptions {
+ /**
+ * Name of the curve to use.
+ */
+ namedCurve: string;
+
+ publicKeyEncoding: {
+ type: 'pkcs1' | 'spki';
+ format: PubF;
+ };
+ privateKeyEncoding: BasePrivateKeyEncodingOptions & {
+ type: 'sec1' | 'pkcs8';
+ };
+ }
+
+ interface KeyPairSyncResult {
+ publicKey: T1;
+ privateKey: T2;
+ }
+
+ function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'rsa', options: RSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'dsa', options: DSAKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'ec', options: ECKeyPairOptions<'der', 'der'>): KeyPairSyncResult;
+ function generateKeyPairSync(type: 'ec', options: ECKeyPairKeyObjectOptions): KeyPairKeyObjectResult;
+
+ function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
+ function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
+ function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
+ function generateKeyPair(type: 'rsa', options: RSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
+ function generateKeyPair(type: 'rsa', options: RSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
+
+ function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
+ function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
+ function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
+ function generateKeyPair(type: 'dsa', options: DSAKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
+ function generateKeyPair(type: 'dsa', options: DSAKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
+
+ function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'pem'>, callback: (err: Error | null, publicKey: string, privateKey: string) => void): void;
+ function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'pem', 'der'>, callback: (err: Error | null, publicKey: string, privateKey: Buffer) => void): void;
+ function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'pem'>, callback: (err: Error | null, publicKey: Buffer, privateKey: string) => void): void;
+ function generateKeyPair(type: 'ec', options: ECKeyPairOptions<'der', 'der'>, callback: (err: Error | null, publicKey: Buffer, privateKey: Buffer) => void): void;
+ function generateKeyPair(type: 'ec', options: ECKeyPairKeyObjectOptions, callback: (err: Error | null, publicKey: KeyObject, privateKey: KeyObject) => void): void;
+
+ namespace generateKeyPair {
+ function __promisify__(type: "rsa", options: RSAKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
+ function __promisify__(type: "rsa", options: RSAKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
+ function __promisify__(type: "rsa", options: RSAKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
+ function __promisify__(type: "rsa", options: RSAKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
+ function __promisify__(type: "rsa", options: RSAKeyPairKeyObjectOptions): Promise;
+
+ function __promisify__(type: "dsa", options: DSAKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
+ function __promisify__(type: "dsa", options: DSAKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
+ function __promisify__(type: "dsa", options: DSAKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
+ function __promisify__(type: "dsa", options: DSAKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
+ function __promisify__(type: "dsa", options: DSAKeyPairKeyObjectOptions): Promise;
+
+ function __promisify__(type: "ec", options: ECKeyPairOptions<'pem', 'pem'>): Promise<{ publicKey: string, privateKey: string }>;
+ function __promisify__(type: "ec", options: ECKeyPairOptions<'pem', 'der'>): Promise<{ publicKey: string, privateKey: Buffer }>;
+ function __promisify__(type: "ec", options: ECKeyPairOptions<'der', 'pem'>): Promise<{ publicKey: Buffer, privateKey: string }>;
+ function __promisify__(type: "ec", options: ECKeyPairOptions<'der', 'der'>): Promise<{ publicKey: Buffer, privateKey: Buffer }>;
+ function __promisify__(type: "ec", options: ECKeyPairKeyObjectOptions): Promise;
+ }
+
+ /**
+ * Calculates and returns the signature for `data` using the given private key and
+ * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
+ * dependent upon the key type (especially Ed25519 and Ed448).
+ *
+ * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
+ * passed to [`crypto.createPrivateKey()`][].
+ */
+ function sign(algorithm: string | null | undefined, data: Binary, key: KeyLike | SignPrivateKeyInput): Buffer;
+
+ interface VerifyKeyWithOptions extends KeyObject, SigningOptions {
+ }
+
+ /**
+ * Calculates and returns the signature for `data` using the given private key and
+ * algorithm. If `algorithm` is `null` or `undefined`, then the algorithm is
+ * dependent upon the key type (especially Ed25519 and Ed448).
+ *
+ * If `key` is not a [`KeyObject`][], this function behaves as if `key` had been
+ * passed to [`crypto.createPublicKey()`][].
+ */
+ function verify(algorithm: string | null | undefined, data: Binary, key: KeyLike | VerifyKeyWithOptions, signature: Binary): Buffer;
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/dgram.d.ts b/contrib/bake-vscode/node_modules/@types/node/dgram.d.ts
new file mode 100644
index 0000000..c42acdf
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/dgram.d.ts
@@ -0,0 +1,102 @@
+declare module "dgram" {
+ import { AddressInfo } from "net";
+ import * as dns from "dns";
+ import * as events from "events";
+
+ interface RemoteInfo {
+ address: string;
+ family: 'IPv4' | 'IPv6';
+ port: number;
+ size: number;
+ }
+
+ interface BindOptions {
+ port: number;
+ address?: string;
+ exclusive?: boolean;
+ }
+
+ type SocketType = "udp4" | "udp6";
+
+ interface SocketOptions {
+ type: SocketType;
+ reuseAddr?: boolean;
+ /**
+ * @default false
+ */
+ ipv6Only?: boolean;
+ recvBufferSize?: number;
+ sendBufferSize?: number;
+ lookup?: (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void;
+ }
+
+ function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
+ function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket;
+
+ class Socket extends events.EventEmitter {
+ send(msg: string | Uint8Array | any[], port: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
+ send(msg: string | Uint8Array, offset: number, length: number, port: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
+ bind(port?: number, address?: string, callback?: () => void): void;
+ bind(port?: number, callback?: () => void): void;
+ bind(callback?: () => void): void;
+ bind(options: BindOptions, callback?: () => void): void;
+ close(callback?: () => void): void;
+ address(): AddressInfo | string;
+ setBroadcast(flag: boolean): void;
+ setTTL(ttl: number): void;
+ setMulticastTTL(ttl: number): void;
+ setMulticastInterface(multicastInterface: string): void;
+ setMulticastLoopback(flag: boolean): void;
+ addMembership(multicastAddress: string, multicastInterface?: string): void;
+ dropMembership(multicastAddress: string, multicastInterface?: string): void;
+ ref(): this;
+ unref(): this;
+ setRecvBufferSize(size: number): void;
+ setSendBufferSize(size: number): void;
+ getRecvBufferSize(): number;
+ getSendBufferSize(): number;
+
+ /**
+ * events.EventEmitter
+ * 1. close
+ * 2. error
+ * 3. listening
+ * 4. message
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "close", listener: () => void): this;
+ addListener(event: "error", listener: (err: Error) => void): this;
+ addListener(event: "listening", listener: () => void): this;
+ addListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+ emit(event: string | symbol, ...args: any[]): boolean;
+ emit(event: "close"): boolean;
+ emit(event: "error", err: Error): boolean;
+ emit(event: "listening"): boolean;
+ emit(event: "message", msg: Buffer, rinfo: RemoteInfo): boolean;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "close", listener: () => void): this;
+ on(event: "error", listener: (err: Error) => void): this;
+ on(event: "listening", listener: () => void): this;
+ on(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "close", listener: () => void): this;
+ once(event: "error", listener: (err: Error) => void): this;
+ once(event: "listening", listener: () => void): this;
+ once(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "close", listener: () => void): this;
+ prependListener(event: "error", listener: (err: Error) => void): this;
+ prependListener(event: "listening", listener: () => void): this;
+ prependListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "close", listener: () => void): this;
+ prependOnceListener(event: "error", listener: (err: Error) => void): this;
+ prependOnceListener(event: "listening", listener: () => void): this;
+ prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
+ }
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/dns.d.ts b/contrib/bake-vscode/node_modules/@types/node/dns.d.ts
new file mode 100644
index 0000000..d2b0505
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/dns.d.ts
@@ -0,0 +1,366 @@
+declare module "dns" {
+ // Supported getaddrinfo flags.
+ const ADDRCONFIG: number;
+ const V4MAPPED: number;
+
+ interface LookupOptions {
+ family?: number;
+ hints?: number;
+ all?: boolean;
+ verbatim?: boolean;
+ }
+
+ interface LookupOneOptions extends LookupOptions {
+ all?: false;
+ }
+
+ interface LookupAllOptions extends LookupOptions {
+ all: true;
+ }
+
+ interface LookupAddress {
+ address: string;
+ family: number;
+ }
+
+ function lookup(hostname: string, family: number, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
+ function lookup(hostname: string, options: LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
+ function lookup(hostname: string, options: LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: LookupAddress[]) => void): void;
+ function lookup(hostname: string, options: LookupOptions, callback: (err: NodeJS.ErrnoException | null, address: string | LookupAddress[], family: number) => void): void;
+ function lookup(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace lookup {
+ function __promisify__(hostname: string, options: LookupAllOptions): Promise;
+ function __promisify__(hostname: string, options?: LookupOneOptions | number): Promise;
+ function __promisify__(hostname: string, options: LookupOptions): Promise;
+ }
+
+ function lookupService(address: string, port: number, callback: (err: NodeJS.ErrnoException | null, hostname: string, service: string) => void): void;
+
+ namespace lookupService {
+ function __promisify__(address: string, port: number): Promise<{ hostname: string, service: string }>;
+ }
+
+ interface ResolveOptions {
+ ttl: boolean;
+ }
+
+ interface ResolveWithTtlOptions extends ResolveOptions {
+ ttl: true;
+ }
+
+ interface RecordWithTtl {
+ address: string;
+ ttl: number;
+ }
+
+ /** @deprecated Use AnyARecord or AnyAaaaRecord instead. */
+ type AnyRecordWithTtl = AnyARecord | AnyAaaaRecord;
+
+ interface AnyARecord extends RecordWithTtl {
+ type: "A";
+ }
+
+ interface AnyAaaaRecord extends RecordWithTtl {
+ type: "AAAA";
+ }
+
+ interface MxRecord {
+ priority: number;
+ exchange: string;
+ }
+
+ interface AnyMxRecord extends MxRecord {
+ type: "MX";
+ }
+
+ interface NaptrRecord {
+ flags: string;
+ service: string;
+ regexp: string;
+ replacement: string;
+ order: number;
+ preference: number;
+ }
+
+ interface AnyNaptrRecord extends NaptrRecord {
+ type: "NAPTR";
+ }
+
+ interface SoaRecord {
+ nsname: string;
+ hostmaster: string;
+ serial: number;
+ refresh: number;
+ retry: number;
+ expire: number;
+ minttl: number;
+ }
+
+ interface AnySoaRecord extends SoaRecord {
+ type: "SOA";
+ }
+
+ interface SrvRecord {
+ priority: number;
+ weight: number;
+ port: number;
+ name: string;
+ }
+
+ interface AnySrvRecord extends SrvRecord {
+ type: "SRV";
+ }
+
+ interface AnyTxtRecord {
+ type: "TXT";
+ entries: string[];
+ }
+
+ interface AnyNsRecord {
+ type: "NS";
+ value: string;
+ }
+
+ interface AnyPtrRecord {
+ type: "PTR";
+ value: string;
+ }
+
+ interface AnyCnameRecord {
+ type: "CNAME";
+ value: string;
+ }
+
+ type AnyRecord = AnyARecord |
+ AnyAaaaRecord |
+ AnyCnameRecord |
+ AnyMxRecord |
+ AnyNaptrRecord |
+ AnyNsRecord |
+ AnyPtrRecord |
+ AnySoaRecord |
+ AnySrvRecord |
+ AnyTxtRecord;
+
+ function resolve(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve(hostname: string, rrtype: "A", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve(hostname: string, rrtype: "AAAA", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve(hostname: string, rrtype: "ANY", callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void;
+ function resolve(hostname: string, rrtype: "CNAME", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve(hostname: string, rrtype: "MX", callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void;
+ function resolve(hostname: string, rrtype: "NAPTR", callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void;
+ function resolve(hostname: string, rrtype: "NS", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve(hostname: string, rrtype: "PTR", callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve(hostname: string, rrtype: "SOA", callback: (err: NodeJS.ErrnoException | null, addresses: SoaRecord) => void): void;
+ function resolve(hostname: string, rrtype: "SRV", callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void;
+ function resolve(hostname: string, rrtype: "TXT", callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void;
+ function resolve(
+ hostname: string,
+ rrtype: string,
+ callback: (err: NodeJS.ErrnoException | null, addresses: string[] | MxRecord[] | NaptrRecord[] | SoaRecord | SrvRecord[] | string[][] | AnyRecord[]) => void,
+ ): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace resolve {
+ function __promisify__(hostname: string, rrtype?: "A" | "AAAA" | "CNAME" | "NS" | "PTR"): Promise;
+ function __promisify__(hostname: string, rrtype: "ANY"): Promise;
+ function __promisify__(hostname: string, rrtype: "MX"): Promise;
+ function __promisify__(hostname: string, rrtype: "NAPTR"): Promise;
+ function __promisify__(hostname: string, rrtype: "SOA"): Promise;
+ function __promisify__(hostname: string, rrtype: "SRV"): Promise;
+ function __promisify__(hostname: string, rrtype: "TXT"): Promise;
+ function __promisify__(hostname: string, rrtype: string): Promise;
+ }
+
+ function resolve4(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve4(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void;
+ function resolve4(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace resolve4 {
+ function __promisify__(hostname: string): Promise;
+ function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise;
+ function __promisify__(hostname: string, options?: ResolveOptions): Promise;
+ }
+
+ function resolve6(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ function resolve6(hostname: string, options: ResolveWithTtlOptions, callback: (err: NodeJS.ErrnoException | null, addresses: RecordWithTtl[]) => void): void;
+ function resolve6(hostname: string, options: ResolveOptions, callback: (err: NodeJS.ErrnoException | null, addresses: string[] | RecordWithTtl[]) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace resolve6 {
+ function __promisify__(hostname: string): Promise;
+ function __promisify__(hostname: string, options: ResolveWithTtlOptions): Promise;
+ function __promisify__(hostname: string, options?: ResolveOptions): Promise;
+ }
+
+ function resolveCname(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ namespace resolveCname {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolveMx(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: MxRecord[]) => void): void;
+ namespace resolveMx {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolveNaptr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: NaptrRecord[]) => void): void;
+ namespace resolveNaptr {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolveNs(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ namespace resolveNs {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolvePtr(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[]) => void): void;
+ namespace resolvePtr {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolveSoa(hostname: string, callback: (err: NodeJS.ErrnoException | null, address: SoaRecord) => void): void;
+ namespace resolveSoa {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolveSrv(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: SrvRecord[]) => void): void;
+ namespace resolveSrv {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolveTxt(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: string[][]) => void): void;
+ namespace resolveTxt {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function resolveAny(hostname: string, callback: (err: NodeJS.ErrnoException | null, addresses: AnyRecord[]) => void): void;
+ namespace resolveAny {
+ function __promisify__(hostname: string): Promise;
+ }
+
+ function reverse(ip: string, callback: (err: NodeJS.ErrnoException | null, hostnames: string[]) => void): void;
+ function setServers(servers: ReadonlyArray): void;
+ function getServers(): string[];
+
+ // Error codes
+ const NODATA: string;
+ const FORMERR: string;
+ const SERVFAIL: string;
+ const NOTFOUND: string;
+ const NOTIMP: string;
+ const REFUSED: string;
+ const BADQUERY: string;
+ const BADNAME: string;
+ const BADFAMILY: string;
+ const BADRESP: string;
+ const CONNREFUSED: string;
+ const TIMEOUT: string;
+ const EOF: string;
+ const FILE: string;
+ const NOMEM: string;
+ const DESTRUCTION: string;
+ const BADSTR: string;
+ const BADFLAGS: string;
+ const NONAME: string;
+ const BADHINTS: string;
+ const NOTINITIALIZED: string;
+ const LOADIPHLPAPI: string;
+ const ADDRGETNETWORKPARAMS: string;
+ const CANCELLED: string;
+
+ class Resolver {
+ getServers: typeof getServers;
+ setServers: typeof setServers;
+ resolve: typeof resolve;
+ resolve4: typeof resolve4;
+ resolve6: typeof resolve6;
+ resolveAny: typeof resolveAny;
+ resolveCname: typeof resolveCname;
+ resolveMx: typeof resolveMx;
+ resolveNaptr: typeof resolveNaptr;
+ resolveNs: typeof resolveNs;
+ resolvePtr: typeof resolvePtr;
+ resolveSoa: typeof resolveSoa;
+ resolveSrv: typeof resolveSrv;
+ resolveTxt: typeof resolveTxt;
+ reverse: typeof reverse;
+ cancel(): void;
+ }
+
+ namespace promises {
+ function getServers(): string[];
+
+ function lookup(hostname: string, family: number): Promise;
+ function lookup(hostname: string, options: LookupOneOptions): Promise;
+ function lookup(hostname: string, options: LookupAllOptions): Promise;
+ function lookup(hostname: string, options: LookupOptions): Promise;
+ function lookup(hostname: string): Promise;
+
+ function lookupService(address: string, port: number): Promise<{ hostname: string, service: string }>;
+
+ function resolve(hostname: string): Promise;
+ function resolve(hostname: string, rrtype: "A"): Promise;
+ function resolve(hostname: string, rrtype: "AAAA"): Promise;
+ function resolve(hostname: string, rrtype: "ANY"): Promise;
+ function resolve(hostname: string, rrtype: "CNAME"): Promise;
+ function resolve(hostname: string, rrtype: "MX"): Promise;
+ function resolve(hostname: string, rrtype: "NAPTR"): Promise;
+ function resolve(hostname: string, rrtype: "NS"): Promise;
+ function resolve(hostname: string, rrtype: "PTR"): Promise;
+ function resolve(hostname: string, rrtype: "SOA"): Promise;
+ function resolve(hostname: string, rrtype: "SRV"): Promise;
+ function resolve(hostname: string, rrtype: "TXT"): Promise;
+ function resolve(hostname: string, rrtype: string): Promise;
+
+ function resolve4(hostname: string): Promise;
+ function resolve4(hostname: string, options: ResolveWithTtlOptions): Promise;
+ function resolve4(hostname: string, options: ResolveOptions): Promise;
+
+ function resolve6(hostname: string): Promise;
+ function resolve6(hostname: string, options: ResolveWithTtlOptions): Promise;
+ function resolve6(hostname: string, options: ResolveOptions): Promise;
+
+ function resolveAny(hostname: string): Promise;
+
+ function resolveCname(hostname: string): Promise;
+
+ function resolveMx(hostname: string): Promise;
+
+ function resolveNaptr(hostname: string): Promise;
+
+ function resolveNs(hostname: string): Promise;
+
+ function resolvePtr(hostname: string): Promise;
+
+ function resolveSoa(hostname: string): Promise;
+
+ function resolveSrv(hostname: string): Promise;
+
+ function resolveTxt(hostname: string): Promise;
+
+ function reverse(ip: string): Promise;
+
+ function setServers(servers: ReadonlyArray): void;
+
+ class Resolver {
+ getServers: typeof getServers;
+ resolve: typeof resolve;
+ resolve4: typeof resolve4;
+ resolve6: typeof resolve6;
+ resolveAny: typeof resolveAny;
+ resolveCname: typeof resolveCname;
+ resolveMx: typeof resolveMx;
+ resolveNaptr: typeof resolveNaptr;
+ resolveNs: typeof resolveNs;
+ resolvePtr: typeof resolvePtr;
+ resolveSoa: typeof resolveSoa;
+ resolveSrv: typeof resolveSrv;
+ resolveTxt: typeof resolveTxt;
+ reverse: typeof reverse;
+ setServers: typeof setServers;
+ }
+ }
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/domain.d.ts b/contrib/bake-vscode/node_modules/@types/node/domain.d.ts
new file mode 100644
index 0000000..45e388c
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/domain.d.ts
@@ -0,0 +1,16 @@
+declare module "domain" {
+ import * as events from "events";
+
+ class Domain extends events.EventEmitter implements NodeJS.Domain {
+ run(fn: (...args: any[]) => T, ...args: any[]): T;
+ add(emitter: events.EventEmitter | NodeJS.Timer): void;
+ remove(emitter: events.EventEmitter | NodeJS.Timer): void;
+ bind(cb: T): T;
+ intercept(cb: T): T;
+ members: Array;
+ enter(): void;
+ exit(): void;
+ }
+
+ function create(): Domain;
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/events.d.ts b/contrib/bake-vscode/node_modules/@types/node/events.d.ts
new file mode 100644
index 0000000..f861021
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/events.d.ts
@@ -0,0 +1,30 @@
+declare module "events" {
+ class internal extends NodeJS.EventEmitter { }
+
+ namespace internal {
+ function once(emitter: EventEmitter, event: string | symbol): Promise;
+ class EventEmitter extends internal {
+ /** @deprecated since v4.0.0 */
+ static listenerCount(emitter: EventEmitter, event: string | symbol): number;
+ static defaultMaxListeners: number;
+
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
+ off(event: string | symbol, listener: (...args: any[]) => void): this;
+ removeAllListeners(event?: string | symbol): this;
+ setMaxListeners(n: number): this;
+ getMaxListeners(): number;
+ listeners(event: string | symbol): Function[];
+ rawListeners(event: string | symbol): Function[];
+ emit(event: string | symbol, ...args: any[]): boolean;
+ eventNames(): Array;
+ listenerCount(type: string | symbol): number;
+ }
+ }
+
+ export = internal;
+}
diff --git a/contrib/bake-vscode/node_modules/@types/node/fs.d.ts b/contrib/bake-vscode/node_modules/@types/node/fs.d.ts
new file mode 100644
index 0000000..bc015ce
--- /dev/null
+++ b/contrib/bake-vscode/node_modules/@types/node/fs.d.ts
@@ -0,0 +1,2297 @@
+declare module "fs" {
+ import * as stream from "stream";
+ import * as events from "events";
+ import { URL } from "url";
+
+ /**
+ * Valid types for path values in "fs".
+ */
+ type PathLike = string | Buffer | URL;
+
+ type BinaryData = DataView | NodeJS.TypedArray;
+ class Stats {
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isBlockDevice(): boolean;
+ isCharacterDevice(): boolean;
+ isSymbolicLink(): boolean;
+ isFIFO(): boolean;
+ isSocket(): boolean;
+ dev: number;
+ ino: number;
+ mode: number;
+ nlink: number;
+ uid: number;
+ gid: number;
+ rdev: number;
+ size: number;
+ blksize: number;
+ blocks: number;
+ atimeMs: number;
+ mtimeMs: number;
+ ctimeMs: number;
+ birthtimeMs: number;
+ atime: Date;
+ mtime: Date;
+ ctime: Date;
+ birthtime: Date;
+ }
+
+ class Dirent {
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isBlockDevice(): boolean;
+ isCharacterDevice(): boolean;
+ isSymbolicLink(): boolean;
+ isFIFO(): boolean;
+ isSocket(): boolean;
+ name: string;
+ }
+
+ interface FSWatcher extends events.EventEmitter {
+ close(): void;
+
+ /**
+ * events.EventEmitter
+ * 1. change
+ * 2. error
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+ addListener(event: "error", listener: (error: Error) => void): this;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+ on(event: "error", listener: (error: Error) => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+ once(event: "error", listener: (error: Error) => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+ prependListener(event: "error", listener: (error: Error) => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
+ prependOnceListener(event: "error", listener: (error: Error) => void): this;
+ }
+
+ class ReadStream extends stream.Readable {
+ close(): void;
+ bytesRead: number;
+ path: string | Buffer;
+
+ /**
+ * events.EventEmitter
+ * 1. open
+ * 2. close
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "open", listener: (fd: number) => void): this;
+ addListener(event: "close", listener: () => void): this;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "open", listener: (fd: number) => void): this;
+ on(event: "close", listener: () => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "open", listener: (fd: number) => void): this;
+ once(event: "close", listener: () => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "open", listener: (fd: number) => void): this;
+ prependListener(event: "close", listener: () => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "open", listener: (fd: number) => void): this;
+ prependOnceListener(event: "close", listener: () => void): this;
+ }
+
+ class WriteStream extends stream.Writable {
+ close(): void;
+ bytesWritten: number;
+ path: string | Buffer;
+
+ /**
+ * events.EventEmitter
+ * 1. open
+ * 2. close
+ */
+ addListener(event: string, listener: (...args: any[]) => void): this;
+ addListener(event: "open", listener: (fd: number) => void): this;
+ addListener(event: "close", listener: () => void): this;
+
+ on(event: string, listener: (...args: any[]) => void): this;
+ on(event: "open", listener: (fd: number) => void): this;
+ on(event: "close", listener: () => void): this;
+
+ once(event: string, listener: (...args: any[]) => void): this;
+ once(event: "open", listener: (fd: number) => void): this;
+ once(event: "close", listener: () => void): this;
+
+ prependListener(event: string, listener: (...args: any[]) => void): this;
+ prependListener(event: "open", listener: (fd: number) => void): this;
+ prependListener(event: "close", listener: () => void): this;
+
+ prependOnceListener(event: string, listener: (...args: any[]) => void): this;
+ prependOnceListener(event: "open", listener: (fd: number) => void): this;
+ prependOnceListener(event: "close", listener: () => void): this;
+ }
+
+ /**
+ * Asynchronous rename(2) - Change the name or location of a file or directory.
+ * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * URL support is _experimental_.
+ * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * URL support is _experimental_.
+ */
+ function rename(oldPath: PathLike, newPath: PathLike, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace rename {
+ /**
+ * Asynchronous rename(2) - Change the name or location of a file or directory.
+ * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * URL support is _experimental_.
+ * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * URL support is _experimental_.
+ */
+ function __promisify__(oldPath: PathLike, newPath: PathLike): Promise;
+ }
+
+ /**
+ * Synchronous rename(2) - Change the name or location of a file or directory.
+ * @param oldPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * URL support is _experimental_.
+ * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * URL support is _experimental_.
+ */
+ function renameSync(oldPath: PathLike, newPath: PathLike): void;
+
+ /**
+ * Asynchronous truncate(2) - Truncate a file to a specified length.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param len If not specified, defaults to `0`.
+ */
+ function truncate(path: PathLike, len: number | undefined | null, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ /**
+ * Asynchronous truncate(2) - Truncate a file to a specified length.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * URL support is _experimental_.
+ */
+ function truncate(path: PathLike, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace truncate {
+ /**
+ * Asynchronous truncate(2) - Truncate a file to a specified length.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param len If not specified, defaults to `0`.
+ */
+ function __promisify__(path: PathLike, len?: number | null): Promise;
+ }
+
+ /**
+ * Synchronous truncate(2) - Truncate a file to a specified length.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param len If not specified, defaults to `0`.
+ */
+ function truncateSync(path: PathLike, len?: number | null): void;
+
+ /**
+ * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+ * @param fd A file descriptor.
+ * @param len If not specified, defaults to `0`.
+ */
+ function ftruncate(fd: number, len: number | undefined | null, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ /**
+ * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+ * @param fd A file descriptor.
+ */
+ function ftruncate(fd: number, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace ftruncate {
+ /**
+ * Asynchronous ftruncate(2) - Truncate a file to a specified length.
+ * @param fd A file descriptor.
+ * @param len If not specified, defaults to `0`.
+ */
+ function __promisify__(fd: number, len?: number | null): Promise;
+ }
+
+ /**
+ * Synchronous ftruncate(2) - Truncate a file to a specified length.
+ * @param fd A file descriptor.
+ * @param len If not specified, defaults to `0`.
+ */
+ function ftruncateSync(fd: number, len?: number | null): void;
+
+ /**
+ * Asynchronous chown(2) - Change ownership of a file.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function chown(path: PathLike, uid: number, gid: number, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace chown {
+ /**
+ * Asynchronous chown(2) - Change ownership of a file.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function __promisify__(path: PathLike, uid: number, gid: number): Promise;
+ }
+
+ /**
+ * Synchronous chown(2) - Change ownership of a file.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function chownSync(path: PathLike, uid: number, gid: number): void;
+
+ /**
+ * Asynchronous fchown(2) - Change ownership of a file.
+ * @param fd A file descriptor.
+ */
+ function fchown(fd: number, uid: number, gid: number, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace fchown {
+ /**
+ * Asynchronous fchown(2) - Change ownership of a file.
+ * @param fd A file descriptor.
+ */
+ function __promisify__(fd: number, uid: number, gid: number): Promise;
+ }
+
+ /**
+ * Synchronous fchown(2) - Change ownership of a file.
+ * @param fd A file descriptor.
+ */
+ function fchownSync(fd: number, uid: number, gid: number): void;
+
+ /**
+ * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function lchown(path: PathLike, uid: number, gid: number, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace lchown {
+ /**
+ * Asynchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function __promisify__(path: PathLike, uid: number, gid: number): Promise;
+ }
+
+ /**
+ * Synchronous lchown(2) - Change ownership of a file. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function lchownSync(path: PathLike, uid: number, gid: number): void;
+
+ /**
+ * Asynchronous chmod(2) - Change permissions of a file.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function chmod(path: PathLike, mode: string | number, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace chmod {
+ /**
+ * Asynchronous chmod(2) - Change permissions of a file.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function __promisify__(path: PathLike, mode: string | number): Promise;
+ }
+
+ /**
+ * Synchronous chmod(2) - Change permissions of a file.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function chmodSync(path: PathLike, mode: string | number): void;
+
+ /**
+ * Asynchronous fchmod(2) - Change permissions of a file.
+ * @param fd A file descriptor.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function fchmod(fd: number, mode: string | number, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace fchmod {
+ /**
+ * Asynchronous fchmod(2) - Change permissions of a file.
+ * @param fd A file descriptor.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function __promisify__(fd: number, mode: string | number): Promise;
+ }
+
+ /**
+ * Synchronous fchmod(2) - Change permissions of a file.
+ * @param fd A file descriptor.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function fchmodSync(fd: number, mode: string | number): void;
+
+ /**
+ * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function lchmod(path: PathLike, mode: string | number, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace lchmod {
+ /**
+ * Asynchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function __promisify__(path: PathLike, mode: string | number): Promise;
+ }
+
+ /**
+ * Synchronous lchmod(2) - Change permissions of a file. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param mode A file mode. If a string is passed, it is parsed as an octal integer.
+ */
+ function lchmodSync(path: PathLike, mode: string | number): void;
+
+ /**
+ * Asynchronous stat(2) - Get file status.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function stat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace stat {
+ /**
+ * Asynchronous stat(2) - Get file status.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function __promisify__(path: PathLike): Promise;
+ }
+
+ /**
+ * Synchronous stat(2) - Get file status.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function statSync(path: PathLike): Stats;
+
+ /**
+ * Asynchronous fstat(2) - Get file status.
+ * @param fd A file descriptor.
+ */
+ function fstat(fd: number, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace fstat {
+ /**
+ * Asynchronous fstat(2) - Get file status.
+ * @param fd A file descriptor.
+ */
+ function __promisify__(fd: number): Promise;
+ }
+
+ /**
+ * Synchronous fstat(2) - Get file status.
+ * @param fd A file descriptor.
+ */
+ function fstatSync(fd: number): Stats;
+
+ /**
+ * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function lstat(path: PathLike, callback: (err: NodeJS.ErrnoException | null, stats: Stats) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace lstat {
+ /**
+ * Asynchronous lstat(2) - Get file status. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function __promisify__(path: PathLike): Promise;
+ }
+
+ /**
+ * Synchronous lstat(2) - Get file status. Does not dereference symbolic links.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function lstatSync(path: PathLike): Stats;
+
+ /**
+ * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+ * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function link(existingPath: PathLike, newPath: PathLike, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace link {
+ /**
+ * Asynchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+ * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function link(existingPath: PathLike, newPath: PathLike): Promise;
+ }
+
+ /**
+ * Synchronous link(2) - Create a new link (also known as a hard link) to an existing file.
+ * @param existingPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param newPath A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function linkSync(existingPath: PathLike, newPath: PathLike): void;
+
+ /**
+ * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+ * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+ * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+ * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+ * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+ */
+ function symlink(target: PathLike, path: PathLike, type: symlink.Type | undefined | null, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ /**
+ * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+ * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+ * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+ */
+ function symlink(target: PathLike, path: PathLike, callback: (err: NodeJS.ErrnoException | null) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace symlink {
+ /**
+ * Asynchronous symlink(2) - Create a new symbolic link to an existing file.
+ * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+ * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+ * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+ * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+ */
+ function __promisify__(target: PathLike, path: PathLike, type?: string | null): Promise;
+
+ type Type = "dir" | "file" | "junction";
+ }
+
+ /**
+ * Synchronous symlink(2) - Create a new symbolic link to an existing file.
+ * @param target A path to an existing file. If a URL is provided, it must use the `file:` protocol.
+ * @param path A path to the new symlink. If a URL is provided, it must use the `file:` protocol.
+ * @param type May be set to `'dir'`, `'file'`, or `'junction'` (default is `'file'`) and is only available on Windows (ignored on other platforms).
+ * When using `'junction'`, the `target` argument will automatically be normalized to an absolute path.
+ */
+ function symlinkSync(target: PathLike, path: PathLike, type?: symlink.Type | null): void;
+
+ /**
+ * Asynchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function readlink(
+ path: PathLike,
+ options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null,
+ callback: (err: NodeJS.ErrnoException | null, linkString: string) => void
+ ): void;
+
+ /**
+ * Asynchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function readlink(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException | null, linkString: Buffer) => void): void;
+
+ /**
+ * Asynchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function readlink(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException | null, linkString: string | Buffer) => void): void;
+
+ /**
+ * Asynchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function readlink(path: PathLike, callback: (err: NodeJS.ErrnoException | null, linkString: string) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace readlink {
+ /**
+ * Asynchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function __promisify__(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise;
+
+ /**
+ * Asynchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function __promisify__(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise;
+
+ /**
+ * Asynchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function __promisify__(path: PathLike, options?: { encoding?: string | null } | string | null): Promise;
+ }
+
+ /**
+ * Synchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function readlinkSync(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): string;
+
+ /**
+ * Synchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function readlinkSync(path: PathLike, options: { encoding: "buffer" } | "buffer"): Buffer;
+
+ /**
+ * Synchronous readlink(2) - read value of a symbolic link.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function readlinkSync(path: PathLike, options?: { encoding?: string | null } | string | null): string | Buffer;
+
+ /**
+ * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function realpath(
+ path: PathLike,
+ options: { encoding?: BufferEncoding | null } | BufferEncoding | undefined | null,
+ callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void
+ ): void;
+
+ /**
+ * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function realpath(path: PathLike, options: { encoding: "buffer" } | "buffer", callback: (err: NodeJS.ErrnoException | null, resolvedPath: Buffer) => void): void;
+
+ /**
+ * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function realpath(path: PathLike, options: { encoding?: string | null } | string | undefined | null, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string | Buffer) => void): void;
+
+ /**
+ * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ */
+ function realpath(path: PathLike, callback: (err: NodeJS.ErrnoException | null, resolvedPath: string) => void): void;
+
+ // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime.
+ namespace realpath {
+ /**
+ * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function __promisify__(path: PathLike, options?: { encoding?: BufferEncoding | null } | BufferEncoding | null): Promise;
+
+ /**
+ * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function __promisify__(path: PathLike, options: { encoding: "buffer" } | "buffer"): Promise;
+
+ /**
+ * Asynchronous realpath(3) - return the canonicalized absolute pathname.
+ * @param path A path to a file. If a URL is provided, it must use the `file:` protocol.
+ * @param options The encoding (or an object specifying the encoding), used as the encoding of the result. If not provided, `'utf8'` is used.
+ */
+ function __promisify__(path: PathLike, options?: { encoding?: string | null } | string | null): Promise