diff --git a/.all-contributorsrc b/.all-contributorsrc new file mode 100644 index 0000000..6c4ee18 --- /dev/null +++ b/.all-contributorsrc @@ -0,0 +1,313 @@ +{ + "projectName": "WeTTy", + "projectOwner": "butlerx", + "repoType": "github", + "repoHost": "https://github.com", + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": true, + "commitConvention": "eslint", + "contributors": [ + { + "login": "butlerx", + "name": "Cian Butler", + "avatar_url": "https://avatars1.githubusercontent.com/u/867930?v=4", + "profile": "http://cianbutler.ie", + "contributions": [ + "code", + "doc" + ] + }, + { + "login": "krishnasrinivas", + "name": "Krishna Srinivas", + "avatar_url": "https://avatars0.githubusercontent.com/u/634494?v=4", + "profile": "http://about.me/krishnasrinivas", + "contributions": [ + "code" + ] + }, + { + "login": "acalatrava", + "name": "acalatrava", + "avatar_url": "https://avatars1.githubusercontent.com/u/8502129?v=4", + "profile": "https://github.com/acalatrava", + "contributions": [ + "code" + ] + }, + { + "login": "Strubbl", + "name": "Strubbl", + "avatar_url": "https://avatars3.githubusercontent.com/u/97055?v=4", + "profile": "https://github.com/Strubbl", + "contributions": [ + "code" + ] + }, + { + "login": "2sheds", + "name": "Oleg Kurapov", + "avatar_url": "https://avatars3.githubusercontent.com/u/16163?v=4", + "profile": "https://github.com/2sheds", + "contributions": [ + "code" + ] + }, + { + "login": "rabchev", + "name": "Boyan Rabchev", + "avatar_url": "https://avatars0.githubusercontent.com/u/1876061?v=4", + "profile": "http://www.rabchev.com", + "contributions": [ + "code" + ] + }, + { + "login": "nosemeocurrenada", + "name": "Jimmy", + "avatar_url": "https://avatars1.githubusercontent.com/u/3845708?v=4", + "profile": "https://github.com/nosemeocurrenada", + "contributions": [ + "code" + ] + }, + { + "login": "lucamilanesio", + "name": "Luca Milanesio", + "avatar_url": "https://avatars3.githubusercontent.com/u/182893?v=4", + "profile": "http://www.gerritforge.com", + "contributions": [ + "code" + ] + }, + { + "login": "antonyjim", + "name": "Anthony Jund", + "avatar_url": "https://avatars3.githubusercontent.com/u/39376331?v=4", + "profile": "http://anthonyjund.com", + "contributions": [ + "code" + ] + }, + { + "login": "mirtouf", + "name": "mirtouf", + "avatar_url": "https://avatars3.githubusercontent.com/u/5165058?v=4", + "profile": "https://www.mirtouf.fr", + "contributions": [ + "code" + ] + }, + { + "login": "CoRfr", + "name": "Bertrand Roussel", + "avatar_url": "https://avatars1.githubusercontent.com/u/556693?v=4", + "profile": "https://cor-net.org", + "contributions": [ + "code" + ] + }, + { + "login": "benletchford", + "name": "Ben Letchford", + "avatar_url": "https://avatars0.githubusercontent.com/u/6703966?v=4", + "profile": "https://www.benl.com.au/", + "contributions": [ + "code" + ] + }, + { + "login": "SouraDutta", + "name": "SouraDutta", + "avatar_url": "https://avatars0.githubusercontent.com/u/33066261?v=4", + "profile": "https://github.com/SouraDutta", + "contributions": [ + "code" + ] + }, + { + "login": "koushikmln", + "name": "Koushik M.L.N", + "avatar_url": "https://avatars3.githubusercontent.com/u/8670988?v=4", + "profile": "https://github.com/koushikmln", + "contributions": [ + "code" + ] + }, + { + "login": "imuli", + "name": "Imuli", + "avatar_url": "https://avatars3.githubusercontent.com/u/4085046?v=4", + "profile": "https://imu.li/", + "contributions": [ + "code" + ] + }, + { + "login": "perpen", + "name": "perpen", + "avatar_url": "https://avatars2.githubusercontent.com/u/9963805?v=4", + "profile": "https://github.com/perpen", + "contributions": [ + "code" + ] + }, + { + "login": "nathanleclaire", + "name": "Nathan LeClaire", + "avatar_url": "https://avatars3.githubusercontent.com/u/1476820?v=4", + "profile": "https://nathanleclaire.com", + "contributions": [ + "code" + ] + }, + { + "login": "MiKr13", + "name": "Mihir Kumar", + "avatar_url": "https://avatars2.githubusercontent.com/u/34394719?v=4", + "profile": "https://github.com/MiKr13", + "contributions": [ + "code" + ] + }, + { + "login": "cardil", + "name": "Chris Suszynski", + "avatar_url": "https://avatars0.githubusercontent.com/u/540893?v=4", + "profile": "http://redhat.com", + "contributions": [ + "code" + ] + }, + { + "login": "fbartels", + "name": "Felix Bartels", + "avatar_url": "https://avatars1.githubusercontent.com/u/1257835?v=4", + "profile": "http://9wd.de", + "contributions": [ + "code" + ] + }, + { + "login": "jarrettgilliam", + "name": "Jarrett Gilliam", + "avatar_url": "https://avatars3.githubusercontent.com/u/5099690?v=4", + "profile": "https://github.com/jarrettgilliam", + "contributions": [ + "code" + ] + }, + { + "login": "harryleesan", + "name": "Harry Lee", + "avatar_url": "https://avatars0.githubusercontent.com/u/7056279?v=4", + "profile": "https://harrylee.me", + "contributions": [ + "code" + ] + }, + { + "login": "inducer", + "name": "Andreas KlΓΆckner", + "avatar_url": "https://avatars3.githubusercontent.com/u/352067?v=4", + "profile": "http://andreask.cs.illinois.edu", + "contributions": [ + "code" + ] + }, + { + "login": "DenisKramer", + "name": "DenisKramer", + "avatar_url": "https://avatars1.githubusercontent.com/u/23534092?v=4", + "profile": "https://github.com/DenisKramer", + "contributions": [ + "code" + ] + }, + { + "login": "vamship", + "name": "Vamshi K Ponnapalli", + "avatar_url": "https://avatars0.githubusercontent.com/u/7143376?v=4", + "profile": "https://github.com/vamship", + "contributions": [ + "code" + ] + }, + { + "login": "tnguyen14", + "name": "Tri Nguyen", + "avatar_url": "https://avatars1.githubusercontent.com/u/1652595?v=4", + "profile": "https://tridnguyen.com", + "contributions": [ + "doc" + ] + }, + { + "login": "pojntfx", + "name": "Felix Pojtinger", + "avatar_url": "https://avatars1.githubusercontent.com/u/28832235?v=4", + "profile": "https://felix.pojtinger.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "nealey", + "name": "Neale Pickett", + "avatar_url": "https://avatars3.githubusercontent.com/u/423780?v=4", + "profile": "https://nealey.github.io/", + "contributions": [ + "code" + ] + }, + { + "login": "mtpiercey", + "name": "Matthew Piercey", + "avatar_url": "https://avatars3.githubusercontent.com/u/22581026?v=4", + "profile": "https://www.matthewpiercey.ml", + "contributions": [ + "doc" + ] + }, + { + "login": "kholbekj", + "name": "Kasper Holbek Jensen", + "avatar_url": "https://avatars3.githubusercontent.com/u/2786571?v=4", + "profile": "https://github.com/kholbekj", + "contributions": [ + "doc" + ] + }, + { + "login": "khanzf", + "name": "Farhan Khan", + "avatar_url": "https://avatars1.githubusercontent.com/u/10103765?v=4", + "profile": "https://mastodon.technology/@farhan", + "contributions": [ + "code" + ] + }, + { + "login": "jurruh", + "name": "Jurre Vriesen", + "avatar_url": "https://avatars1.githubusercontent.com/u/7419259?v=4", + "profile": "https://www.jurrevriesen.nl", + "contributions": [ + "code" + ] + }, + { + "login": "jamtur01", + "name": "James Turnbull", + "avatar_url": "https://avatars3.githubusercontent.com/u/4365?v=4", + "profile": "https://www.kartar.net/", + "contributions": [ + "code" + ] + } + ], + "contributorsPerLine": 7 +} diff --git a/.eslintrc.js b/.eslintrc.js index a1e07b0..ed17ec6 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,6 +20,7 @@ module.exports = { 'func-style': ['error', 'declaration', { allowArrowFunctions: true }], 'no-use-before-define': ['error', { functions: false }], '@typescript-eslint/no-use-before-define': ['error', { functions: false }], + 'import/prefer-default-export': 'off', }, settings: { 'import/resolver': { @@ -27,5 +28,5 @@ module.exports = { extensions: ['.ts', '.js'], }, }, - } + }, }; diff --git a/README.md b/README.md index 414a8ce..a7e265b 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,37 @@ -## WeTTy = Web + TTy +# WeTTY = Web + TTY. + +[![All Contributors](https://img.shields.io/badge/all_contributors-33-orange.svg?style=flat-square)](#contributors-) + +![Version](https://img.shields.io/badge/version-1.1.7-blue.svg?cacheSeconds=2592000) +![Node Version](https://img.shields.io/badge/node-%3E%3D6.9-blue.svg) +[![Documentation](https://img.shields.io/badge/documentation-yes-brightgreen.svg)](https://github.com/butlerx/wetty/tree/master/docs) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/butlerx/wetty/blob/master/LICENSE) +[![Twitter: cianbutlerx](https://img.shields.io/twitter/follow/cianbutlerx.svg?style=social)](https://twitter.com/cianbutlerx) + +> Terminal access in browser over http/https Terminal over HTTP and https. WeTTy is an alternative to ajaxterm and anyterm but much better than them because WeTTy uses xterm.js which is a full fledged implementation of terminal emulation written entirely in JavaScript. WeTTy uses websockets rather then Ajax and hence better response time. -![WeTTy](/terminal.png?raw=true) - -## Install - -### Requiments +## Prerequisites -To instal WeTTy you'll need to have the following installed: - -- Node.JS 10+ +- node >=6.9 - make - python - build-essential -### From source - -WeTTy can be installed from source or from npm. - -To install from source run: +## Install -```bash -$ git clone https://github.com/butlerx/wetty.git -$ cd wetty -$ yarn -$ yarn build +```sh +yarn global add wetty ``` -### From NPM - -To install it globally from npm use yarn or npm: +## Usage -- yarn, `yarn global add wetty` -- npm, `npm i -g wetty` - -### Autologin - -For auto-login feature you'll need sshpass installed (NOT required for rest of -the program). - -- `apt-get install sshpass` (debian eg. Ubuntu) -- `yum install sshpass` (red hat flavours eg. CentOs) - -## Running WeTTy - -Wetty can either be run as a standalone service or from another node script. To -see how to use WeTTy from node see the [API Doc](./docs) - -```bash -$ node index.js +```sh +wetty [-h] [--port PORT] [--base BASE] [--sshhost SSH_HOST] [--sshport SSH_PORT] [--sshuser SSH_USER] [--host HOST] [--command COMMAND] [--bypasshelmet] [--title TITLE] [--sslkey SSL_KEY_PATH] [--sslcert SSL_CERT_PATH] ``` Open your browser on `http://yourserver:3000/wetty` and you will prompted to @@ -66,207 +45,111 @@ If instead you wish to connect to a remote host you can specify the `--sshhost` option, the SSH port using the `--sshport` option and the SSH user using the `--sshuser` option. -### Flags - -WeTTy can be run with the `--help` flag to get a full list of flags. - -#### Server Port - -WeTTy runs on port `3000` by default. You can change the default port by -starting with the `--port` or `-p` flag. - -#### SSH Host - -If WeTTy is run as root while the host is set as the local machine it will use -the `login` binary rather than ssh. If no host is specified it will use -`localhost` as the ssh host. - -If instead you wish to connect to a remote host you can specify the host with -the `--sshhost` flag and pass the IP or DNS address of the host you want to -connect to. - -#### Default User - -You can specify the default user used to ssh to a host using the `--sshuser`. -This user can overwritten by going to `http://yourserver:3000/ssh/`. -If this is left blank a user will be prompted to enter their username when they -connect. - -#### SSH Port - -By default WeTTy will try to ssh to port `22`, if your host uses an alternative -ssh port this can be specified with the flag `--sshport`. - -#### WeTTy URL - -If you'd prefer an HTTP base prefix other than `/wetty`, you can specify that -with `--base`. - -**Do not set this to `/ssh/${something}`, as this will break username matching -code.** - -#### HTTPS - -Always use HTTPS especially with a terminal to your server. You can add HTTPS by -either using WeTTy behind a proxy or directly. - -To run WeTTy directly with ssl use both the `--sslkey` and `--sslcert` flags and -pass them the path too your cert and key as follows: - -```bash -node index.js --sslkey key.pem --sslcert cert.pem -``` - -If you don't have SSL certificates from a CA you can create a self signed -certificate using this command: - -``` -openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 30000 -nodes -``` - -### Auto Login: - -You can also pass the ssh password as an optional query parameter to auto-login -the user like this (Only while running wetty as a non root account): - -`http://yourserver:3000/wetty/ssh/?sshpass=` - -This is not a required feature and the security implications for passing the -password in the url will have to be considered by the user - -### File Downloading - -Wetty supports file downloads by printing terminal escape sequences between a -base64 encoded file. +Check out the +[Flags docs](https://github.com/butlerx/wetty/blob/master/docs/flags.md) for a +full list of flags -The terminal escape sequences used are `^[[5i` and `^[[4i` (VT100 for "enter -auto print" and "exit auto print" respectively - -https://vt100.net/docs/tp83/appendixc.html). - -An example of a helper script that prints the terminal escape characters and -base64s stdin: - -``` -$ cat wetty-download.sh -#!/bin/sh -echo '^[[5i'$(cat /dev/stdin | base64)'^[[4i' -``` - -You are then able to download files via wetty! - -``` -$ cat my-pdf-file.pdf | ./wetty-download.sh -``` - -Wetty will then issue a popup like the following that links to a local file -blob: - -`Download ready: file-20191015233654.pdf` - -## Run wetty behind nginx or apache - -As said earlier you can use a proxy to add https to WeTTy. - -**Note** that if your proxy is configured for https you should run WeTTy without -SSL - -If your proxy uses a base path other than `/wetty`, specify the path with the -`--base` flag, or the `BASE` environment variable. - -The following confs assume you want to serve wetty on the url -`example.com/wetty` and are running wetty with the default base and serving it -on the same server - -#### Nginx - -For a more detailed look see the [nginx.conf](./bin/nginx.template) used for -testing - -Put the following configuration in nginx's conf: - -```nginx -location /wetty { - proxy_pass http://127.0.0.1:3000/wetty; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_read_timeout 43200000; - - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header Host $http_host; - proxy_set_header X-NginX-Proxy true; -} -``` - -#### Apache - -Put the following configuration in apache's conf: - -```apache -RewriteCond %{REQUEST_URI} ^/wetty/socket.io [NC] -RewriteCond %{QUERY_STRING} transport=websocket [NC] -RewriteRule /wetty/socket.io/(.*) ws://localhost:3000/wetty/socket.io/$1 [P,L] - - - DirectorySlash On - Require all granted - ProxyPassMatch http://127.0.0.1:3000 - ProxyPassReverse /wetty/ - -``` - -### Dockerized Version - -WeTTy can be run from a container to ssh to a remote host or the host system. -This is handy for quick deployments. Just modify `docker-compose.yml` for your -host and run: - -```sh -$ docker-compose up -d -``` - -Visit the appropriate URL in your browser -(`[localhost|$(boot2docker ip)]:PORT`). - -The default username is `term` and the password is `term`, if you did not modify -`SSHHOST` - -In the docker version all flags can be accessed as environment variables such as -`SSHHOST` or `SSHPORT`. - -If you dont want to build the image yourself just remove the line `build; .` - -## Run WeTTy as a service daemon - -### init.d - -```bash -$ sudo yarn global add wetty -$ sudo cp ~/.config/yarn/global/node_modules/wetty/bin/wetty.conf /etc/init -$ sudo start wetty -``` - -### systemd - -```bash -$ yarn global add wetty -$ cp ~/.config/yarn/global/node_modules/wetty/bin/wetty.service ~/.config/systemd/user/ -$ systemctl --user enable wetty -$ systemctl --user start wetty -``` +## FAQ -This will start WeTTy on port 3000. If you want to change the port or redirect -stdout/stderr you should change the last line in `wetty.conf` file, something -like this: +Check out the [docs](https://github.com/butlerx/wetty/tree/master/docs) -```systemd -exec sudo -u root wetty -p 80 >> /var/log/wetty.log 2>&1 -``` - -## FAQ +- [Running as daemon](https://github.com/butlerx/wetty/blob/master/docs/service.md) +- [SSL Support](https://github.com/butlerx/wetty/blob/master/docs/ssl.md) + - [Using NGINX](https://github.com/butlerx/wetty/blob/master/docs/nginx.md) + - [Using Apache](https://github.com/butlerx/wetty/blob/master/docs/apache.md) +- [Automatic Login](https://github.com/butlerx/wetty/blob/master/docs/auto-login.md) +- [Downloading Files](https://github.com/butlerx/wetty/blob/master/docs/downloading-files.md) ### What browsers are supported? WeTTy supports all browsers that [xterm.js supports](https://github.com/xtermjs/xterm.js#browser-support). + +## Author + +πŸ‘€ **Cian Butler ** + +- Twitter: [@cianbutlerx](https://twitter.com/cianbutlerx) +- Github: [@butlerx](https://github.com/butlerx) + +## Contributing ✨ + +Contributions, issues and feature requests are welcome!
Feel free to check +[issues page](https://github.com/butlerx/wetty/issues). + +Please read the +[development docs](https://github.com/butlerx/wetty/blob/master/docs/development.md) +for installing from source and running is dev node + +Thanks goes to these wonderful people +([emoji key](https://allcontributors.org/docs/en/emoji-key)): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cian Butler
Cian Butler

πŸ’» πŸ“–
Krishna Srinivas
Krishna Srinivas

πŸ’»
acalatrava
acalatrava

πŸ’»
Strubbl
Strubbl

πŸ’»
Oleg Kurapov
Oleg Kurapov

πŸ’»
Boyan Rabchev
Boyan Rabchev

πŸ’»
Jimmy
Jimmy

πŸ’»
Luca Milanesio
Luca Milanesio

πŸ’»
Anthony Jund
Anthony Jund

πŸ’»
mirtouf
mirtouf

πŸ’»
Bertrand Roussel
Bertrand Roussel

πŸ’»
Ben Letchford
Ben Letchford

πŸ’»
SouraDutta
SouraDutta

πŸ’»
Koushik M.L.N
Koushik M.L.N

πŸ’»
Imuli
Imuli

πŸ’»
perpen
perpen

πŸ’»
Nathan LeClaire
Nathan LeClaire

πŸ’»
Mihir Kumar
Mihir Kumar

πŸ’»
Chris Suszynski
Chris Suszynski

πŸ’»
Felix Bartels
Felix Bartels

πŸ’»
Jarrett Gilliam
Jarrett Gilliam

πŸ’»
Harry Lee
Harry Lee

πŸ’»
Andreas KlΓΆckner
Andreas KlΓΆckner

πŸ’»
DenisKramer
DenisKramer

πŸ’»
Vamshi K Ponnapalli
Vamshi K Ponnapalli

πŸ’»
Tri Nguyen
Tri Nguyen

πŸ“–
Felix Pojtinger
Felix Pojtinger

πŸ“–
Neale Pickett
Neale Pickett

πŸ’»
Matthew Piercey
Matthew Piercey

πŸ“–
Kasper Holbek Jensen
Kasper Holbek Jensen

πŸ“–
Farhan Khan
Farhan Khan

πŸ’»
Jurre Vriesen
Jurre Vriesen

πŸ’»
James Turnbull
James Turnbull

πŸ’»
+ + + + + + +This project follows the +[all-contributors](https://github.com/all-contributors/all-contributors) +specification. Contributions of any kind welcome! + +## Show your support + +Give a ⭐️ if this project helped you! + +## πŸ“ License + +Copyright Β© 2019 +[Cian Butler ](https://github.com/butlerx).
This +project is [MIT](https://github.com/butlerx/wetty/blob/master/LICENSE) licensed. + +--- diff --git a/docker-compose.yml b/docker-compose.yml index a1ea398..2caec0f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,5 @@ --- -version: "3.5" +version: '3.5' services: wetty: build: . @@ -8,7 +8,7 @@ services: tty: true working_dir: /usr/src/app ports: - - "3000:3000" + - '3000:3000' environment: SSHHOST: 'wetty-ssh' SSHPORT: 22 @@ -20,13 +20,17 @@ services: volumes: - ./bin/nginx.template:/etc/nginx/conf.d/wetty.template ports: - - "80:80" + - '80:80' environment: - NGINX_DOMAIN=wetty.com - NGINX_PORT=80 - WETTY_HOST=wetty - WETTY_PORT=3000 - command: /bin/bash -c "envsubst '$${NGINX_DOMAIN},$${NGINX_PORT},$${WETTY_HOST},$${WETTY_PORT}' < /etc/nginx/conf.d/wetty.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" + command: >- + /bin/bash -c "envsubst + '$${NGINX_DOMAIN},$${NGINX_PORT},$${WETTY_HOST},$${WETTY_PORT}' < + /etc/nginx/conf.d/wetty.template > /etc/nginx/conf.d/default.conf && nginx + -g 'daemon off;'" wetty-ssh: build: diff --git a/docs/README.md b/docs/README.md index ea15386..2eb9f20 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,20 @@ # Docs -## Getting started +![WeTTy](./terminal.png?raw=true) + +- [Running as daemon](./service.md) +- [SSL Support](./ssl.md) + - [Using NGINX](./nginx.md) + - [Using Apache](./apache.md) +- [Automatic Login](./auto-login.md) +- [Downloading Files](./downloading-files.md) +- [Development Docs](./development.md) + +## API + +For WeTTy options and event details please refer to the [api docs](./API.md) + +### Getting started WeTTy is event driven. To Spawn a new server call `wetty.start()` with no arguments. @@ -18,7 +32,3 @@ wetty.start(/* server settings, see Options */).then(() => { /* code you want to execute */ }); ``` - -## API - -For WeTTy options and event details please refer to the [api docs](./API.md) diff --git a/docs/apache.md b/docs/apache.md new file mode 100644 index 0000000..87ce640 --- /dev/null +++ b/docs/apache.md @@ -0,0 +1,28 @@ +## Run wetty behind nginx or apache + +As said earlier you can use a proxy to add https to WeTTy. + +**Note** that if your proxy is configured for https you should run WeTTy without +SSL + +If your proxy uses a base path other than `/wetty`, specify the path with the +`--base` flag, or the `BASE` environment variable. + +The following confs assume you want to serve wetty on the url +`example.com/wetty` and are running wetty with the default base and serving it +on the same server + +Put the following configuration in apache's conf: + +```apache +RewriteCond %{REQUEST_URI} ^/wetty/socket.io [NC] +RewriteCond %{QUERY_STRING} transport=websocket [NC] +RewriteRule /wetty/socket.io/(.*) ws://localhost:3000/wetty/socket.io/$1 [P,L] + + + DirectorySlash On + Require all granted + ProxyPassMatch http://127.0.0.1:3000 + ProxyPassReverse /wetty/ + +``` diff --git a/docs/auto-login.md b/docs/auto-login.md new file mode 100644 index 0000000..54aae24 --- /dev/null +++ b/docs/auto-login.md @@ -0,0 +1,22 @@ +# Auto Login + +WeTTY Supports a form of auto login by passing a users password though url +params. + +This is not a required feature and the security implications for passing the +password in the url will have to be considered by the user. + +## Requirements + +For auto-login feature you'll need sshpass installed + +- `apt-get install sshpass` (debian eg. Ubuntu) +- `yum install sshpass` (red hat flavours eg. CentOs) + +## Usage + +You can also pass the ssh password as an optional query parameter to auto-login +the user like this (Only while running WeTTy as a non root account or when +specifying the ssh host): + +`http://yourserver:3000/wetty/ssh/?pass=` diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 0000000..7df2d07 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,20 @@ +# Installation from Source + +WeTTy can be installed from source or from npm. + +To install from source run: + +```bash +$ git clone https://github.com/butlerx/wetty.git +$ cd wetty +$ yarn +$ yarn build +``` + +## Development Env + +To run WeTTy in dev mode you can run `yarn dev` this will build latest version +of WeTTy and start the server pointing at `localhost` on port `22`. The Dev +server will rebuild WeTTy when ever a file is edited and restart the server with +the new build. Any current ssh session in WeTTy will be killed and the user +logged out. diff --git a/docs/docker.md b/docs/docker.md new file mode 100644 index 0000000..50c7871 --- /dev/null +++ b/docs/docker.md @@ -0,0 +1,27 @@ +# Dockerized Version + +WeTTy can be run from a container to ssh to a remote host or the host system. +This is handy for quick deployments. Just modify `docker-compose.yml` for your +host and run: + +```sh +$ docker-compose up -d +``` + +This will start 2 containers, one will be WeTTy container running ssh client the +other will be a container running ssh server. + +Visit the appropriate URL in your browser +(`[localhost|$(boot2docker ip)]:PORT`). + +The default username is `term` and the password is `term`, if you did not modify +`SSHHOST` + +In the docker version all flags can be accessed as environment variables such as +`SSHHOST` or `SSHPORT`. + +If you dont want to build the image yourself just remove the line `build; .` + +If you wish to use the WeTTy container in prod just modify the WeTTy container +to have `SSHHOST` point to the server you want to ssh to and remove the ssh +server container. diff --git a/docs/downloading-file.md b/docs/downloading-file.md new file mode 100644 index 0000000..37e2bd4 --- /dev/null +++ b/docs/downloading-file.md @@ -0,0 +1,26 @@ +# File Downloading + +WeTTy supports file downloads by printing terminal escape sequences between a +base64 encoded file. + +The terminal escape sequences used are `^[[5i` and `^[[4i` (VT100 for "enter +auto print" and "exit auto print" respectively - +https://vt100.net/docs/tp83/appendixc.html). + +An example of a helper script that prints the terminal escape characters and +base64s stdin: + +```bash +$ cat wetty-download.sh +#!/bin/sh +echo '^[[5i'$(cat /dev/stdin | base64)'^[[4i' +``` + +You are then able to download files via WeTTy! + +```bash +$ cat my-pdf-file.pdf | ./wetty-download.sh +``` + +WeTTy will then issue a popup like the following that links to a local file +blob: `Download ready: file-20191015233654.pdf` diff --git a/docs/flags.md b/docs/flags.md new file mode 100644 index 0000000..2e2a531 --- /dev/null +++ b/docs/flags.md @@ -0,0 +1,38 @@ +# Flags + +WeTTy can be run with the `--help` flag to get a full list of flags. + +## Server Port + +WeTTy runs on port `3000` by default. You can change the default port by +starting with the `--port` or `-p` flag. + +## SSH Host + +If WeTTy is run as root while the host is set as the local machine it will use +the `login` binary rather than ssh. If no host is specified it will use +`localhost` as the ssh host. + +If instead you wish to connect to a remote host you can specify the host with +the `--sshhost` flag and pass the IP or DNS address of the host you want to +connect to. + +## Default User + +You can specify the default user used to ssh to a host using the `--sshuser`. +This user can overwritten by going to +`http://yourserver:3000/wetty/ssh/`. If this is left blank a user will +be prompted to enter their username when they connect. + +## SSH Port + +By default WeTTy will try to ssh to port `22`, if your host uses an alternative +ssh port this can be specified with the flag `--sshport`. + +## WeTTy URL + +If you'd prefer an HTTP base prefix other than `/wetty`, you can specify that +with `--base`. + +**Do not set this to `/ssh/${something}`, as this will break username matching +code.** diff --git a/docs/https.md b/docs/https.md new file mode 100644 index 0000000..59f4e1d --- /dev/null +++ b/docs/https.md @@ -0,0 +1,21 @@ +# HTTPS + +Always use HTTPS especially with a terminal to your server. You can add HTTPS by +either using WeTTy behind a proxy or directly. + +See docs for [NGinX](./nginx.md) and [Apache](./apache.md) for running behind a +proxy. + +To run WeTTy directly with SSL use both the `--sslkey` and `--sslcert` flags and +pass them the path too your cert and key as follows: + +```bash +wetty --sslkey key.pem --sslcert cert.pem +``` + +If you don't have SSL certificates from a CA you can create a self signed +certificate using this command: + +```bash +openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 30000 -nodes +``` diff --git a/docs/nginx.md b/docs/nginx.md new file mode 100644 index 0000000..97f69e1 --- /dev/null +++ b/docs/nginx.md @@ -0,0 +1,33 @@ +## Run WeTTy behind nginx + +As said earlier you can use Nginx to add https to WeTTy. + +**Note** that if your proxy is configured for https you should run WeTTy without +SSL + +If you configure nginx to use a base path other than `/WeTTy`, then specify that +path with the `--base` flag, or the `BASE` environment variable. + +The following confs assume you want to serve WeTTy on the url +`example.com/wetty` and are running WeTTy with the default base and serving it +on the same server + +For a more detailed look see the [nginx.conf](../bin/nginx.template) used for +testing + +Put the following configuration in your nginx conf: + +```nginx +location ^~ /wetty { + proxy_pass http://127.0.0.1:3000/WeTTy; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_read_timeout 43200000; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; +} +``` diff --git a/docs/service.md b/docs/service.md new file mode 100644 index 0000000..07d5735 --- /dev/null +++ b/docs/service.md @@ -0,0 +1,29 @@ +## Run WeTTy as a service daemon + +WeTTy can be run as a daemon on your service init confs and systemd services are +bundled with the npm package to make this easier. + +### init.d + +```bash +$ yarn global add wetty +$ sudo cp ~/.config/yarn/global/node_modules/wetty/bin/wetty.conf /etc/init +$ sudo start wetty +``` + +### systemd + +```bash +$ yarn global add wetty +$ cp ~/.config/yarn/global/node_modules/wetty/bin/wetty.service ~/.config/systemd/user/ +$ systemctl --user enable wetty +$ systemctl --user start wetty +``` + +This will start WeTTy on port 3000. If you want to change the port or redirect +stdout/stderr you should change the last line in `wetty.conf` file, something +like this: + +```systemd +exec sudo -u root wetty -p 80 >> /var/log/wetty.log 2>&1 +``` diff --git a/terminal.png b/docs/terminal.png similarity index 100% rename from terminal.png rename to docs/terminal.png diff --git a/index.js b/index.js index 3caa5f9..b5be546 100755 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ #! /usr/bin/env node -/* eslint-disable typescript/no-var-requires */ +/* eslint-disable @typescript-eslint/no-var-requires */ const yargs = require('yargs'); const wetty = require('./dist').default; diff --git a/package.json b/package.json index 8b978c7..c6c5a11 100644 --- a/package.json +++ b/package.json @@ -1,24 +1,29 @@ { "name": "wetty", - "version": "1.1.9", + "version": "1.2.0", "description": "WeTTY = Web + TTY. Terminal access in browser over http/https", - "homepage": "https://github.com/krishnasrinivas/wetty", + "homepage": "https://github.com/butlerx/wetty", "repository": { "type": "git", - "url": "git://github.com/krishnasrinivas/wetty.git" + "url": "git://github.com/butlerx/wetty.git" + }, + "author": { + "name": "Cian Butler", + "email": "butlerx@notthe.cloud", + "url": "cianbutler.ie" }, - "author": "Krishna Srinivas (https://github.com/krishnasrinivas)", "license": "MIT", "bugs": { - "url": "https://github.com/krishnasrinivas/wetty/issues" + "url": "https://github.com/butlerx/wetty/issues" }, "main": "index.js", "scripts": { - "lint": "eslint --ext .ts .", "build": "babel-node node_modules/.bin/webpack", - "start": "node .", + "contributor": "all-contributors", "dev": "NODE_ENV=development concurrently --kill-others --success first \"babel-node node_modules/.bin/webpack --watch\" \"nodemon .\"", - "prepublishOnly": "NODE_ENV=production yarn build" + "lint": "eslint --ext .ts,.js .", + "prepublishOnly": "NODE_ENV=production yarn build", + "start": "node ." }, "husky": { "hooks": { @@ -86,6 +91,7 @@ "@types/yargs": "^13.0.2", "@typescript-eslint/eslint-plugin": "^2.5.0", "@typescript-eslint/parser": "^2.5.0", + "all-contributors-cli": "^6.9.3", "babel-loader": "^8.0.6", "babel-plugin-lodash": "^3.3.4", "concurrently": "^4.1.2", @@ -96,7 +102,8 @@ "eslint-plugin-import": "^2.18.2", "eslint-plugin-prettier": "^3.1.0", "file-loader": "^4.2.0", - "husky": "^3.0.5", + "git-authors-cli": "^1.0.18", + "husky": "^3.0.9", "lint-staged": "~9.2.5", "mini-css-extract-plugin": "^0.8.0", "node-sass": "^4.12.0", @@ -110,25 +117,37 @@ "webpack-node-externals": "^1.7.2" }, "contributors": [ - "Andreas Kloeckner ", - "Antonio Calatrava ", - "Boyan Rabchev ", + "Krishna Srinivas ", "Boyan Rabchev ", - "Cian Butler ", - "Farhan Khan ", + "Antonio Calatrava ", + "Strubbl ", + "Oleg Kurapov ", + "Anthony Jund ", + "Luca Milanesio ", + "nosemeocurrenada ", + "Henri ", "Imuli ", - "James Turnbull ", + "Koushik M.L.N ", + "cbutler ", + "mirtouf ", + "Denis Kramer ", "Jarrett Gilliam ", - "Kasper Holbek Jensen ", - "Krishna Srinivas ", - "Luca Milanesio ", "Nathan LeClaire ", + "Andreas Kloeckner ", + "Ben Letchford ", + "Bertrand Roussel ", + "Farhan Khan ", + "Felix Bartels ", + "Felix Pojtinger ", + "James Turnbull ", + "Josh Samuelson ", + "Jurre Vriesen ", + "Kasper Holbek Jensen ", + "Krzysztof SuszyΕ„ski ", + "Matthew Piercey ", "Neale Pickett ", "Robert ", - "Strubbl ", - "koushikmln ", - "mirtouf ", - "nosemeocurrenada ", - "Ben Letchford " + "Tri Nguyen ", + "harryleesan " ] } diff --git a/src/client/copyToClipboard.ts b/src/client/copyToClipboard.ts index 388aade..c6b6dbe 100644 --- a/src/client/copyToClipboard.ts +++ b/src/client/copyToClipboard.ts @@ -1,26 +1,38 @@ // NOTE text selection on double click or select -const copyToClipboard = (text: string) : boolean => { - if (window.clipboardData && window.clipboardData.setData) { - window.clipboardData.setData("Text", text); - return true; - } if (document.queryCommandSupported && document.queryCommandSupported("copy")) { - const textarea = document.createElement("textarea"); - textarea.textContent = text; - textarea.style.position = "fixed"; - document.body.appendChild(textarea); - textarea.select(); - try { - document.execCommand("copy"); - return true; - } catch (ex) { - console.warn("Copy to clipboard failed.", ex); - return false; - } finally { - document.body.removeChild(textarea); - } +export function copySelected(text: string): boolean { + if (window.clipboardData && window.clipboardData.setData) { + window.clipboardData.setData('Text', text); + return true; + } + if ( + document.queryCommandSupported && + document.queryCommandSupported('copy') + ) { + const textarea = document.createElement('textarea'); + textarea.textContent = text; + textarea.style.position = 'fixed'; + document.body.appendChild(textarea); + textarea.select(); + try { + document.execCommand('copy'); + return true; + } catch (ex) { + console.warn('Copy to clipboard failed.', ex); + return false; + } finally { + document.body.removeChild(textarea); } - console.warn("Copy to clipboard failed."); - return false; + } + console.warn('Copy to clipboard failed.'); + return false; } -export default copyToClipboard; \ No newline at end of file +export function copyShortcut(e: KeyboardEvent): boolean { + // Ctrl + Shift + C + if (e.ctrlKey && e.shiftKey && e.keyCode === 67) { + e.preventDefault(); + document.execCommand('copy'); + return false; + } + return true; +} diff --git a/src/client/disconnect.ts b/src/client/disconnect.ts new file mode 100644 index 0000000..bb84fc9 --- /dev/null +++ b/src/client/disconnect.ts @@ -0,0 +1,11 @@ +import { isUndefined, isNull } from 'lodash'; +import verifyPrompt from './verify'; +import { overlay } from './elements'; + +export default function disconnect(reason: string): void { + if (isNull(overlay)) return; + overlay.style.display = 'block'; + const msg = document.getElementById('msg'); + if (!isUndefined(reason) && !isNull(msg)) msg.innerHTML = reason; + window.removeEventListener('beforeunload', verifyPrompt, false); +} diff --git a/src/client/download.ts b/src/client/download.ts new file mode 100644 index 0000000..60525eb --- /dev/null +++ b/src/client/download.ts @@ -0,0 +1,55 @@ +import * as fileType from 'file-type'; +import Toastify from 'toastify-js'; + +export const FILE_BEGIN = '\u001b[5i'; +export const FILE_END = '\u001b[4i'; +export let fileBuffer = []; + +export function onCompleteFile() { + let bufferCharacters = fileBuffer.join(''); + bufferCharacters = bufferCharacters.substring( + bufferCharacters.lastIndexOf(FILE_BEGIN) + FILE_BEGIN.length, + bufferCharacters.lastIndexOf(FILE_END) + ); + + // Try to decode it as base64, if it fails we assume it's not base64 + try { + bufferCharacters = window.atob(bufferCharacters); + } catch (err) { + // Assuming it's not base64... + } + + const bytes = new Uint8Array(bufferCharacters.length); + for (let i = 0; i < bufferCharacters.length; i += 1) { + bytes[i] = bufferCharacters.charCodeAt(i); + } + + let mimeType = 'application/octet-stream'; + let fileExt = ''; + const typeData = fileType(bytes); + if (typeData) { + mimeType = typeData.mime; + fileExt = typeData.ext; + } + const fileName = `file-${new Date() + .toISOString() + .split('.')[0] + .replace(/-/g, '') + .replace('T', '') + .replace(/:/g, '')}${fileExt ? `.${fileExt}` : ''}`; + + const blob = new Blob([new Uint8Array(bytes.buffer)], { type: mimeType }); + const blobUrl = URL.createObjectURL(blob); + + fileBuffer = []; + + Toastify({ + text: `Download ready: ${fileName}`, + duration: 10000, + newWindow: true, + gravity: 'bottom', + position: 'right', + backgroundColor: '#fff', + stopOnFocus: true, + }).showToast(); +} diff --git a/src/client/elements.ts b/src/client/elements.ts new file mode 100644 index 0000000..13f476a --- /dev/null +++ b/src/client/elements.ts @@ -0,0 +1,2 @@ +export const overlay = document.getElementById('overlay'); +export const terminal = document.getElementById('terminal'); diff --git a/src/client/index.ts b/src/client/index.ts index a0026fd..cdef050 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -1,152 +1,74 @@ import { Terminal } from 'xterm'; -import { isUndefined } from 'lodash'; -import * as io from 'socket.io-client'; -import { fit } from 'xterm/lib/addons/fit/fit'; -import * as fileType from 'file-type'; -import Toastify from 'toastify-js'; - -import copyToClipboard from "./copyToClipboard"; +import { isNull } from 'lodash'; + +import { socket } from './socket'; +import { overlay, terminal } from './elements'; +import { fileBuffer, onCompleteFile, FILE_BEGIN, FILE_END } from './download'; +import verifyPrompt from './verify'; +import disconnect from './disconnect'; +import mobileKeyboard from './mobile'; +import resize from './resize'; +import loadOptions from './options'; +import { copySelected, copyShortcut } from './copyToClipboard'; import './wetty.scss'; import './favicon.ico'; -const userRegex = new RegExp('ssh/[^/]+$'); -const trim = (str: string): string => str.replace(/\/*$/, ''); -const socketBase = trim(window.location.pathname).replace(userRegex, ''); -const socket = io(window.location.origin, { - path: `${trim(socketBase)}/socket.io`, -}); - -const FILE_BEGIN = '\u001b[5i'; -const FILE_END = '\u001b[4i'; - socket.on('connect', () => { const term = new Terminal(); - let fileBuffer = []; - term.open(document.getElementById('terminal')); - const defaultOptions = { - fontSize: 14 - }; - let options: object; + if (isNull(terminal)) return; + term.open(terminal); - try { - if (localStorage.options === undefined) { - options = defaultOptions; - } else { - options = JSON.parse(localStorage.options); - } - } catch { - options = defaultOptions; - } - Object.keys(options).forEach(key => { - const value = options[key]; + const options = loadOptions(); + Object.entries(options).forEach(([key, value]) => { term.setOption(key, value); }); const code = JSON.stringify(options, null, 2); - const editor = document.querySelector('#options .editor') || {value: code}; - editor.value = code; - editor.addEventListener('keyup', () => { - try { - const updated = JSON.parse(editor.value); - const updatedCode = JSON.stringify(updated, null, 2); - editor.value = updatedCode; - editor.classList.remove('error'); - localStorage.options = updatedCode; - Object.keys(updated).forEach(key => { - const value = updated[key]; - term.setOption(key, value); + const editor = document.querySelector('#options .editor'); + if (!isNull(editor)) { + editor.value = code; + editor.addEventListener('keyup', () => { + try { + const updated = JSON.parse(editor.value); + const updatedCode = JSON.stringify(updated, null, 2); + editor.value = updatedCode; + editor.classList.remove('error'); + localStorage.options = updatedCode; + Object.keys(updated).forEach(key => { + const value = updated[key]; + term.setOption(key, value); + }); + resize(term)(); + } catch { + // skip + editor.classList.add('error'); + } + }); + const toggle = document.querySelector('#options .toggler'); + const optionsElem = document.getElementById('options'); + if (!isNull(toggle) && !isNull(optionsElem)) { + toggle.addEventListener('click', e => { + optionsElem.classList.toggle('opened'); + e.preventDefault(); }); - resize(); - } catch { - // skip - editor.classList.add('error'); } - }); - document.getElementById('overlay').style.display = 'none'; - document.querySelector('#options .toggler').addEventListener('click', e => { - document.getElementById('options').classList.toggle('opened'); - e.preventDefault(); - }); - window.addEventListener('beforeunload', handler, false); - /* - term.scrollPort_.screen_.setAttribute('contenteditable', 'false'); - */ - - term.attachCustomKeyEventHandler(e => { - // Ctrl + Shift + C - if (e.ctrlKey && e.shiftKey && e.keyCode === 67) { - e.preventDefault(); - document.execCommand('copy'); - return false; - } - return true; - }); - - // NOTE copytoclipboard - document.addEventListener('mouseup', () => { - if (term.hasSelection()) - copyToClipboard(term.getSelection()) - }, false); - - function resize(): void { - fit(term); - socket.emit('resize', { - cols: term.cols, - rows: term.rows - }); - } - window.onresize = resize; - resize(); - term.focus(); - - function kill(data: string): void { - disconnect(data); } + if (!isNull(overlay)) overlay.style.display = 'none'; + window.addEventListener('beforeunload', verifyPrompt, false); - function onCompleteFile() { - let bufferCharacters = fileBuffer.join(''); - bufferCharacters = bufferCharacters.substring(bufferCharacters.lastIndexOf(FILE_BEGIN) + FILE_BEGIN.length, bufferCharacters.lastIndexOf(FILE_END)); + term.attachCustomKeyEventHandler(copyShortcut); - // Try to decode it as base64, if it fails we assume it's not base64 - try { - bufferCharacters = window.atob(bufferCharacters); - } catch (err) { - // Assuming it's not base64... - } - - const bytes = new Uint8Array(bufferCharacters.length); - for (let i = 0; i < bufferCharacters.length; i += 1) { - bytes[i] = bufferCharacters.charCodeAt(i); - } + document.addEventListener( + 'mouseup', + () => { + if (term.hasSelection()) copySelected(term.getSelection()); + }, + false + ); - let mimeType = 'application/octet-stream'; - let fileExt = ''; - const typeData = fileType(bytes); - if (typeData) { - mimeType = typeData.mime; - fileExt = typeData.ext; - } - const fileName = `file-${new Date() - .toISOString() - .split('.')[0] - .replace(/-/g, '') - .replace('T', '') - .replace(/:/g, '')}${fileExt ? `.${fileExt}` : ''}`; - - const blob = new Blob([new Uint8Array(bytes.buffer)], { type: mimeType }); - const blobUrl = URL.createObjectURL(blob); - - fileBuffer = []; - - Toastify({ - text: `Download ready: ${fileName}`, - duration: 10000, - newWindow: true, - gravity: 'bottom', - position: 'right', - backgroundColor: '#fff', - stopOnFocus: true, - }).showToast(); - } + window.onresize = resize(term); + resize(term)(); + term.focus(); + mobileKeyboard(); term.on('data', data => { socket.emit('input', data); @@ -184,24 +106,11 @@ socket.on('connect', () => { }) .on('login', () => { term.writeln(''); - resize(); + resize(term)(); }) - .on('logout', kill) - .on('disconnect', kill) + .on('logout', disconnect) + .on('disconnect', disconnect) .on('error', (err: string | null) => { if (err) disconnect(err); }); }); - -function disconnect(reason: string): void { - document.getElementById('overlay').style.display = 'block'; - if (!isUndefined(reason)) document.getElementById('msg').innerHTML = reason; - window.removeEventListener('beforeunload', handler, false); -} - -function handler(e: { - returnValue: string -}): string { - e.returnValue = 'Are you sure?'; - return e.returnValue; -} diff --git a/src/client/mobile.ts b/src/client/mobile.ts new file mode 100644 index 0000000..a9d7cd6 --- /dev/null +++ b/src/client/mobile.ts @@ -0,0 +1,14 @@ +import { isNull } from 'lodash'; + +export default function mobileKeyboard(): void { + const [screen] = document.getElementsByClassName('xterm-screen'); + if (isNull(screen)) return; + screen.setAttribute('contenteditable', 'true'); + screen.setAttribute('spellcheck', 'false'); + screen.setAttribute('autocorrect', 'false'); + screen.setAttribute('autocomplete', 'false'); + screen.setAttribute('autocapitalize', 'false'); + /* + term.scrollPort_.screen_.setAttribute('contenteditable', 'false'); + */ +} diff --git a/src/client/options.ts b/src/client/options.ts new file mode 100644 index 0000000..2db78af --- /dev/null +++ b/src/client/options.ts @@ -0,0 +1,12 @@ +import { isUndefined } from 'lodash'; + +export default function loadOptions(): object { + const defaultOptions = { fontSize: 14 }; + try { + return isUndefined(localStorage.options) + ? defaultOptions + : JSON.parse(localStorage.options); + } catch { + return defaultOptions; + } +} diff --git a/src/client/resize.ts b/src/client/resize.ts new file mode 100644 index 0000000..0838d0a --- /dev/null +++ b/src/client/resize.ts @@ -0,0 +1,10 @@ +import { Terminal } from 'xterm'; +import { fit } from 'xterm/lib/addons/fit/fit'; +import { socket } from './socket'; + +export default function resize(term: Terminal): Function { + return (): void => { + fit(term); + socket.emit('resize', { cols: term.cols, rows: term.rows }); + }; +} diff --git a/src/client/socket.ts b/src/client/socket.ts new file mode 100644 index 0000000..0aec144 --- /dev/null +++ b/src/client/socket.ts @@ -0,0 +1,9 @@ +import * as io from 'socket.io-client'; + +const userRegex = new RegExp('ssh/[^/]+$'); +export const trim = (str: string): string => str.replace(/\/*$/, ''); + +const socketBase = trim(window.location.pathname).replace(userRegex, ''); +export const socket = io(window.location.origin, { + path: `${trim(socketBase)}/socket.io`, +}); diff --git a/src/client/verify.ts b/src/client/verify.ts new file mode 100644 index 0000000..93cd183 --- /dev/null +++ b/src/client/verify.ts @@ -0,0 +1,4 @@ +export default function verifyPrompt(e: { returnValue: string }): string { + e.returnValue = 'Are you sure?'; + return e.returnValue; +} diff --git a/src/server/buffer.ts b/src/server/buffer.ts index bdc8209..5818d51 100644 --- a/src/server/buffer.ts +++ b/src/server/buffer.ts @@ -2,7 +2,7 @@ import { createInterface } from 'readline'; ask('Enter your username'); -export default function ask(question: string): Promise { +function ask(question: string): Promise { const r = createInterface({ input: process.stdin, output: process.stdout, diff --git a/src/server/cli/index.ts b/src/server/cli/index.ts new file mode 100644 index 0000000..97316ef --- /dev/null +++ b/src/server/cli/index.ts @@ -0,0 +1,18 @@ +import * as yargs from 'yargs'; +import { logger } from '../utils'; +import WeTTy from '../wetty'; +import { CLI } from './options'; +import { unWrapArgs } from './parseArgs'; + +export default function init(opts: CLI): void { + if (!opts.help) { + const { ssh, server, command, ssl } = unWrapArgs(opts); + WeTTy(ssh, server, command, ssl).catch(err => { + logger.error(err); + process.exitCode = 1; + }); + } else { + yargs.showHelp(); + process.exitCode = 0; + } +} diff --git a/src/server/cli/options.ts b/src/server/cli/options.ts new file mode 100644 index 0000000..aab6871 --- /dev/null +++ b/src/server/cli/options.ts @@ -0,0 +1,20 @@ +export interface Options { + sshhost: string; + sshport: number; + sshuser: string; + sshauth: string; + sshkey?: string; + sshpass?: string; + sslkey?: string; + sslcert?: string; + base: string; + host: string; + port: number; + title: string; + command?: string; + bypasshelmet?: boolean; +} + +export interface CLI extends Options { + help: boolean; +} diff --git a/src/server/cli/parseArgs.ts b/src/server/cli/parseArgs.ts new file mode 100644 index 0000000..f5064ef --- /dev/null +++ b/src/server/cli/parseArgs.ts @@ -0,0 +1,30 @@ +import { isUndefined } from 'lodash'; +import { Options } from './options'; +import { SSL, SSH, Server } from '../interfaces'; + +export function unWrapArgs( + args: Options +): { ssh: SSH; server: Server; command?: string; ssl?: SSL } { + return { + ssh: { + user: args.sshuser, + host: args.sshhost, + auth: args.sshauth, + port: args.sshport, + pass: args.sshpass, + key: args.sshkey, + }, + server: { + base: args.base, + host: args.host, + port: args.port, + title: args.title, + bypasshelmet: args.bypasshelmet || false, + }, + command: args.command, + ssl: + isUndefined(args.sslkey) || isUndefined(args.sslcert) + ? undefined + : { key: args.sslkey, cert: args.sslcert }, + }; +} diff --git a/src/server/command.ts b/src/server/command.ts deleted file mode 100644 index 043290e..0000000 --- a/src/server/command.ts +++ /dev/null @@ -1,101 +0,0 @@ -import * as url from 'url'; -import { Socket } from 'socket.io'; - -import logger from './logger'; -import { SSH } from './interfaces'; - -const localhost = (host: string): boolean => - process.getuid() === 0 && - (host === 'localhost' || host === '0.0.0.0' || host === '127.0.0.1'); - -const urlArgs = ( - referer: string, - def: { [s: string]: string } -): { [s: string]: string } => - Object.assign(def, url.parse(referer, true).query); - -const getRemoteAddress = (remoteAddress: string): string => - remoteAddress.split(':')[3] === undefined - ? 'localhost' - : remoteAddress.split(':')[3]; - -export default ( - { - request: { - headers: { referer }, - }, - client: { - conn: { remoteAddress }, - }, - }: Socket, - { user, host, port, auth, pass, key }: SSH, - command: string -): { args: string[]; user: boolean } => ({ - args: localhost(host) - ? loginOptions(command, remoteAddress) - : sshOptions( - urlArgs(referer, { - host: address(referer, user, host), - port: `${port}`, - pass, - command, - auth, - }), - key - ), - user: - localhost(host) || - user !== '' || - user.includes('@') || - address(referer, user, host).includes('@'), -}); - -function parseCommand(command: string, path?: string): string { - if (command === 'login' && path === undefined) return ''; - return path !== undefined - ? `$SHELL -c "cd ${path};${command === 'login' ? '$SHELL' : command}"` - : command; -} - -function sshOptions( - { pass, path, command, host, port, auth }: { [s: string]: string }, - key?: string -): string[] { - const cmd = parseCommand(command, path); - const sshRemoteOptsBase = [ - 'ssh', - host, - '-t', - '-p', - port, - '-o', - `PreferredAuthentications=${auth}`, - ]; - logger.info(`Authentication Type: ${auth}`); - if (key) { - return sshRemoteOptsBase.concat(['-i', key, cmd]); - } - if (pass) { - return ['sshpass', '-p', pass].concat(sshRemoteOptsBase, [cmd]); - } - if (auth === 'none') { - sshRemoteOptsBase.splice(sshRemoteOptsBase.indexOf('-o'), 2); - return sshRemoteOptsBase.concat([cmd]); - } - if (cmd === '') { - return sshRemoteOptsBase; - } - return sshRemoteOptsBase.concat([cmd]); -} - -function loginOptions(command: string, remoteAddress: string): string[] { - return command === 'login' - ? [command, '-h', getRemoteAddress(remoteAddress)] - : [command]; -} - -function address(referer: string, user: string, host: string): string { - const match = referer.match('.+/ssh/([^/]+)$'); - const fallback = user ? `${user}@${host}` : host; - return match ? `${match[1]}@${host}` : fallback; -} diff --git a/src/server/command/address.ts b/src/server/command/address.ts new file mode 100644 index 0000000..f7bbf33 --- /dev/null +++ b/src/server/command/address.ts @@ -0,0 +1,9 @@ +export default function address( + referer: string, + user: string, + host: string +): string { + const match = referer.match('.+/ssh/([^/]+)$'); + const fallback = user ? `${user}@${host}` : host; + return match ? `${match[1].split('?')[0]}@${host}` : fallback; +} diff --git a/src/server/command/index.ts b/src/server/command/index.ts new file mode 100644 index 0000000..4af1b27 --- /dev/null +++ b/src/server/command/index.ts @@ -0,0 +1,47 @@ +import * as url from 'url'; +import { Socket } from 'socket.io'; +import { SSH } from '../interfaces'; +import address from './address'; +import loginOptions from './login'; +import sshOptions from './ssh'; + +const localhost = (host: string): boolean => + process.getuid() === 0 && + (host === 'localhost' || host === '0.0.0.0' || host === '127.0.0.1'); + +const urlArgs = ( + referer: string, + def: { [s: string]: string } +): { [s: string]: string } => + Object.assign(def, url.parse(referer, true).query); + +export default ( + { + request: { + headers: { referer }, + }, + client: { + conn: { remoteAddress }, + }, + }: Socket, + { user, host, port, auth, pass, key }: SSH, + command: string +): { args: string[]; user: boolean } => ({ + args: localhost(host) + ? loginOptions(command, remoteAddress) + : sshOptions( + urlArgs(referer, { + host: address(referer, user, host), + port: `${port}`, + pass: pass || '', + command, + auth, + }), + key + ), + user: + localhost(host) || + user !== '' || + user.includes('@') || + address(referer, user, host).includes('@'), +}); diff --git a/src/server/command/login.ts b/src/server/command/login.ts new file mode 100644 index 0000000..6453d06 --- /dev/null +++ b/src/server/command/login.ts @@ -0,0 +1,15 @@ +import { isUndefined } from 'lodash'; + +const getRemoteAddress = (remoteAddress: string): string => + isUndefined(remoteAddress.split(':')[3]) + ? 'localhost' + : remoteAddress.split(':')[3]; + +export default function loginOptions( + command: string, + remoteAddress: string +): string[] { + return command === 'login' + ? [command, '-h', getRemoteAddress(remoteAddress)] + : [command]; +} diff --git a/src/server/command/parse.ts b/src/server/command/parse.ts new file mode 100644 index 0000000..7ea4d93 --- /dev/null +++ b/src/server/command/parse.ts @@ -0,0 +1,8 @@ +import { isUndefined } from 'lodash'; + +export default function parseCommand(command: string, path?: string): string { + if (command === 'login' && isUndefined(path)) return ''; + return !isUndefined(path) + ? `$SHELL -c "cd ${path};${command === 'login' ? '$SHELL' : command}"` + : command; +} diff --git a/src/server/command/ssh.ts b/src/server/command/ssh.ts new file mode 100644 index 0000000..6f43a90 --- /dev/null +++ b/src/server/command/ssh.ts @@ -0,0 +1,33 @@ +import { isUndefined } from 'lodash'; +import parseCommand from './parse'; +import logger from '../utils/logger'; + +export default function sshOptions( + { pass, path, command, host, port, auth }: { [s: string]: string }, + key?: string +): string[] { + const cmd = parseCommand(command, path); + const sshRemoteOptsBase = [ + 'ssh', + host, + '-t', + '-p', + port, + '-o', + `PreferredAuthentications=${auth}`, + ]; + logger.info(`Authentication Type: ${auth}`); + if (!isUndefined(key)) { + return sshRemoteOptsBase.concat(['-i', key, cmd]); + } + if (pass !== '') { + return ['sshpass', '-p', pass].concat(sshRemoteOptsBase, [cmd]); + } + if (auth === 'none') { + sshRemoteOptsBase.splice(sshRemoteOptsBase.indexOf('-o'), 2); + } + if (cmd === '') { + return sshRemoteOptsBase; + } + return sshRemoteOptsBase.concat([cmd]); +} diff --git a/src/server/emitter.ts b/src/server/emitter.ts deleted file mode 100644 index 9352bbc..0000000 --- a/src/server/emitter.ts +++ /dev/null @@ -1,3 +0,0 @@ -import WeTTy from './wetty'; - -export default new WeTTy(); diff --git a/src/server/index.ts b/src/server/index.ts index 65e54ae..794f010 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,85 +1,4 @@ -import * as yargs from 'yargs'; -import logger from './logger'; -import wetty from './emitter'; import WeTTy from './wetty'; +import init from './cli'; -export interface Options { - sshhost: string; - sshport: number; - sshuser: string; - sshauth: string; - sshkey?: string; - sshpass?: string; - sslkey?: string; - sslcert?: string; - base: string; - host: string; - port: number; - title: string; - command?: string; - bypasshelmet?: boolean; -} - -interface CLI extends Options { - help: boolean; -} - -export default class Server { - public static start({ - sshuser, - sshhost, - sshauth, - sshport, - sshkey, - sshpass, - base, - host, - port, - title, - command, - sslkey, - sslcert, - bypasshelmet, - }: Options): Promise { - wetty - .on('exit', ({ code, msg }: { code: number; msg: string }) => { - logger.info(`Exit with code: ${code} ${msg}`); - }) - .on('disconnect', () => { - logger.info('disconnect'); - }) - .on('spawn', ({ msg }) => logger.info(msg)) - .on('connection', ({ msg, date }) => logger.info(`${date} ${msg}`)) - .on('server', ({ msg }) => logger.info(msg)) - .on('debug', (msg: string) => logger.debug(msg)); - return wetty.start( - { - user: sshuser, - host: sshhost, - auth: sshauth, - port: sshport, - pass: sshpass, - key: sshkey, - }, - { base, host, port, title, bypasshelmet}, - command, - { key: sslkey, cert: sslcert } - ); - } - - public static get wetty(): WeTTy { - return wetty; - } - - public static init(opts: CLI): void { - if (!opts.help) { - this.start(opts).catch(err => { - logger.error(err); - process.exitCode = 1; - }); - } else { - yargs.showHelp(); - process.exitCode = 0; - } - } -} +export default { start: WeTTy, init }; diff --git a/src/server/interfaces.ts b/src/server/interfaces.ts index 89d8172..16eb4b1 100644 --- a/src/server/interfaces.ts +++ b/src/server/interfaces.ts @@ -8,8 +8,8 @@ export interface SSH { } export interface SSL { - key?: string; - cert?: string; + key: string; + cert: string; } export interface SSLBuffer { diff --git a/src/server/logger.ts b/src/server/logger.ts deleted file mode 100644 index e96cc9d..0000000 --- a/src/server/logger.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { createLogger, format, transports } from 'winston'; - -const { combine, timestamp, label, printf, colorize } = format; - -const logger = createLogger({ - format: - process.env.NODE_ENV === 'development' - ? combine( - colorize({ all: true }), - label({ label: 'Wetty' }), - timestamp(), - printf( - info => - `${info.timestamp} [${info.label}] ${info.level}: ${info.message}` - ) - ) - : format.json(), - transports: [ - new transports.Console({ - level: process.env.NODE_ENV === 'development' ? 'debug' : 'info', - handleExceptions: true, - }), - ], -}); - -logger.stream = { - write(message: string): void { - logger.info(message); - }, -}; - -export default logger; diff --git a/src/server/server.ts b/src/server/server.ts deleted file mode 100644 index 1bcb5c1..0000000 --- a/src/server/server.ts +++ /dev/null @@ -1,93 +0,0 @@ -import * as compression from 'compression'; -import * as express from 'express'; -import * as favicon from 'serve-favicon'; -import * as helmet from 'helmet'; -import * as http from 'http'; -import * as https from 'https'; -import * as path from 'path'; -import * as socket from 'socket.io'; -import { isUndefined } from 'lodash'; -import * as morgan from 'morgan'; -import logger from './logger'; -import events from './emitter'; -import { SSLBuffer, Server } from './interfaces'; - -const distDir = path.join(__dirname, 'client'); - -const trim = (str: string): string => str.replace(/\/*$/, ''); - -export default function createServer( - { base, port, host, title, bypasshelmet }: Server, - { key, cert }: SSLBuffer -): SocketIO.Server { - const basePath = trim(base); - events.emit( - 'debug', - `key: ${key}, cert: ${cert}, port: ${port}, base: ${base}, title: ${title}` - ); - - const html = ( - req: express.Request, - res: express.Response - ): express.Response => { - const resourcePath = /^\/ssh\//.test(req.url.replace(base, '/')) ? '../' : ''; - res.send(` - - - - - - ${title} - - - - -
-
-
- -
-
-
- - -
-
- - -`); - } - - const app = express(); - app - .use(morgan('combined', { stream: logger.stream })) - .use(compression()) - .use(favicon(path.join(distDir, 'favicon.ico'))) - .use(`${basePath}/public`, express.static(distDir)) - .use((req, res, next) => { - if (req.url === basePath) res.redirect(301, `${req.url }/`); - else next(); - }); - - // Allow helmet to be bypassed. - // Unfortunately, order matters with middleware - // which is why this is thrown in the middle - if (!bypasshelmet) { - app.use(helmet()); - } - - app.get(basePath, html).get(`${basePath}/ssh/:user`, html); - - return socket( - !isUndefined(key) && !isUndefined(cert) - ? https.createServer({ key, cert }, app).listen(port, host, () => { - events.server(port, 'https'); - }) - : http.createServer(app).listen(port, host, () => { - events.server(port, 'http'); - }), - { path: `${basePath}/socket.io` } - ); -} diff --git a/src/server/socketServer/html.ts b/src/server/socketServer/html.ts new file mode 100644 index 0000000..16d8320 --- /dev/null +++ b/src/server/socketServer/html.ts @@ -0,0 +1,35 @@ +import * as express from 'express'; + +export default (base: string, title: string) => ( + req: express.Request, + res: express.Response +): express.Response => { + const resourcePath = /^\/ssh\//.test(req.url.replace(base, '/')) ? '../' : ''; + res.send(` + + + + + + ${title} + + + + +
+
+
+ +
+
+
+ + +
+
+ + +`); +}; diff --git a/src/server/socketServer/index.ts b/src/server/socketServer/index.ts new file mode 100644 index 0000000..bceb45f --- /dev/null +++ b/src/server/socketServer/index.ts @@ -0,0 +1,70 @@ +import * as compression from 'compression'; +import * as express from 'express'; +import * as favicon from 'serve-favicon'; +import * as helmet from 'helmet'; +import * as http from 'http'; +import * as https from 'https'; +import * as path from 'path'; +import * as socket from 'socket.io'; +import { isUndefined } from 'lodash'; +import * as morgan from 'morgan'; +import logger from '../utils/logger'; +import { SSLBuffer, Server } from '../interfaces'; +import html from './html'; + +const distDir = path.join(__dirname, 'client'); + +const trim = (str: string): string => str.replace(/\/*$/, ''); + +export default function createServer( + { base, port, host, title, bypasshelmet }: Server, + { key, cert }: SSLBuffer +): SocketIO.Server { + const basePath = trim(base); + + logger.info('Starting server', { + key, + cert, + port, + base, + title, + }); + + const app = express(); + app + .use(morgan('combined', { stream: logger.stream })) + .use(compression()) + .use(favicon(path.join(distDir, 'favicon.ico'))) + .use(`${basePath}/public`, express.static(distDir)) + .use((req, res, next) => { + if (req.url === basePath) res.redirect(301, `${req.url}/`); + else next(); + }); + + // Allow helmet to be bypassed. + // Unfortunately, order matters with middleware + // which is why this is thrown in the middle + if (!bypasshelmet) { + app.use(helmet()); + } + + const client = html(base, title); + app.get(basePath, client).get(`${basePath}/ssh/:user`, client); + + return socket( + !isUndefined(key) && !isUndefined(cert) + ? https.createServer({ key, cert }, app).listen(port, host, () => { + logger.info('Server started', { + port, + connection: 'https', + }); + }) + : http.createServer(app).listen(port, host, () => { + logger.info('Server started', { + port, + connection: 'http', + }); + }), + { path: `${basePath}/socket.io` } + ); +} diff --git a/src/server/ssl.ts b/src/server/ssl.ts deleted file mode 100644 index 958185b..0000000 --- a/src/server/ssl.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { readFile } from 'fs-extra'; -import { resolve } from 'path'; -import { isUndefined } from 'lodash'; -import { SSL, SSLBuffer } from './interfaces'; - -export default async function loadSSL(ssl: SSL): Promise { - if (isUndefined(ssl) || isUndefined(ssl.key) || isUndefined(ssl.cert)) return {}; - const files = [readFile(resolve(ssl.key)), readFile(resolve(ssl.cert))]; - const [key, cert]: Buffer[] = await Promise.all(files); - return { key, cert }; -} diff --git a/src/server/term.ts b/src/server/term.ts deleted file mode 100644 index 742a46a..0000000 --- a/src/server/term.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { spawn } from 'node-pty'; -import { isUndefined } from 'lodash'; -import events from './emitter'; - -const xterm = { - name: 'xterm-256color', - cols: 80, - rows: 30, - cwd: process.cwd(), - env: process.env, -}; - -export default class Term { - public static spawn(socket: SocketIO.Socket, args: string[]): void { - const term = spawn('/usr/bin/env', args, xterm); - const address = args[0] === 'ssh' ? args[1] : 'localhost'; - events.spawned(term.pid, address); - socket.emit('login'); - term.on('exit', code => { - events.exited(code, term.pid); - socket.emit('logout'); - socket - .removeAllListeners('disconnect') - .removeAllListeners('resize') - .removeAllListeners('input'); - }); - term.on('data', data => { - socket.emit('data', data); - }); - socket - .on('resize', ({ cols, rows }) => { - term.resize(cols, rows); - }) - .on('input', input => { - if (!isUndefined(term)) term.write(input); - }) - .on('disconnect', () => { - const { pid } = term; - term.kill(); - events.exited(0, pid); - }); - } - - public static login(socket: SocketIO.Socket): Promise { - - // Check request-header for username - const remoteUser = socket.request.headers['remote-user']; - if (remoteUser) { - return new Promise(resolve => { - resolve(remoteUser); - }); - } - - // Request carries no username information - // Create terminal and ask user for username - const term = spawn( - '/usr/bin/env', - ['node', `${__dirname}/buffer.js`], - xterm - ); - let buf = ''; - return new Promise((resolve, reject) => { - term.on('exit', () => { - resolve(buf); - }); - term.on('data', data => { - socket.emit('data', data); - }); - socket - .on('input', (input: string) => { - term.write(input); - buf = /\177/.exec(input) ? buf.slice(0, -1) : buf + input; - }) - .on('disconnect', () => { - term.kill(); - reject(); - }); - }); - } -} diff --git a/src/server/utils/index.ts b/src/server/utils/index.ts new file mode 100644 index 0000000..9ac890b --- /dev/null +++ b/src/server/utils/index.ts @@ -0,0 +1,5 @@ +import logger from './logger'; + +export { logger }; + +export * from './ssl'; diff --git a/src/server/utils/logger.ts b/src/server/utils/logger.ts new file mode 100644 index 0000000..48e6011 --- /dev/null +++ b/src/server/utils/logger.ts @@ -0,0 +1,26 @@ +import { createLogger, format, transports } from 'winston'; + +const { combine, timestamp, label, simple, json, colorize } = format; + +const logger = createLogger({ + format: combine( + colorize({ all: process.env.NODE_ENV === 'development' }), + label({ label: 'Wetty' }), + timestamp(), + process.env.NODE_ENV === 'development' ? simple() : json() + ), + transports: [ + new transports.Console({ + level: process.env.NODE_ENV === 'development' ? 'debug' : 'info', + handleExceptions: true, + }), + ], +}); + +logger.stream = { + write(message: string): void { + logger.info(message); + }, +}; + +export default logger; diff --git a/src/server/utils/ssl.ts b/src/server/utils/ssl.ts new file mode 100644 index 0000000..13301a9 --- /dev/null +++ b/src/server/utils/ssl.ts @@ -0,0 +1,14 @@ +import { readFile } from 'fs-extra'; +import { resolve } from 'path'; +import { isUndefined } from 'lodash'; +import { SSL, SSLBuffer } from '../interfaces'; + +export async function loadSSL(ssl?: SSL): Promise { + if (isUndefined(ssl) || isUndefined(ssl.key) || isUndefined(ssl.cert)) + return {}; + const [key, cert]: Buffer[] = await Promise.all([ + readFile(resolve(ssl.key)), + readFile(resolve(ssl.cert)), + ]); + return { key, cert }; +} diff --git a/src/server/wetty.ts b/src/server/wetty.ts deleted file mode 100644 index 9eab321..0000000 --- a/src/server/wetty.ts +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Create WeTTY server - * @module WeTTy - */ -import * as EventEmitter from 'events'; -import server from './server'; -import getCommand from './command'; -import term from './term'; -import loadSSL from './ssl'; -import { SSL, SSH, SSLBuffer, Server } from './interfaces'; - -export default class WeTTy extends EventEmitter { - /** - * Starts WeTTy Server - * @name start - */ - public start( - ssh: SSH = { user: '', host: 'localhost', auth: 'password', port: 22 }, - serverConf: Server = { - base: '/wetty/', - port: 3000, - host: '0.0.0.0', - title: 'WeTTy', - bypasshelmet: false, - }, - command = '', - ssl?: SSL - ): Promise { - return loadSSL(ssl).then((sslBuffer: SSLBuffer) => { - if (ssh.key) { - this.emit( - 'warn', - `!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! Password-less auth enabled using private key from ${ssh.key}. -! This is dangerous, anything that reaches the wetty server -! will be able to run remote operations without authentication. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!` - ); - } - - const io = server(serverConf, sslBuffer); - /** - * Wetty server connected too - * @fires WeTTy#connnection - */ - io.on('connection', (socket: SocketIO.Socket) => { - /** - * @event wetty#connection - * @name connection - */ - this.emit('connection', { - msg: `Connection accepted.`, - date: new Date(), - }); - const { args, user: sshUser } = getCommand(socket, ssh, command); - this.emit('debug', `sshUser: ${sshUser}, cmd: ${args.join(' ')}`); - if (sshUser) { - term.spawn(socket, args); - } else { - term - .login(socket) - .then((username: string) => { - this.emit('debug', `username: ${username.trim()}`); - args[1] = `${username.trim()}@${args[1]}`; - this.emit('debug', `cmd : ${args.join(' ')}`); - return term.spawn(socket, args); - }) - .catch(() => this.disconnected()); - } - }); - }); - } - - /** - * terminal spawned - * - * @fires module:WeTTy#spawn - */ - public spawned(pid: number, address: string): void { - /** - * Terminal process spawned - * @event WeTTy#spawn - * @name spawn - * @type {object} - */ - this.emit('spawn', { - msg: `PID=${pid} STARTED on behalf of ${address}`, - pid, - address, - }); - } - - /** - * terminal exited - * - * @fires WeTTy#exit - */ - public exited(code: number, pid: number): void { - /** - * Terminal process exits - * @event WeTTy#exit - * @name exit - */ - this.emit('exit', { code, msg: `PID=${pid} ENDED` }); - } - - /** - * Disconnect from WeTTY - * - * @fires WeTTy#disconnet - */ - private disconnected(): void { - /** - * @event WeTTY#disconnect - * @name disconnect - */ - this.emit('disconnect'); - } - - /** - * Wetty server started - * @fires WeTTy#server - */ - public server(port: number, connection: string): void { - /** - * @event WeTTy#server - * @type {object} - * @name server - */ - this.emit('server', { - msg: `${connection} on port ${port}`, - port, - connection, - }); - } -} diff --git a/src/server/wetty/index.ts b/src/server/wetty/index.ts new file mode 100644 index 0000000..d3bf9b1 --- /dev/null +++ b/src/server/wetty/index.ts @@ -0,0 +1,71 @@ +/** + * Create WeTTY server + * @module WeTTy + */ +import server from '../socketServer'; +import getCommand from '../command'; +import { spawn, login } from './term'; +import { logger, loadSSL } from '../utils'; +import { SSL, SSH, SSLBuffer, Server } from '../interfaces'; + +/** + * Starts WeTTy Server + * @name startWeTTy + */ +export default function startWeTTy( + ssh: SSH = { user: '', host: 'localhost', auth: 'password', port: 22 }, + serverConf: Server = { + base: '/wetty/', + port: 3000, + host: '0.0.0.0', + title: 'WeTTy', + bypasshelmet: false, + }, + command = '', + ssl?: SSL +): Promise { + return loadSSL(ssl).then((sslBuffer: SSLBuffer) => { + if (ssh.key) { + logger.warn(`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! Password-less auth enabled using private key from ${ssh.key}. +! This is dangerous, anything that reaches the wetty server +! will be able to run remote operations without authentication. +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`); + } + + const io = server(serverConf, sslBuffer); + /** + * Wetty server connected too + * @fires WeTTy#connnection + */ + io.on('connection', (socket: SocketIO.Socket) => { + /** + * @event wetty#connection + * @name connection + */ + logger.info('Connection accepted.'); + const { args, user: sshUser } = getCommand(socket, ssh, command); + logger.debug('Command Generated', { + user: sshUser, + cmd: args.join(' '), + }); + + if (sshUser) { + spawn(socket, args); + } else { + login(socket) + .then((username: string) => { + args[1] = `${username.trim()}@${args[1]}`; + logger.debug('Spawning term', { + username: username.trim(), + cmd: args.join(' ').trim(), + }); + return spawn(socket, args); + }) + .catch(() => { + logger.info('Disconnect signal sent'); + }); + } + }); + }); +} diff --git a/src/server/wetty/term/index.ts b/src/server/wetty/term/index.ts new file mode 100644 index 0000000..5cc6678 --- /dev/null +++ b/src/server/wetty/term/index.ts @@ -0,0 +1,5 @@ +import spawn from './spawn'; + +export { spawn }; + +export * from './login'; diff --git a/src/server/wetty/term/login.ts b/src/server/wetty/term/login.ts new file mode 100644 index 0000000..3018bd7 --- /dev/null +++ b/src/server/wetty/term/login.ts @@ -0,0 +1,34 @@ +import { spawn } from 'node-pty'; +import { xterm } from './xterm'; + +export function login(socket: SocketIO.Socket): Promise { + // Check request-header for username + const remoteUser = socket.request.headers['remote-user']; + if (remoteUser) { + return new Promise(resolve => { + resolve(remoteUser); + }); + } + + // Request carries no username information + // Create terminal and ask user for username + const term = spawn('/usr/bin/env', ['node', `${__dirname}/buffer.js`], xterm); + let buf = ''; + return new Promise((resolve, reject) => { + term.on('exit', () => { + resolve(buf); + }); + term.on('data', data => { + socket.emit('data', data); + }); + socket + .on('input', (input: string) => { + term.write(input); + buf = /\177/.exec(input) ? buf.slice(0, -1) : buf + input; + }) + .on('disconnect', () => { + term.kill(); + reject(); + }); + }); +} diff --git a/src/server/wetty/term/spawn.ts b/src/server/wetty/term/spawn.ts new file mode 100644 index 0000000..52fbe4a --- /dev/null +++ b/src/server/wetty/term/spawn.ts @@ -0,0 +1,40 @@ +import { spawn } from 'node-pty'; +import { isUndefined } from 'lodash'; +import { logger } from '../../utils'; +import { xterm } from './xterm'; + +export default function spawnTerm( + socket: SocketIO.Socket, + args: string[] +): void { + const term = spawn('/usr/bin/env', args, xterm); + const { pid } = term; + const address = args[0] === 'ssh' ? args[1] : 'localhost'; + logger.info('Process Started on behalf of user', { + pid, + address, + }); + socket.emit('login'); + term.on('exit', code => { + logger.info('Process exited', { code, pid }); + socket.emit('logout'); + socket + .removeAllListeners('disconnect') + .removeAllListeners('resize') + .removeAllListeners('input'); + }); + term.on('data', data => { + socket.emit('data', data); + }); + socket + .on('resize', ({ cols, rows }) => { + term.resize(cols, rows); + }) + .on('input', input => { + if (!isUndefined(term)) term.write(input); + }) + .on('disconnect', () => { + term.kill(); + logger.info('Process exited', { code: 0, pid }); + }); +} diff --git a/src/server/wetty/term/xterm.ts b/src/server/wetty/term/xterm.ts new file mode 100644 index 0000000..99c26c4 --- /dev/null +++ b/src/server/wetty/term/xterm.ts @@ -0,0 +1,15 @@ +import { IPtyForkOptions } from 'node-pty'; +import { isUndefined } from 'lodash'; + +export const xterm: IPtyForkOptions = { + name: 'xterm-256color', + cols: 80, + rows: 30, + cwd: process.cwd(), + env: Object.assign( + {}, + ...Object.keys(process.env) + .filter((key: string) => !isUndefined(process.env[key])) + .map((key: string) => ({ [key]: process.env[key] })) + ), +}; diff --git a/webpack.config.babel.js b/webpack.config.babel.js index cf410c5..8a2416f 100644 --- a/webpack.config.babel.js +++ b/webpack.config.babel.js @@ -1,21 +1,22 @@ +/* eslint-disable @typescript-eslint/explicit-function-return-type */ + import path from 'path'; import webpack from 'webpack'; import MiniCssExtractPlugin from 'mini-css-extract-plugin'; import nodeExternals from 'webpack-node-externals'; -const template = override => - ({ - mode: process.env.NODE_ENV || 'development', - resolve: { - modules: [path.resolve(__dirname, 'src'), 'node_modules'], - extensions: ['.ts', '.json', '.js', '.node'], - }, +const template = override => ({ + mode: process.env.NODE_ENV || 'development', + resolve: { + modules: [path.resolve(__dirname, 'src'), 'node_modules'], + extensions: ['.ts', '.json', '.js', '.node'], + }, - stats: { - colors: true, - }, - ...override - }); + stats: { + colors: true, + }, + ...override, +}); const entry = (folder, file) => path.join(__dirname, 'src', folder, `${file}.ts`); diff --git a/yarn.lock b/yarn.lock index 99316e4..44c70f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,17 +10,17 @@ "@babel/highlight" "^7.0.0" "@babel/core@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.4.tgz#6ebd9fe00925f6c3e177bb726a188b5f578088ff" + integrity sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/generator" "^7.6.4" + "@babel/helpers" "^7.6.2" + "@babel/parser" "^7.6.4" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.3" + "@babel/types" "^7.6.3" convert-source-map "^1.1.0" debug "^4.1.0" json5 "^2.1.0" @@ -29,16 +29,15 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" - integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== +"@babel/generator@^7.6.3", "@babel/generator@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.4.tgz#a4f8437287bf9671b07f483b76e3bb731bc97671" + integrity sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w== dependencies: - "@babel/types" "^7.5.5" + "@babel/types" "^7.6.3" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" - trim-right "^1.0.1" "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" @@ -64,10 +63,10 @@ "@babel/traverse" "^7.4.4" "@babel/types" "^7.4.4" -"@babel/helper-create-class-features-plugin@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz#401f302c8ddbc0edd36f7c6b2887d8fa1122e5a4" - integrity sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg== +"@babel/helper-create-class-features-plugin@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.6.0.tgz#769711acca889be371e9bc2eb68641d55218021f" + integrity sha512-O1QWBko4fzGju6VoVvrZg0RROCVifcLxiApnGP3OWfWzvxRZFCoBD81K5ur5e3bVY2Vf/5rIJm8cqPKn8HUJng== dependencies: "@babel/helper-function-name" "^7.1.0" "@babel/helper-member-expression-to-functions" "^7.5.5" @@ -207,14 +206,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.2.0" -"@babel/helpers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" - integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== +"@babel/helpers@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" + integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" "@babel/highlight@^7.0.0": version "7.5.0" @@ -226,21 +225,22 @@ js-tokens "^4.0.0" "@babel/node@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.5.5.tgz#5db48a3bcee64d9eda6474f2a0a55b235d0438b5" - integrity sha512-xsW6il+yY+lzXMsQuvIJNA7tU8ix/f4G6bDt4DrnCkVpsR6clk9XgEbp7QF+xGNDdoD7M7QYokCH83pm+UjD0w== + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.6.3.tgz#f175ab6718dde55431cbd4d9dee95f65c38be527" + integrity sha512-+nHje5AcE9TPlB/TRGYyOSQyTfhfU/WXniG6SkVf+V5+ibAjEqkH79lYdiEcytBTH4KeSf25IriySXs6TjaLjg== dependencies: - "@babel/polyfill" "^7.0.0" - "@babel/register" "^7.5.5" + "@babel/register" "^7.6.2" commander "^2.8.1" + core-js "^3.2.1" lodash "^4.17.13" node-environment-flags "^1.0.5" + regenerator-runtime "^0.13.3" v8flags "^3.1.1" -"@babel/parser@^7.4.4", "@babel/parser@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== +"@babel/parser@^7.6.0", "@babel/parser@^7.6.3", "@babel/parser@^7.6.4": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81" + integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A== "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" @@ -267,10 +267,10 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" - integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw== +"@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" + integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" @@ -283,14 +283,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" - integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== +"@babel/plugin-proposal-unicode-property-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" + integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + regexpu-core "^4.6.0" "@babel/plugin-syntax-async-generators@^7.2.0": version "7.2.0" @@ -357,10 +357,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz#a35f395e5402822f10d2119f6f8e045e3639a2ce" - integrity sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg== +"@babel/plugin-transform-block-scoping@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz#6e854e51fbbaa84351b15d4ddafe342f3a5d542a" + integrity sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.13" @@ -386,21 +386,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" - integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== +"@babel/plugin-transform-dotall-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" + integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" + regexpu-core "^4.6.0" "@babel/plugin-transform-duplicate-keys@^7.5.0": version "7.5.0" @@ -455,10 +455,10 @@ "@babel/helper-plugin-utils" "^7.0.0" babel-plugin-dynamic-import-node "^2.3.0" -"@babel/plugin-transform-modules-commonjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" - integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== +"@babel/plugin-transform-modules-commonjs@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" + integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== dependencies: "@babel/helper-module-transforms" "^7.4.4" "@babel/helper-plugin-utils" "^7.0.0" @@ -482,12 +482,12 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": - version "7.4.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" - integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf" + integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw== dependencies: - regexp-tree "^0.1.6" + regexpu-core "^4.6.0" "@babel/plugin-transform-new-target@^7.4.4": version "7.4.4" @@ -541,10 +541,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.2.0": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz#3103a9abe22f742b6d406ecd3cd49b774919b406" - integrity sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w== +"@babel/plugin-transform-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" + integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -571,45 +571,37 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typescript@^7.3.2": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz#6d862766f09b2da1cb1f7d505fe2aedab6b7d4b8" - integrity sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w== +"@babel/plugin-transform-typescript@^7.6.0": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.6.3.tgz#dddb50cf3b8b2ef70b22e5326e9a91f05a1db13b" + integrity sha512-aiWINBrPMSC3xTXRNM/dfmyYuPNKY/aexYqBgh0HBI5Y+WO5oRAqW/oROYeYHrF4Zw12r9rK4fMk/ZlAmqx/FQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.5.5" + "@babel/helper-create-class-features-plugin" "^7.6.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-typescript" "^7.2.0" -"@babel/plugin-transform-unicode-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" - integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== +"@babel/plugin-transform-unicode-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" + integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/polyfill@^7.0.0": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.4.4.tgz#78801cf3dbe657844eeabf31c1cae3828051e893" - integrity sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.2" + regexpu-core "^4.6.0" "@babel/preset-env@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.5.tgz#bc470b53acaa48df4b8db24a570d6da1fef53c9a" - integrity sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A== + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271" + integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ== dependencies: "@babel/helper-module-imports" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-async-generator-functions" "^7.2.0" "@babel/plugin-proposal-dynamic-import" "^7.5.0" "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.5.5" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" "@babel/plugin-syntax-async-generators" "^7.2.0" "@babel/plugin-syntax-dynamic-import" "^7.2.0" "@babel/plugin-syntax-json-strings" "^7.2.0" @@ -618,11 +610,11 @@ "@babel/plugin-transform-arrow-functions" "^7.2.0" "@babel/plugin-transform-async-to-generator" "^7.5.0" "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.5.5" + "@babel/plugin-transform-block-scoping" "^7.6.3" "@babel/plugin-transform-classes" "^7.5.5" "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.5.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/plugin-transform-destructuring" "^7.6.0" + "@babel/plugin-transform-dotall-regex" "^7.6.2" "@babel/plugin-transform-duplicate-keys" "^7.5.0" "@babel/plugin-transform-exponentiation-operator" "^7.2.0" "@babel/plugin-transform-for-of" "^7.4.4" @@ -630,10 +622,10 @@ "@babel/plugin-transform-literals" "^7.2.0" "@babel/plugin-transform-member-expression-literals" "^7.2.0" "@babel/plugin-transform-modules-amd" "^7.5.0" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.6.0" "@babel/plugin-transform-modules-systemjs" "^7.5.0" "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3" "@babel/plugin-transform-new-target" "^7.4.4" "@babel/plugin-transform-object-super" "^7.5.5" "@babel/plugin-transform-parameters" "^7.4.4" @@ -641,12 +633,12 @@ "@babel/plugin-transform-regenerator" "^7.4.5" "@babel/plugin-transform-reserved-words" "^7.2.0" "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-spread" "^7.6.2" "@babel/plugin-transform-sticky-regex" "^7.2.0" "@babel/plugin-transform-template-literals" "^7.4.4" "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.4.4" - "@babel/types" "^7.5.5" + "@babel/plugin-transform-unicode-regex" "^7.6.2" + "@babel/types" "^7.6.3" browserslist "^4.6.0" core-js-compat "^3.1.1" invariant "^2.2.2" @@ -654,77 +646,83 @@ semver "^5.5.0" "@babel/preset-typescript@^7.3.3": - version "7.3.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" - integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg== + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz#25768cb8830280baf47c45ab1a519a9977498c98" + integrity sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.3.2" + "@babel/plugin-transform-typescript" "^7.6.0" -"@babel/register@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.5.5.tgz#40fe0d474c8c8587b28d6ae18a03eddad3dac3c1" - integrity sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ== +"@babel/register@^7.5.5", "@babel/register@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.6.2.tgz#25765a922202cb06f8bdac5a3b1e70cd6bf3dd45" + integrity sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ== dependencies: - core-js "^3.0.0" find-cache-dir "^2.0.0" lodash "^4.17.13" mkdirp "^0.5.1" pirates "^4.0.0" source-map-support "^0.5.9" -"@babel/template@^7.1.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== +"@babel/runtime@^7.2.0", "@babel/runtime@^7.5.5": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.3.tgz#935122c74c73d2240cafd32ddb5fc2a6cd35cf1f" + integrity sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" - integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9" + integrity sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw== dependencies: "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" + "@babel/generator" "^7.6.3" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.5" - "@babel/types" "^7.5.5" + "@babel/parser" "^7.6.3" + "@babel/types" "^7.6.3" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.2.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.2.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3": + version "7.6.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09" + integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA== dependencies: esutils "^2.0.2" lodash "^4.17.13" to-fast-properties "^2.0.0" -"@nodelib/fs.scandir@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz#1f981cd5b83e85cfdeb386fc693d4baab392fa54" - integrity sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w== +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== dependencies: - "@nodelib/fs.stat" "2.0.2" + "@nodelib/fs.stat" "2.0.3" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.2", "@nodelib/fs.stat@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz#2762aea8fe78ea256860182dcb52d61ee4b8fda6" - integrity sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw== +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== -"@nodelib/fs.walk@^1.2.1": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz#a555dc256acaf00c62b0db29529028dd4d4cb141" - integrity sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA== +"@nodelib/fs.walk@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== dependencies: - "@nodelib/fs.scandir" "2.1.2" + "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" "@samverschueren/stream-to-observable@^0.3.0": @@ -734,6 +732,18 @@ dependencies: any-observable "^0.3.0" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + "@types/body-parser@*": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.1.tgz#18fcf61768fb5c30ccc508c21d6fd2e8b3bf7897" @@ -767,9 +777,9 @@ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/express-serve-static-core@*": - version "4.16.9" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.9.tgz#69e00643b0819b024bdede95ced3ff239bb54558" - integrity sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ== + version "4.16.10" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.10.tgz#3c1313c6e6b75594561b473a286f016a9abf2132" + integrity sha512-gM6evDj0OvTILTRKilh9T5dTaGpv1oYiFcJAfgSejuMJgGJUsD9hKEU2lB4aiTNy4WwChxRnjfYFuBQsULzsJw== dependencies: "@types/node" "*" "@types/range-parser" "*" @@ -784,9 +794,9 @@ "@types/serve-static" "*" "@types/fs-extra@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.0.tgz#d3e2c313ca29f95059f198dd60d1f774642d4b25" - integrity sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q== + version "8.0.1" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.1.tgz#a2378d6e7e8afea1564e44aafa2e207dadf77686" + integrity sha512-J00cVDALmi/hJOYsunyT52Hva5TnJeKP5yd1r+mH/ZU0mbYZflR0Z5kw5kITtKTRYMhm1JMClOFYdHnQszEvqw== dependencies: "@types/node" "*" @@ -812,9 +822,9 @@ integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== "@types/lodash@^4.14.138": - version "4.14.138" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.138.tgz#34f52640d7358230308344e579c15b378d91989e" - integrity sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg== + version "4.14.144" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.144.tgz#12e57fc99064bce45e5ab3c8bc4783feb75eab8e" + integrity sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg== "@types/mime@*": version "2.0.1" @@ -834,9 +844,9 @@ "@types/express" "*" "@types/node@*", "@types/node@^12.7.3": - version "12.7.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.3.tgz#27b3f40addaf2f580459fdb405222685542f907a" - integrity sha512-3SiLAIBkDWDg6vFo0+5YJyHPWU9uwu40Qe+v+0MH8wRKYBimHvvAOyk3EzMrD/TrIlLYfXrqDqrg913PynrMJQ== + version "12.11.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a" + integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -869,26 +879,26 @@ integrity sha512-Vs55Kq8F+OWvy1RLA31rT+cAyemzgm0EWNeax6BWF8H7QiiOYMJIdcwSDdm5LVgfEkoepsWkS+40+WNb7BUMbg== "@types/socket.io@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-2.1.2.tgz#7165c2587cc3b86b44aa78e2a0060140551de211" - integrity sha512-Ind+4qMNfQ62llyB4IMs1D8znMEBsMKohZBPqfBUIXqLQ9bdtWIbNTBWwtdcBWJKnokMZGcmWOOKslatni5vtA== + version "2.1.4" + resolved "https://registry.yarnpkg.com/@types/socket.io/-/socket.io-2.1.4.tgz#674e7bc193c5ccdadd4433f79f3660d31759e9ac" + integrity sha512-cI98INy7tYnweTsUlp8ocveVdAxENUThO0JsLSCs51cjOP2yV5Mqo5QszMDPckyRRA+PO6+wBgKvGvHUCc23TQ== dependencies: "@types/node" "*" "@types/webpack-env@^1.14.0": - version "1.14.0" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.14.0.tgz#8edfc5f8e6eae20eeed3ca0d02974ed4ee5e4efc" - integrity sha512-Fv+0gYJzE/czLoRKq+gnXWr4yBpPM3tO3C8pDLFwqVKlMICQUq5OsxwwFZYDaVr7+L6mgNDp16iOcJHEz3J5RQ== + version "1.14.1" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.14.1.tgz#0d8a53f308f017c53a5ddc3d07f4d6fa76b790d7" + integrity sha512-0Ki9jAAhKDSuLDXOIMADg54Hu60SuBTEsWaJGGy5cV+SSUQ63J2a+RrYYGrErzz39fXzTibhKrAQJAb8M7PNcA== "@types/yargs-parser@*": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.0.0.tgz#453743c5bbf9f1bed61d959baab5b06be029b2d0" - integrity sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw== + version "13.1.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" + integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== "@types/yargs@^13.0.2": - version "13.0.2" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.2.tgz#a64674fc0149574ecd90ba746e932b5a5f7b3653" - integrity sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ== + version "13.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380" + integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== dependencies: "@types/yargs-parser" "*" @@ -1123,12 +1133,12 @@ after@0.8.2: integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= aggregate-error@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" - integrity sha512-yKD9kEoJIR+2IFqhMwayIBgheLYbB3PS2OBhWae1L/ODTd/JF/30cW0bc9TqzRL3k4U41Dieu3BF4I29p8xesA== + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" - indent-string "^3.2.0" + indent-string "^4.0.0" ajv-errors@^1.0.0: version "1.0.1" @@ -1150,6 +1160,22 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +all-contributors-cli@^6.9.3: + version "6.9.3" + resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-6.9.3.tgz#84995eac024402107f15e836364a9d5bf39b0d46" + integrity sha512-iSJrwddd2gEI08qUW2Q3UR22zgaAAbnur5MrrB3+nHmw1uTwzdy+/dzPZe2xNCEwozBHm2fF/67h3i03sPqAsw== + dependencies: + "@babel/runtime" "^7.2.0" + async "^3.0.1" + chalk "^2.3.0" + didyoumean "^1.2.1" + inquirer "^6.2.1" + json-fixer "^1.3.1-0" + lodash "^4.11.2" + pify "^4.0.1" + request "^2.72.0" + yargs "^14.0.0" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -1162,6 +1188,13 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -1227,6 +1260,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +args-js@~0.10.12: + version "0.10.12" + resolved "https://registry.yarnpkg.com/args-js/-/args-js-0.10.12.tgz#a327aea80e41072a3d85f9c274db6511eb95e49c" + integrity sha1-oyeuqA5BByo9hfnCdNtlEeuV5Jw= + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" @@ -1275,6 +1313,11 @@ arraybuffer.slice@~0.0.7: resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -1324,7 +1367,7 @@ async-foreach@^0.1.3: resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= -async-limiter@~1.0.0: +async-limiter@^1.0.0, async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== @@ -1336,6 +1379,11 @@ async@^2.5.0, async@^2.6.1: dependencies: lodash "^4.17.14" +async@^3.0.1, async@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772" + integrity sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1404,10 +1452,10 @@ base64-js@^1.0.2: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== base@^0.11.1: version "0.11.2" @@ -1466,9 +1514,9 @@ block-stream@*: inherits "~2.0.0" bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -1491,10 +1539,10 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" -bowser@2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.5.3.tgz#811b0a24219c566c9a6ab3402bc8a13f35a18a96" - integrity sha512-aWCA+CKfKNL/WGzNgjmK+Whp57JMzboZMwJ5gy2jDj2bEIjbMCb3ImGX+V++5wsJftyFiDIbOjRXl60ycniVqg== +bowser@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.7.0.tgz#96eab1fa07fab08c1ec4c75977a7c8ddf8e0fe1f" + integrity sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w== boxen@^1.2.1: version "1.3.0" @@ -1509,6 +1557,20 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" +boxen@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb" + integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^2.4.2" + cli-boxes "^2.2.0" + string-width "^3.0.0" + term-size "^1.2.0" + type-fest "^0.3.0" + widest-line "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1604,14 +1666,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.6.0, browserslist@^4.6.6: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== +browserslist@^4.6.0, browserslist@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348" + integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw== dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" + caniuse-lite "^1.0.30001004" + electron-to-chromium "^1.3.295" + node-releases "^1.1.38" buffer-from@^1.0.0: version "1.1.1" @@ -1683,6 +1745,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -1720,6 +1795,15 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -1730,7 +1814,7 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= -camelcase@^4.0.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= @@ -1745,10 +1829,10 @@ camelize@1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -caniuse-lite@^1.0.30000989: - version "1.0.30000989" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9" - integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw== +caniuse-lite@^1.0.30001004: + version "1.0.30001005" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz#823054210be638c725521edcb869435dae46728d" + integrity sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg== capture-stack-trace@^1.0.0: version "1.0.1" @@ -1760,7 +1844,15 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +cb2promise@~1.1.0, cb2promise@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cb2promise/-/cb2promise-1.1.1.tgz#6d97ef9d031202175564eee48af09b17eceded68" + integrity sha512-ShCxBARPFJlSO+Y4pxSpbXh6y+tW54Dmy4jKf0gB1C7qUslRqWqFi80+W9416zSoj6RsqMsnKUcpkt3bOrZmDg== + dependencies: + mimic-fn "~2.0.0" + sliced "~1.0.1" + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1785,7 +1877,7 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.0.2, chokidar@^2.1.5: +chokidar@^2.0.2, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -1805,9 +1897,9 @@ chokidar@^2.0.2, chokidar@^2.1.5: fsevents "^1.2.7" chownr@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== chrome-trace-event@^1.0.2: version "1.0.2" @@ -1854,6 +1946,11 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +cli-boxes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -1910,6 +2007,13 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -1962,9 +2066,9 @@ colornames@^1.1.1: integrity sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y= colors@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== colorspace@1.1.x: version "1.1.2" @@ -1982,9 +2086,9 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: delayed-stream "~1.0.0" commander@^2.20.0, commander@^2.8.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commondir@^1.0.1: version "1.0.1" @@ -2073,10 +2177,22 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +configstore@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" + integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + confusing-browser-globals@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz#93ffec1f82a6e2bf2bc36769cc3a92fa20e502f3" - integrity sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg== + version "1.0.9" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" + integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== console-browserify@^1.1.0: version "1.1.0" @@ -2157,22 +2273,17 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.1.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150" - integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A== + version "3.3.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.4.tgz#a151c6cd754edbfe6a4a2a66b9382df2ae74fbcd" + integrity sha512-7OK3/LPP8R3Ovasf3GilEOp+o1w0ZKJ75FMou2RDfTwIV69G5RkKCGFnqgBv/ZhR6xo9GCzlfVALyHmydbE7DA== dependencies: - browserslist "^4.6.6" + browserslist "^4.7.2" semver "^6.3.0" -core-js@^2.6.5: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - -core-js@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.2.1.tgz#cd41f38534da6cc59f7db050fe67307de9868b09" - integrity sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw== +core-js@^3.2.1: + version "3.3.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.3.4.tgz#6b0a23392958317bfb46e40b090529a923add669" + integrity sha512-BtibooaAmSOptGLRccsuX/dqgPtXwNgqcvYA6kOTTMzonRxZ+pJS4e+6mvVutESfXMeTnK8m3M+aBu3bkJbR+w== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2255,6 +2366,15 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2307,10 +2427,10 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= dashdash@^1.12.0: version "1.14.1" @@ -2341,7 +2461,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.6: +debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2362,7 +2482,15 @@ debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2372,6 +2500,13 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -2387,6 +2522,11 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +defer-to-connect@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" + integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -2468,6 +2608,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -2482,6 +2627,11 @@ diagnostics@^1.1.1: enabled "1.0.x" kuler "1.0.x" +didyoumean@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" + integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -2563,10 +2713,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.247: - version "1.3.251" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.251.tgz#8dbfe0d5c5d884c456d3d8d83fcb3258ab9eba3a" - integrity sha512-C5oOBdqJTYago4PBeew9duLqWZ3SlDnTRM+PMIgZd/ILFrT5AfaAGd3jRNEfuPklFHFqOjfwbCvXpyzEYb5sXg== +electron-to-chromium@^1.3.295: + version "1.3.296" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz#a1d4322d742317945285d3ba88966561b67f3ac8" + integrity sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ== elegant-spinner@^1.0.1: version "1.0.1" @@ -2574,9 +2724,9 @@ elegant-spinner@^1.0.1: integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= elliptic@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.0.tgz#2b8ed4c891b7de3200e14412a5b8248c7af505ca" - integrity sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg== + version "6.5.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" + integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2609,21 +2759,21 @@ encodeurl@~1.0.2: integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -engine.io-client@~3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.3.2.tgz#04e068798d75beda14375a264bb3d742d7bc33aa" - integrity sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ== +engine.io-client@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.0.tgz#82a642b42862a9b3f7a188f41776b2deab643700" + integrity sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA== dependencies: component-emitter "1.2.1" component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" has-cors "1.1.0" indexof "0.0.1" parseqs "0.0.5" @@ -2632,10 +2782,10 @@ engine.io-client@~3.3.1: xmlhttprequest-ssl "~1.5.4" yeast "0.1.2" -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== +engine.io-parser@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" + integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w== dependencies: after "0.8.2" arraybuffer.slice "~0.0.7" @@ -2643,19 +2793,19 @@ engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: blob "0.0.5" has-binary2 "~1.0.2" -engine.io@~3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.3.2.tgz#18cbc8b6f36e9461c5c0f81df2b830de16058a59" - integrity sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w== +engine.io@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.0.tgz#3a962cc4535928c252759a00f98519cb46c53ff3" + integrity sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w== dependencies: accepts "~1.3.4" - base64id "1.0.0" + base64id "2.0.0" cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~6.1.0" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "^7.1.2" -enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: +enhanced-resolve@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== @@ -2664,6 +2814,15 @@ enhanced-resolve@4.1.0, enhanced-resolve@^4.1.0: memory-fs "^0.4.0" tapable "^1.0.0" +enhanced-resolve@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" + integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + env-variable@0.0.x: version "0.0.5" resolved "https://registry.yarnpkg.com/env-variable/-/env-variable-0.0.5.tgz#913dd830bef11e96a039c038d4130604eba37f88" @@ -2684,9 +2843,9 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.0.tgz#f59d9d44278ea8f90c8ff3de1552537c2fd739b4" - integrity sha512-lri42nNq1tIohUuwFBYEM3wKwcrcJa78jukGDdWsuaNxTtxBFGFkKUQ15nc9J+ipje4mhbQR6JwABb4VvawR3A== + version "1.16.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.0.tgz#d3a26dc9c3283ac9750dca569586e976d9dcc06d" + integrity sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg== dependencies: es-to-primitive "^1.2.0" function-bind "^1.1.1" @@ -2696,8 +2855,8 @@ es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: is-regex "^1.0.4" object-inspect "^1.6.0" object-keys "^1.1.1" - string.prototype.trimleft "^2.0.0" - string.prototype.trimright "^2.0.0" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" es-to-primitive@^1.2.0: version "1.2.0" @@ -2728,9 +2887,9 @@ eslint-config-airbnb-base@14.0.0: object.entries "^1.1.0" eslint-config-prettier@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz#0a04f147e31d33c6c161b2dd0971418ac52d0477" - integrity sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w== + version "6.5.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.5.0.tgz#aaf9a495e2a816865e541bfdbb73a65cc162b3eb" + integrity sha512-cjXp8SbO9VFGW/Z7mbTydqS9to8Z58E5aYhj3e1+Hx7lS9s6gL5ILKNpCqZAFOVYRcSkWPFYljHrEh8QFEK5EQ== dependencies: get-stdin "^6.0.0" @@ -2768,9 +2927,9 @@ eslint-plugin-import@^2.18.2: resolve "^1.11.0" eslint-plugin-prettier@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" - integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== + version "3.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" + integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA== dependencies: prettier-linter-helpers "^1.0.0" @@ -2790,20 +2949,13 @@ eslint-scope@^5.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-utils@^1.3.1: +eslint-utils@^1.3.1, eslint-utils@^1.4.2: version "1.4.3" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: eslint-visitor-keys "^1.1.0" -eslint-utils@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" - integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== - dependencies: - eslint-visitor-keys "^1.0.0" - eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" @@ -2921,7 +3073,7 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^1.0.0: +execa@^1.0.0, execa@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== @@ -2935,11 +3087,11 @@ execa@^1.0.0: strip-eof "^1.0.0" execa@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/execa/-/execa-2.0.4.tgz#2f5cc589c81db316628627004ea4e37b93391d8e" - integrity sha512-VcQfhuGD51vQUQtKIq2fjGDLDbL6N1DTQVpYzxZ7LPIXw3HqTuIz6uxRmpV1qf8i31LHf2kjiaGI+GdHwRgbnQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-2.1.0.tgz#e5d3ecd837d2a60ec50f3da78fd39767747bbe99" + integrity sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw== dependencies: - cross-spawn "^6.0.5" + cross-spawn "^7.0.0" get-stream "^5.0.0" is-stream "^2.0.0" merge-stream "^2.0.0" @@ -2949,6 +3101,13 @@ execa@^2.0.3: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +exists-file@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/exists-file/-/exists-file-3.0.2.tgz#8adfd3b32529302f2e61690b296789f8abd90edf" + integrity sha512-0mO5ZIWiJl35mTCkyyh/cU1ucn+17fOn7/P+QzNCby+/OLKOKKH9fR5kh+riKlNutxYTbZG+OHyYqFfQfpweGw== + dependencies: + cb2promise "~1.1.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -3074,15 +3233,14 @@ fast-diff@^1.1.2: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" - integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.1.0.tgz#77375a7e3e6f6fc9b18f061cddd28b8d1eec75ae" + integrity sha512-TrUz3THiq2Vy3bjfQUB2wNyPdGBeGmdjbzzBLhfHN4YFurYptCKwGq/TfiRavbGywFRzY6U2CdmQ1zmsY5yYaw== dependencies: - "@nodelib/fs.stat" "^2.0.1" - "@nodelib/fs.walk" "^1.2.1" - glob-parent "^5.0.0" - is-glob "^4.0.1" - merge2 "^1.2.3" + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" micromatch "^4.0.2" fast-json-stable-stringify@^2.0.0: @@ -3096,9 +3254,9 @@ fast-levenshtein@~2.0.4: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fast-safe-stringify@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz#04b26106cc56681f51a044cfc0d76cf0008ac2c2" - integrity sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg== + version "2.0.7" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" + integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== fastq@^1.6.0: version "1.6.0" @@ -3153,9 +3311,9 @@ file-loader@^4.2.0: schema-utils "^2.0.0" file-type@^12.3.0: - version "12.3.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.3.0.tgz#74d755e5dc9c5cbc7ee6f182529b453906ac88c2" - integrity sha512-4E4Esq9KLwjYCY32E7qSmd0h7LefcniZHX+XcdJ4Wfx1uGJX7QCigiqw/U0yT7WOslm28yhxl87DJ0wHYv0RAA== + version "12.3.1" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.3.1.tgz#8a13bb49332295e5b02c2d6bba6a6a179bd5898c" + integrity sha512-FXxY5h6vSYMjrRal4YqbtfuoKD/oE0AMjJ7E5Hm+BdaQECcFVD03B41RAWYJ7wyuLr/wRnCtFo7y37l+nh+TAA== fill-range@^4.0.0: version "4.0.0" @@ -3317,11 +3475,11 @@ fs-extra@^8.1.0: universalify "^0.1.0" fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" @@ -3356,7 +3514,7 @@ fstream@^1.0.0, fstream@^1.0.12: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -3398,9 +3556,9 @@ get-caller-file@^2.0.1: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-own-enumerable-property-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" - integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + version "3.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz#6f7764f88ea11e0b514bd9bd860a132259992ca4" + integrity sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA== get-stdin@^4.0.1: version "4.0.1" @@ -3422,14 +3580,14 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.0.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== @@ -3448,6 +3606,17 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-authors-cli@^1.0.18: + version "1.0.18" + resolved "https://registry.yarnpkg.com/git-authors-cli/-/git-authors-cli-1.0.18.tgz#b4148740849a8f84ea18eab172b17f3ceb07764a" + integrity sha512-0/5Wo3qBNiyc4RIvqL/qKnM61ctc+qPz3llHkDmAm650/0tmPM7MpoTU3dYHlFz8lD4BbkX7DvtLsoa1xo/adQ== + dependencies: + execa "~1.0.0" + exists-file "~3.0.2" + json-future "~2.2.0" + meow "~5.0.0" + update-notifier "~3.0.0" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -3456,17 +3625,17 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== +glob-parent@^5.0.0, glob-parent@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== dependencies: is-glob "^4.0.1" glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + version "7.1.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" + integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3563,10 +3732,27 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== har-schema@^2.0.0: version "2.0.0" @@ -3651,6 +3837,11 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3679,20 +3870,20 @@ helmet-crossdomain@0.4.0: resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.4.0.tgz#5f1fe5a836d0325f1da0a78eaa5fd8429078894e" integrity sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA== -helmet-csp@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.9.0.tgz#8524886b08c7f7d611cb5f36eae453dd604efd4c" - integrity sha512-DGGOQtOLM7ZQpjbf/uvUonq1yG/rFgsBuK10ZJt2AtxUJxqfkPvfmP9aLUmgH9IactiRiYoiFY72YYSPl1TLTQ== +helmet-csp@2.9.4: + version "2.9.4" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.9.4.tgz#801382bac98f2f88706dc5c89d95c7e31af3a4a9" + integrity sha512-qUgGx8+yk7Xl8XFEGI4MFu1oNmulxhQVTlV8HP8tV3tpfslCs30OZz/9uQqsWPvDISiu/NwrrCowsZBhFADYqg== dependencies: - bowser "2.5.3" + bowser "^2.7.0" camelize "1.0.0" content-security-policy-builder "2.1.0" dasherize "2.0.0" helmet@^3.20.1: - version "3.20.1" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.20.1.tgz#802fcb39ac6865208cbc6879d3502e582c6f777e" - integrity sha512-em+X5Wz/f0yqoRsBnpnVy3wJHSiIeskX3FQn30szBh1tILaOeSRRLkShuUVFlk/o4qTYjWxdHg4FrRe45iBWHg== + version "3.21.2" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.21.2.tgz#7e2a19d5f6d898a77b5d2858e8e4bb2cda59f19f" + integrity sha512-okUo+MeWgg00cKB8Csblu8EXgcIoDyb5ZS/3u0W4spCimeVuCUvVZ6Vj3O2VJ1Sxpyb8jCDvzu0L1KKT11pkIg== dependencies: depd "2.0.0" dns-prefetch-control "0.2.0" @@ -3701,14 +3892,14 @@ helmet@^3.20.1: feature-policy "0.3.0" frameguard "3.1.0" helmet-crossdomain "0.4.0" - helmet-csp "2.9.0" + helmet-csp "2.9.4" hide-powered-by "1.1.0" hpkp "2.0.0" hsts "2.2.0" ienoopen "1.1.0" nocache "2.1.0" referrer-policy "1.2.0" - x-xss-protection "1.2.0" + x-xss-protection "1.3.0" hide-powered-by@1.1.0: version "1.1.0" @@ -3732,9 +3923,9 @@ homedir-polyfill@^1.0.1: parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.8.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" - integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== hpkp@2.0.0: version "2.0.0" @@ -3748,6 +3939,11 @@ hsts@2.2.0: dependencies: depd "2.0.0" +http-cache-semantics@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5" + integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew== + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -3784,20 +3980,20 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -husky@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.5.tgz#d7db27c346645a8dc52df02aa534a377ad7925e0" - integrity sha512-cKd09Jy9cDyNIvAdN2QQAP/oA21sle4FWXjIMDttailpLAYZuBE7WaPmhrkj+afS8Sj9isghAtFvWSQ0JiwOHg== +husky@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/husky/-/husky-3.0.9.tgz#a2c3e9829bfd6b4957509a9500d2eef5dbfc8044" + integrity sha512-Yolhupm7le2/MqC1VYLk/cNmYxsSsqKkTyBhzQHhPK1jFnC89mmmNVuGtLNabjDI6Aj8UNIr0KpRNuBkiC4+sg== dependencies: chalk "^2.4.2" + ci-info "^2.0.0" cosmiconfig "^5.2.1" execa "^1.0.0" get-stdin "^7.0.0" - is-ci "^2.0.0" opencollective-postinstall "^2.0.2" pkg-dir "^4.2.0" please-upgrade-node "^3.2.0" - read-pkg "^5.1.1" + read-pkg "^5.2.0" run-node "^1.0.0" slash "^3.0.0" @@ -3836,9 +4032,9 @@ ignore-by-default@^1.0.1: integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" @@ -3898,11 +4094,16 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" -indent-string@^3.0.0, indent-string@^3.2.0: +indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -3946,7 +4147,7 @@ ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -inquirer@^6.4.1: +inquirer@^6.2.1, inquirer@^6.4.1: version "6.5.2" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== @@ -4152,6 +4353,11 @@ is-npm@^1.0.0: resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= +is-npm@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053" + integrity sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4189,15 +4395,20 @@ is-path-inside@^1.0.0: path-is-inside "^1.0.1" is-path-inside@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.1.tgz#7417049ed551d053ab82bba3fdd6baa6b3a81e89" - integrity sha512-CKstxrctq1kUesU6WhtZDbYKzzYBuRH0UYInAVrkc/EYdB9ltbfE0gOoayG9nhohG6447sOOVGhHqsdmBvkbNg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== -is-plain-obj@^1.0.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-plain-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.0.0.tgz#7fd1a7f1b69e160cde9181d2313f445c68aa2679" + integrity sha512-EYisGhpgSCwspmIuRHGjROWTon2Xp8Z7U03Wubk/bTL5TTRC5R1rGVgyjzBrk9+ULdH6cRD06KRcw/xfqhVYKQ== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -4210,6 +4421,11 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= +is-promise@~1, is-promise@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-1.0.1.tgz#31573761c057e33c2e91aab9e96da08cefbe76e5" + integrity sha1-MVc3YcBX4zwukaq56W2gjO++duU= + is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -4228,9 +4444,9 @@ is-regexp@^1.0.0: integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" @@ -4249,7 +4465,7 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -is-typedarray@~1.0.0: +is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= @@ -4269,6 +4485,11 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4339,6 +4560,35 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-fixer@^1.3.1-0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/json-fixer/-/json-fixer-1.3.3.tgz#8a11c0536330e44f2aaba8b836d16657ad590dba" + integrity sha512-+UpmAba1KuudCrsbw/oZyibEyAbhFkaDoG9RJcSQVMLdSd6LI1dlaKbYbFzx4O6u4WA7TiBYAXHdQs2bMFCbEw== + dependencies: + "@babel/runtime" "^7.5.5" + chalk "^2.4.2" + pegjs "^0.10.0" + +json-future@~2.2.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/json-future/-/json-future-2.2.4.tgz#6143e5abd7be27e9cddb2ddb5cb2a8c5a6151c2f" + integrity sha512-ntaVCVjI+BtVdO0boNvEJM6uAnP5FFRRQSKRUrZh8jX5tUogB1JGSrozS8pCiqPkKfjiNltI3rXQZeVPO6vaDQ== + dependencies: + args-js "~0.10.12" + async "~3.1.0" + cb2promise "~1.1.1" + json-stringify-safe "~5.0.1" + load-json-file "~6.1.0" + nodeify "~1.0.1" + parse-json "~4.0.0" + sliced "~1.0.1" + write-json-file "~4.1.0" + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -4372,9 +4622,9 @@ json5@^1.0.1: minimist "^1.2.0" json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + version "2.1.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6" + integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ== dependencies: minimist "^1.2.0" @@ -4395,6 +4645,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -4433,6 +4690,13 @@ latest-version@^3.0.0: dependencies: package-json "^4.0.0" +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -4545,6 +4809,26 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-json-file@~6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-6.1.0.tgz#b8e9bc4bc7a8c4dea70aee03ba947b0fdf5866ff" + integrity sha512-Oxzrf5BMvKyMOwuAXwDUdTO1kBo646k1rc644wfr2xZWqXHKj70DHtLeU1COKFqPX0aUGflj2mOUMTJZfSMMyg== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + strip-bom "^4.0.0" + type-fest "^0.5.2" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" @@ -4587,7 +4871,7 @@ lodash.unescape@4.0.1: resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= -lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.11.2, lodash@^4.17.10, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@~4.17.10: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -4641,11 +4925,16 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lowercase-keys@^1.0.0: +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -4676,6 +4965,13 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== + dependencies: + semver "^6.0.0" + mamacro@^0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" @@ -4698,6 +4994,11 @@ map-obj@^1.0.0, map-obj@^1.0.1: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -4736,6 +5037,14 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" @@ -4752,6 +5061,21 @@ meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" +meow@~5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -4762,10 +5086,10 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3" - integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A== +merge2@^1.2.3, merge2@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== methods@~1.1.2: version "1.1.2" @@ -4813,9 +5137,9 @@ mime-db@1.40.0: integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== "mime-db@>= 1.40.0 < 2": - version "1.41.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0" - integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw== + version "1.42.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" + integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.24" @@ -4839,6 +5163,16 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" + integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + mini-css-extract-plugin@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" @@ -4866,6 +5200,14 @@ minimatch@^3.0.4, minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -4876,20 +5218,20 @@ minimist@^1.1.3, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.2.1, minipass@^2.3.5: - version "2.5.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.5.0.tgz#dddb1d001976978158a05badfcbef4a771612857" - integrity sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: - minipass "^2.2.1" + minipass "^2.9.0" mississippi@^3.0.0: version "3.0.0" @@ -5104,17 +5446,17 @@ node-pty@0.9.0-beta28: dependencies: nan "^2.14.0" -node-releases@^1.1.29: - version "1.1.29" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.29.tgz#86a57c6587a30ecd6726449e5d293466b0a0bb86" - integrity sha512-R5bDhzh6I+tpi/9i2hrrvGJ3yKPYzlVOORDkXhnZuwi5D3q1I5w4vYy24PJXTcLk9Q0kws9TO77T75bcK8/ysQ== +node-releases@^1.1.38: + version "1.1.39" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d" + integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA== dependencies: - semver "^5.3.0" + semver "^6.3.0" node-sass@^4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== + version "4.13.0" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066" + integrity sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA== dependencies: async-foreach "^0.1.3" chalk "^1.1.1" @@ -5123,7 +5465,7 @@ node-sass@^4.12.0: get-stdin "^4.0.1" glob "^7.0.3" in-publish "^2.0.0" - lodash "^4.17.11" + lodash "^4.17.15" meow "^3.7.0" mkdirp "^0.5.1" nan "^2.13.2" @@ -5134,18 +5476,26 @@ node-sass@^4.12.0: stdout-stream "^1.4.0" "true-case-path" "^1.0.2" +nodeify@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nodeify/-/nodeify-1.0.1.tgz#64ab69a7bdbaf03ce107b4f0335c87c0b9e91b1d" + integrity sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0= + dependencies: + is-promise "~1.0.0" + promise "~1.3.0" + nodemon@^1.19.2: - version "1.19.2" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.2.tgz#b0975147dc99b3761ceb595b3f9277084931dcc0" - integrity sha512-hRLYaw5Ihyw9zK7NF+9EUzVyS6Cvgc14yh8CAYr38tPxJa6UrOxwAQ351GwrgoanHCF0FalQFn6w5eoX/LGdJw== + version "1.19.4" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" + integrity sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ== dependencies: - chokidar "^2.1.5" - debug "^3.1.0" + chokidar "^2.1.8" + debug "^3.2.6" ignore-by-default "^1.0.1" minimatch "^3.0.4" - pstree.remy "^1.1.6" - semver "^5.5.0" - supports-color "^5.2.0" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" touch "^3.1.0" undefsafe "^2.0.2" update-notifier "^2.5.0" @@ -5204,15 +5554,20 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== npm-packlist@^1.1.6: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + version "1.4.6" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.6.tgz#53ba3ed11f8523079f1457376dd379ee4ea42ff4" + integrity sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -5426,6 +5781,11 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -5513,17 +5873,27 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: - cyclist "~0.2.2" + cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" @@ -5535,9 +5905,9 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-asn1@^5.0.0: - version "5.1.4" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" - integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -5553,7 +5923,7 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse-json@^4.0.0: +parse-json@^4.0.0, parse-json@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= @@ -5642,7 +6012,7 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-key@^3.0.0: +path-key@^3.0.0, path-key@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.0.tgz#99a10d870a803bdd5ee6f0470e58dfcd2f9a54d3" integrity sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg== @@ -5673,6 +6043,13 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -5689,6 +6066,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pegjs@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" + integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -5814,9 +6196,9 @@ postcss-value-parser@^4.0.0: integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.17.tgz#4da1bdff5322d4a0acaab4d87f3e782436bad31f" - integrity sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ== + version "7.0.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -5832,6 +6214,11 @@ prepend-http@^1.0.0, prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -5869,6 +6256,13 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-1.3.0.tgz#e5cc9a4c8278e4664ffedc01c7da84842b040175" + integrity sha1-5cyaTIJ45GZP/twBx9qEhCsEAXU= + dependencies: + is-promise "~1" + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -5888,11 +6282,11 @@ pseudomap@^1.0.2: integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: - version "1.3.1" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.1.tgz#d5aa3873a35ec450bc7db9012ad5a7246f6fc8bd" - integrity sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== -pstree.remy@^1.1.6: +pstree.remy@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" integrity sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A== @@ -5977,6 +6371,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -6007,7 +6406,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6033,6 +6432,14 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -6051,6 +6458,15 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + read-pkg@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" @@ -6060,7 +6476,7 @@ read-pkg@^4.0.1: parse-json "^4.0.0" pify "^3.0.0" -read-pkg@^5.1.1: +read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== @@ -6109,6 +6525,14 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + referrer-policy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.2.0.tgz#b99cfb8b57090dc454895ef897a4cc35ef67a98e" @@ -6126,7 +6550,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-runtime@^0.13.2: +regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== @@ -6146,20 +6570,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp-tree@^0.1.6: - version "0.1.13" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.13.tgz#5b19ab9377edc68bc3679256840bb29afc158d7f" - integrity sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw== - regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.1.0" @@ -6176,6 +6595,14 @@ registry-auth-token@^3.0.1: rc "^1.1.6" safe-buffer "^5.0.1" +registry-auth-token@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" + integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw== + dependencies: + rc "^1.2.8" + safe-buffer "^5.0.1" + registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" @@ -6183,10 +6610,17 @@ registry-url@^3.0.3: dependencies: rc "^1.0.1" +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.0: version "0.6.0" @@ -6217,7 +6651,7 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.87.0, request@^2.88.0: +request@^2.72.0, request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -6300,6 +6734,13 @@ resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0: dependencies: path-parse "^1.0.6" +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -6372,9 +6813,9 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs@^6.3.3, rxjs@^6.4.0, rxjs@^6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== dependencies: tslib "^1.9.0" @@ -6441,9 +6882,9 @@ schema-utils@^1.0.0: ajv-keywords "^3.1.0" schema-utils@^2.0.0, schema-utils@^2.0.1, schema-utils@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.2.0.tgz#48a065ce219e0cacf4631473159037b2c1ae82da" - integrity sha512-5EwsCNhfFTZvUreQhx/4vVQpJ/lnCAkgoIHLhSpp4ZirE+4hzFvdJi0FMub6hxbFVBJYSpeVVmon+2e7uEGRrA== + version "2.5.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.5.0.tgz#8f254f618d402cc80257486213c8970edfd7c22f" + integrity sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ== dependencies: ajv "^6.10.2" ajv-keywords "^3.4.1" @@ -6468,12 +6909,12 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -6503,9 +6944,9 @@ send@0.17.1: statuses "~1.5.0" serialize-javascript@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.0.tgz#5b77019d7c3b85fe91b33ae424c53dcbfb6618bd" - integrity sha512-UkGlcYMtw4d9w7YfCtJFgdRTps8N4L0A48R+SmcGL57ki1+yHwJXnalk5bjgrw+ljv6SfzjzPjhohod2qllg/Q== + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== serve-favicon@^2.5.0: version "2.5.0" @@ -6575,11 +7016,23 @@ shebang-command@^1.2.0: dependencies: shebang-regex "^1.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6611,6 +7064,11 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +sliced@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6646,17 +7104,17 @@ socket.io-adapter@~1.1.0: resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" integrity sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs= -socket.io-client@2.2.0, socket.io-client@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.2.0.tgz#84e73ee3c43d5020ccc1a258faeeb9aec2723af7" - integrity sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA== +socket.io-client@2.3.0, socket.io-client@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== dependencies: backo2 "1.0.2" base64-arraybuffer "0.1.5" component-bind "1.0.0" component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.3.1" + debug "~4.1.0" + engine.io-client "~3.4.0" has-binary2 "~1.0.2" has-cors "1.1.0" indexof "0.0.1" @@ -6675,17 +7133,26 @@ socket.io-parser@~3.3.0: debug "~3.1.0" isarray "2.0.1" +socket.io-parser@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.0.tgz#370bb4a151df2f77ce3345ff55a7072cc6e9565a" + integrity sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ== + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + socket.io@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.2.0.tgz#f0f633161ef6712c972b307598ecd08c9b1b4d5b" - integrity sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w== + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" + integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== dependencies: debug "~4.1.0" - engine.io "~3.3.1" + engine.io "~3.4.0" has-binary2 "~1.0.2" socket.io-adapter "~1.1.0" - socket.io-client "2.2.0" - socket.io-parser "~3.3.0" + socket.io-client "2.3.0" + socket.io-parser "~3.4.0" sort-keys@^1.0.0: version "1.1.2" @@ -6694,6 +7161,13 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" +sort-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-3.0.0.tgz#fa751737e3da363ef80632d4fd78e324d661fe9a" + integrity sha512-77XUKMiZN5LvQXZ9sgWfJza19AvYIDwaDGwGiULM+B5XYru8Z90Oh06JvqDlJczvjjYvssrV0aK1GI6+YXvn5A== + dependencies: + is-plain-obj "^2.0.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -6906,21 +7380,21 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.trimleft@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.0.0.tgz#68b6aa8e162c6a80e76e3a8a0c2e747186e271ff" - integrity sha1-aLaqjhYsaoDnbjqKDC50cYbicf8= +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" + define-properties "^1.1.3" + function-bind "^1.1.1" -string.prototype.trimright@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.0.0.tgz#ab4a56d802a01fbe7293e11e84f24dc8164661dd" - integrity sha1-q0pW2AKgH75yk+EehPJNyBZGYd0= +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== dependencies: - define-properties "^1.1.2" - function-bind "^1.0.2" + define-properties "^1.1.3" + function-bind "^1.1.1" string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" @@ -6978,6 +7452,11 @@ strip-bom@^3.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -6995,6 +7474,11 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + strip-json-comments@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" @@ -7032,7 +7516,7 @@ supports-color@^4.5.0: dependencies: has-flag "^2.0.0" -supports-color@^5.2.0, supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -7069,13 +7553,13 @@ tar@^2.0.0: inherits "2" tar@^4: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.5" + minipass "^2.8.6" minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" @@ -7104,9 +7588,9 @@ terser-webpack-plugin@^1.4.1: worker-farm "^1.7.0" terser@^4.1.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.2.1.tgz#1052cfe17576c66e7bc70fcc7119f22b155bdac1" - integrity sha512-cGbc5utAcX4a9+2GGVX4DsenG6v0x3glnDi5hx8816X1McEAwPlPgRtXPJzSBsbpILxZ8MQMT0KvArLuE0HP5A== + version "4.3.9" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.9.tgz#e4be37f80553d02645668727777687dad26bbca8" + integrity sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -7176,6 +7660,11 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -7236,10 +7725,10 @@ trim-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= triple-beam@^1.2.0, triple-beam@^1.3.0: version "1.3.0" @@ -7289,6 +7778,16 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + +type-fest@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" + integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -7302,15 +7801,22 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= typescript@~3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" - integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== + version "3.6.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.4.tgz#b18752bb3792bc1a0281335f7f6ebf1bbfc5b91d" + integrity sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg== undefsafe@^2.0.2: version "2.0.2" @@ -7422,6 +7928,24 @@ update-notifier@^2.5.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" +update-notifier@~3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250" + integrity sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ== + dependencies: + boxen "^3.0.0" + chalk "^2.0.1" + configstore "^4.0.0" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.1.0" + is-npm "^3.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -7441,6 +7965,13 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -7537,9 +8068,9 @@ watchpack@^1.6.0: neo-async "^2.5.0" webpack-cli@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.7.tgz#77c8580dd8e92f69d635e0238eaf9d9c15759a91" - integrity sha512-OhTUCttAsr+IZSMVwGROGRHvT+QAs8H6/mHIl4SvhAwYywjiylYjpwybGx7WQ9Hkb45FhjtsymkwiRRbGJ1SZQ== + version "3.3.9" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.9.tgz#79c27e71f94b7fe324d594ab64a8e396b9daa91a" + integrity sha512-xwnSxWl8nZtBl/AFJCOn9pG7s5CYUYdZxmmukv+fAHLcBIHM36dImfpQg3WfShZXeArkWlf6QRw24Klcsv8a5A== dependencies: chalk "2.4.2" cross-spawn "6.0.5" @@ -7567,9 +8098,9 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: source-map "~0.6.1" webpack@^4.39.3: - version "4.39.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.3.tgz#a02179d1032156b713b6ec2da7e0df9d037def50" - integrity sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ== + version "4.41.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.2.tgz#c34ec76daa3a8468c9b61a50336d8e3303dce74e" + integrity sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" @@ -7612,6 +8143,13 @@ which@1, which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" +which@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.1.tgz#f1cf94d07a8e571b6ff006aeb91d0300c47ef0a4" + integrity sha512-N7GBZOTswtB9lkQBZA4+zAXrjEIWAUOB93AvzUiudRzRxhUdLURQ7D/gAIMY1gatT/LTbmbcv8SiYazy3eYB7w== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -7700,6 +8238,28 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +write-file-atomic@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.1.tgz#558328352e673b5bb192cf86500d60b230667d4b" + integrity sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write-json-file@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.1.1.tgz#d527936d9f32696ac5a0448c6d424db3724036c4" + integrity sha512-wHI383JJbaZeaxWAk57LeX8iq7od/nfDbp/Hkk31al5rmYvc0gtt4lkw+nt8KJW8u9Uy9GcoHeYE3v6BUl0ZUw== + dependencies: + detect-indent "^6.0.0" + graceful-fs "^4.1.15" + is-plain-obj "^2.0.0" + make-dir "^3.0.0" + sort-keys "^3.0.0" + write-file-atomic "^3.0.0" + write@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" @@ -7707,6 +8267,13 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" +ws@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.0.tgz#422eda8c02a4b5dba7744ba66eebbd84bcef0ec7" + integrity sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg== + dependencies: + async-limiter "^1.0.0" + ws@~6.1.0: version "6.1.4" resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" @@ -7714,10 +8281,10 @@ ws@~6.1.0: dependencies: async-limiter "~1.0.0" -x-xss-protection@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.2.0.tgz#3170498ff8e7e8159f4896b27fa4d4810c2ff486" - integrity sha512-xN0kV+8XfOQM2OPPBdEbGtbvJNNP1pvZR7sE6d44cjJFQG4OiGDdienPg5iOUGswBTiGbBvtYDURd30BMJwwqg== +x-xss-protection@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.3.0.tgz#3e3a8dd638da80421b0e9fff11a2dbe168f6d52c" + integrity sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg== xdg-basedir@^3.0.0: version "3.0.0" @@ -7755,9 +8322,16 @@ yallist@^2.1.2: integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" yargs-parser@^11.1.1: version "11.1.1" @@ -7767,7 +8341,7 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^13.1.0, yargs-parser@^13.1.1: +yargs-parser@^13.1.0: version "13.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== @@ -7775,6 +8349,14 @@ yargs-parser@^13.1.0, yargs-parser@^13.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" + integrity sha512-xLTUnCMc4JhxrPEPUYD5IBR1mWCK/aT6+RJ/K29JY2y1vD+FhtgKK0AXRWvI262q3QSffAQuTouFIKUuHX89wQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" @@ -7818,9 +8400,9 @@ yargs@^12.0.5: yargs-parser "^11.1.1" yargs@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.0.0.tgz#ba4cacc802b3c0b3e36a9e791723763d57a85066" - integrity sha512-ssa5JuRjMeZEUjg7bEL99AwpitxU/zWGAGpdj0di41pOEmJti8NR6kyUIJBkR78DTYNPZOU08luUo0GTHuB+ow== + version "14.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.0.tgz#f116a9242c4ed8668790b40759b4906c276e76c3" + integrity sha512-/is78VKbKs70bVZH7w4YaZea6xcJWOAwkhbR0CFuZBmYtfTYF0xjGJF43AYd8g2Uii1yJwmS5GR2vBmrc32sbg== dependencies: cliui "^5.0.0" decamelize "^1.2.0" @@ -7832,7 +8414,7 @@ yargs@^14.0.0: string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.1" + yargs-parser "^15.0.0" yargs@^7.0.0: version "7.1.0"