From a79069c17d0579bdf4ebacc5bcba50ea26943666 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:06:24 -0300 Subject: [PATCH 001/147] added model folder and user.js file Co-authored-by: Vinicius Vieira de Souza --- src/models/user.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/models/user.js diff --git a/src/models/user.js b/src/models/user.js new file mode 100644 index 0000000..e69de29 From da94259bbca7e416238ff7850d6658901f9e5405 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:07:16 -0300 Subject: [PATCH 002/147] add user model Co-authored-by: Vinicius Vieira de Souza --- src/models/user.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/models/user.js b/src/models/user.js index e69de29..f6b07e4 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose'); + +const UserSchema = new mongoose.Schema({ + name:{ + type: String, + require: true, + }, + email:{ + type: String, + unique: true, + required: true, + lowercase: true, + }, + password:{ + type: String, + required: true, + select: false, + }, + +}); + +const User = mongoose.model('User', UserSchema); \ No newline at end of file From d405e282d12a63a33a6f0e98704e6d15d2854914 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:09:54 -0300 Subject: [PATCH 003/147] added controllers folder and loginController.js file Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/controllers/loginController.js diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js new file mode 100644 index 0000000..e69de29 From 6fe31c12ff343e51c1240b1e36abbf4a4a2351c8 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:11:55 -0300 Subject: [PATCH 004/147] add login controller Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index e69de29..04a558b 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -0,0 +1,27 @@ +const express = require('express'); + +const User = require('../models/User'); + +const router = express.Router(); + +router.post('/login', async(req, res) => { + const {email, password} = req.body; + + const user = await User.findOne({ email }).select('+password'); + + if(!user){ + + return res.status(400).send({Error: 'User not found'}); + + } + + if(!await password == user.password){ + + return res.status(400).send({ Error: 'Incorrect password'}); + + } + + user.password = undefined; + + res.send({ user }); +}); \ No newline at end of file From 3be36b82cd79e5697b87258427a8a92538ed57f3 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:13:03 -0300 Subject: [PATCH 005/147] added '/' route to router Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 04a558b..4dce3a0 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -24,4 +24,6 @@ router.post('/login', async(req, res) => { user.password = undefined; res.send({ user }); -}); \ No newline at end of file +}); + +module.exports = app => app.use('/', router); \ No newline at end of file From 3b5a87a15088247837391db1646475f4dfd64d66 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:14:36 -0300 Subject: [PATCH 006/147] login controller added to index Co-authored-by: Vinicius Vieira de Souza --- src/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/index.js b/src/index.js index 9a870d2..5fbb366 100644 --- a/src/index.js +++ b/src/index.js @@ -14,6 +14,9 @@ app.use(express.json()); // routes app.use(require('./routes/index.js')); +//controllers +require('./controllers/loginController')(app); + // starting the server app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); From 23b96ac1abf009010dccb01fea157e3f4310dcee Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:19:51 -0300 Subject: [PATCH 007/147] added jasonwebtoken dependency Co-authored-by: Vinicius Vieira de Souza --- package-lock.json | 94 ++++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbb2a56..5584fff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -207,6 +207,11 @@ "fill-range": "^7.0.1" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -390,6 +395,14 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -723,6 +736,49 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -741,6 +797,41 @@ "package-json": "^6.3.0" } }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -1089,8 +1180,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "semver-diff": { "version": "3.1.1", diff --git a/package.json b/package.json index 1dc773e..de41151 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "homepage": "https://github.com/fga-eps-mds/2020.1-Grupo2-backend#readme", "dependencies": { "express": "^4.17.1", + "jsonwebtoken": "^8.5.1", "morgan": "^1.10.0" }, "devDependencies": { From ba0c561e521e3d0c501ce9eca3a60585338aecd5 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:26:11 -0300 Subject: [PATCH 008/147] added token to login controller Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 4dce3a0..0cf4b36 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -1,5 +1,7 @@ const express = require('express'); +const jasonwebtoken = require('jasonwebtoker'); + const User = require('../models/User'); const router = express.Router(); @@ -23,6 +25,8 @@ router.post('/login', async(req, res) => { user.password = undefined; + const token = jasonwebtoken.sign({id: user.id}) + res.send({ user }); }); From f0c43b50e79659b4172914e3b4d83b53dda5f44f Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:27:28 -0300 Subject: [PATCH 009/147] added config folder and auth.json file Co-authored-by: Vinicius Vieira de Souza --- src/config/auth,json | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/config/auth,json diff --git a/src/config/auth,json b/src/config/auth,json new file mode 100644 index 0000000..e69de29 From 4318bf7d94f7ca9e546468ac92cb5722248c609d Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:29:52 -0300 Subject: [PATCH 010/147] added secret (hash md5) to auth.json Co-authored-by: Vinicius Vieira de Souza --- src/config/auth,json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/config/auth,json b/src/config/auth,json index e69de29..5df31c6 100644 --- a/src/config/auth,json +++ b/src/config/auth,json @@ -0,0 +1,3 @@ +{ + "secret": "d41d8cd98f00b204e9800998ecf8427e" +} \ No newline at end of file From 1523dbc63fa60360355da7a58058488ab4b1efb8 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:34:00 -0300 Subject: [PATCH 011/147] auth.json imported to login controller and expiration time added to token Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 0cf4b36..3154bbc 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -6,6 +6,8 @@ const User = require('../models/User'); const router = express.Router(); +const authConfig = require('../config/auth'); + router.post('/login', async(req, res) => { const {email, password} = req.body; @@ -25,7 +27,9 @@ router.post('/login', async(req, res) => { user.password = undefined; - const token = jasonwebtoken.sign({id: user.id}) + const token = jasonwebtoken.sign({id: user.id}, authConfig.secret,{ + expiresIn: 86400, + }); res.send({ user }); }); From 0a210d18173e5a56914a15d66cfcbc9d61b13bd2 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:35:14 -0300 Subject: [PATCH 012/147] token added to res Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 3154bbc..3492cb7 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -31,7 +31,7 @@ router.post('/login', async(req, res) => { expiresIn: 86400, }); - res.send({ user }); + res.send({ user, token }); }); module.exports = app => app.use('/', router); \ No newline at end of file From cc071172113e71502c3d2cf7923034c28b247c39 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 20:22:34 -0300 Subject: [PATCH 013/147] corrected jasonwebtoken to jsonwebtoken Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 3492cb7..d358c81 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -1,6 +1,6 @@ const express = require('express'); -const jasonwebtoken = require('jasonwebtoker'); +const jsonwebtoken = require('jsonwebtoker'); const User = require('../models/User'); @@ -27,7 +27,7 @@ router.post('/login', async(req, res) => { user.password = undefined; - const token = jasonwebtoken.sign({id: user.id}, authConfig.secret,{ + const token = jsonwebtoken.sign({id: user.id}, authConfig.secret,{ expiresIn: 86400, }); From 0ebf63b42e76db0af970a9be8ef0e3684eaa5a2d Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 20:25:55 -0300 Subject: [PATCH 014/147] corrected jsonwebtoker to jsonwebtoken Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index d358c81..7eda761 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -1,6 +1,6 @@ const express = require('express'); -const jsonwebtoken = require('jsonwebtoker'); +const jsonwebtoken = require('jsonwebtoken'); const User = require('../models/User'); From 71c912dfe3f38694e16bf44a83ff3e9d5517163c Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:06:24 -0300 Subject: [PATCH 015/147] added model folder and user.js file Co-authored-by: Vinicius Vieira de Souza --- src/models/user.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/models/user.js diff --git a/src/models/user.js b/src/models/user.js new file mode 100644 index 0000000..e69de29 From 2717190f3f90dd3c09cf6e7c63ea20435edaa315 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:07:16 -0300 Subject: [PATCH 016/147] add user model Co-authored-by: Vinicius Vieira de Souza --- src/models/user.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/models/user.js b/src/models/user.js index e69de29..f6b07e4 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -0,0 +1,22 @@ +const mongoose = require('mongoose'); + +const UserSchema = new mongoose.Schema({ + name:{ + type: String, + require: true, + }, + email:{ + type: String, + unique: true, + required: true, + lowercase: true, + }, + password:{ + type: String, + required: true, + select: false, + }, + +}); + +const User = mongoose.model('User', UserSchema); \ No newline at end of file From bf7c99fd845944790fcbbeb01fa46994ce8030d9 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:09:54 -0300 Subject: [PATCH 017/147] added controllers folder and loginController.js file Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/controllers/loginController.js diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js new file mode 100644 index 0000000..e69de29 From 86e156ea80cf5a2ac0d19555a1dd3eebae258601 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:11:55 -0300 Subject: [PATCH 018/147] add login controller Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index e69de29..04a558b 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -0,0 +1,27 @@ +const express = require('express'); + +const User = require('../models/User'); + +const router = express.Router(); + +router.post('/login', async(req, res) => { + const {email, password} = req.body; + + const user = await User.findOne({ email }).select('+password'); + + if(!user){ + + return res.status(400).send({Error: 'User not found'}); + + } + + if(!await password == user.password){ + + return res.status(400).send({ Error: 'Incorrect password'}); + + } + + user.password = undefined; + + res.send({ user }); +}); \ No newline at end of file From daeca39998ceadc6f1cee7b42af311c1b547e209 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:13:03 -0300 Subject: [PATCH 019/147] added '/' route to router Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 04a558b..4dce3a0 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -24,4 +24,6 @@ router.post('/login', async(req, res) => { user.password = undefined; res.send({ user }); -}); \ No newline at end of file +}); + +module.exports = app => app.use('/', router); \ No newline at end of file From 1e318e8416c6a16fb5d7ed97a3d33f55f69bfe17 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:14:36 -0300 Subject: [PATCH 020/147] login controller added to index Co-authored-by: Vinicius Vieira de Souza --- src/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/index.js b/src/index.js index 62a985b..010dd47 100644 --- a/src/index.js +++ b/src/index.js @@ -26,6 +26,9 @@ app.use(express.json()); // routes app.use('/item',itemRoutes); +//controllers +require('./controllers/loginController')(app); + // starting the server app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); From d52413db6eb09bf26988f0d439868ef181a8e671 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:19:51 -0300 Subject: [PATCH 021/147] added jasonwebtoken dependency Co-authored-by: Vinicius Vieira de Souza --- package-lock.json | 91 +++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 2 files changed, 92 insertions(+) diff --git a/package-lock.json b/package-lock.json index 39ed5c9..3cddde7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -257,6 +257,11 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -450,6 +455,14 @@ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", "dev": true }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -805,6 +818,49 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -823,6 +879,41 @@ "package-json": "^6.3.0" } }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", diff --git a/package.json b/package.json index f952ad0..a24ddad 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "express": "^4.17.1", "joi": "^17.2.1", "mongoose": "^5.10.5", + "jsonwebtoken": "^8.5.1", "morgan": "^1.10.0" }, "devDependencies": { From 0f70b3ba1c874bb6ce8cfd3c0e28ad07b07e9058 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:26:11 -0300 Subject: [PATCH 022/147] added token to login controller Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 4dce3a0..0cf4b36 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -1,5 +1,7 @@ const express = require('express'); +const jasonwebtoken = require('jasonwebtoker'); + const User = require('../models/User'); const router = express.Router(); @@ -23,6 +25,8 @@ router.post('/login', async(req, res) => { user.password = undefined; + const token = jasonwebtoken.sign({id: user.id}) + res.send({ user }); }); From 6b2238015ee0ad75e68bccf8ea130f8581d1f29e Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:27:28 -0300 Subject: [PATCH 023/147] added config folder and auth.json file Co-authored-by: Vinicius Vieira de Souza --- src/config/auth,json | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/config/auth,json diff --git a/src/config/auth,json b/src/config/auth,json new file mode 100644 index 0000000..e69de29 From cc654714b02b9c9f61eef5b8ec1ef620c1127b64 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:29:52 -0300 Subject: [PATCH 024/147] added secret (hash md5) to auth.json Co-authored-by: Vinicius Vieira de Souza --- src/config/auth,json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/config/auth,json b/src/config/auth,json index e69de29..5df31c6 100644 --- a/src/config/auth,json +++ b/src/config/auth,json @@ -0,0 +1,3 @@ +{ + "secret": "d41d8cd98f00b204e9800998ecf8427e" +} \ No newline at end of file From a0bce3560148713caaf71625355c1272995fc09b Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:34:00 -0300 Subject: [PATCH 025/147] auth.json imported to login controller and expiration time added to token Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 0cf4b36..3154bbc 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -6,6 +6,8 @@ const User = require('../models/User'); const router = express.Router(); +const authConfig = require('../config/auth'); + router.post('/login', async(req, res) => { const {email, password} = req.body; @@ -25,7 +27,9 @@ router.post('/login', async(req, res) => { user.password = undefined; - const token = jasonwebtoken.sign({id: user.id}) + const token = jasonwebtoken.sign({id: user.id}, authConfig.secret,{ + expiresIn: 86400, + }); res.send({ user }); }); From 1cdf360ff3c59f20ce8a7911835aeefb04dff957 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 15 Sep 2020 10:35:14 -0300 Subject: [PATCH 026/147] token added to res Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 3154bbc..3492cb7 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -31,7 +31,7 @@ router.post('/login', async(req, res) => { expiresIn: 86400, }); - res.send({ user }); + res.send({ user, token }); }); module.exports = app => app.use('/', router); \ No newline at end of file From 337fd353281c7c50501b470d0e004e65e46b01d6 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 20:22:34 -0300 Subject: [PATCH 027/147] corrected jasonwebtoken to jsonwebtoken Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 3492cb7..d358c81 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -1,6 +1,6 @@ const express = require('express'); -const jasonwebtoken = require('jasonwebtoker'); +const jsonwebtoken = require('jsonwebtoker'); const User = require('../models/User'); @@ -27,7 +27,7 @@ router.post('/login', async(req, res) => { user.password = undefined; - const token = jasonwebtoken.sign({id: user.id}, authConfig.secret,{ + const token = jsonwebtoken.sign({id: user.id}, authConfig.secret,{ expiresIn: 86400, }); From 260da0fc17a5486e9d621de1ef9a1c7746421d8c Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 20:25:55 -0300 Subject: [PATCH 028/147] corrected jsonwebtoker to jsonwebtoken Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index d358c81..7eda761 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -1,6 +1,6 @@ const express = require('express'); -const jsonwebtoken = require('jsonwebtoker'); +const jsonwebtoken = require('jsonwebtoken'); const User = require('../models/User'); From e02a9a94a8e81e8ef48126438afb1527536b6386 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 21:25:10 -0300 Subject: [PATCH 029/147] solving errors Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 7 +++++-- src/models/user.js | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index 7eda761..be1de18 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -2,11 +2,14 @@ const express = require('express'); const jsonwebtoken = require('jsonwebtoken'); -const User = require('../models/User'); +const User = require('../models/user'); const router = express.Router(); -const authConfig = require('../config/auth'); +//const authConfig = require('../config/auth'); +const authConfig = { + "secret": "d41d8cd98f00b204e9800998ecf8427e" +}; router.post('/login', async(req, res) => { const {email, password} = req.body; diff --git a/src/models/user.js b/src/models/user.js index f6b07e4..715450e 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -19,4 +19,4 @@ const UserSchema = new mongoose.Schema({ }); -const User = mongoose.model('User', UserSchema); \ No newline at end of file +module.exports = User = mongoose.model('User', UserSchema); \ No newline at end of file From 174497b35e7ba900d51931749270e71226a3763a Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 22:55:29 -0300 Subject: [PATCH 030/147] test case comment Co-authored-by: Vinicius Vieira de Souza --- src/controllers/loginController.js | 8 ++++++-- src/index.js | 3 --- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js index be1de18..5ff8670 100644 --- a/src/controllers/loginController.js +++ b/src/controllers/loginController.js @@ -11,10 +11,14 @@ const authConfig = { "secret": "d41d8cd98f00b204e9800998ecf8427e" }; -router.post('/login', async(req, res) => { +router.post('/login', async(req, res) => { const {email, password} = req.body; const user = await User.findOne({ email }).select('+password'); + /*const user = { + "email": "asda@asd.com", + "password": "asdz" + };*/ if(!user){ @@ -34,7 +38,7 @@ router.post('/login', async(req, res) => { expiresIn: 86400, }); - res.send({ user, token }); + res.send({user, token }); }); module.exports = app => app.use('/', router); \ No newline at end of file diff --git a/src/index.js b/src/index.js index 7eaac77..010dd47 100644 --- a/src/index.js +++ b/src/index.js @@ -29,9 +29,6 @@ app.use('/item',itemRoutes); //controllers require('./controllers/loginController')(app); -//controllers -require('./controllers/loginController')(app); - // starting the server app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); From 6f56db58b48a79fbc3cf846659621a2846263c3b Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 22:59:24 -0300 Subject: [PATCH 031/147] create logout controller Co-authored-by: Vinicius Vieira de Souza --- src/controllers/logoutController.js | 44 +++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/controllers/logoutController.js diff --git a/src/controllers/logoutController.js b/src/controllers/logoutController.js new file mode 100644 index 0000000..4e4b61c --- /dev/null +++ b/src/controllers/logoutController.js @@ -0,0 +1,44 @@ +const express = require('express'); + +const jsonwebtoken = require('jsonwebtoken'); + +const router = express.Router(); + +const authConfig = { + "secret": "d41d8cd98f00b204e9800998ecf8427e" +}; + +router.get('/logout', async(req, res) => { + const sessiontoken = req.headers.sessiontoken; + + if(!sessiontoken){ + return res.status(401).send({Error: 'Token not provided'}); + } + + const parts = sessiontoken.split(' '); + + if (!parts.length === 2){ + return res.status(401).send({Error: 'Token error'}); + } + + const [scheme, token] = parts; + + if(!/^Bearer$/i.test(scheme)){ + return res.status(401).send({Error: 'Token malformated'}); + } + + jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { + if(err){ + return res.status(401).send({Error: 'Token invalid'}); + } + + const token = jsonwebtoken.sign({id: decoded.id}, authConfig.secret,{ + expiresIn: 1, + }); + + }); + + res.redirect('/login'); +}); + +module.exports = app => app.use('/', router); \ No newline at end of file From de37faf187085e416e559fe98cd04576b46b81f4 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Wed, 16 Sep 2020 23:00:48 -0300 Subject: [PATCH 032/147] add logout controller to index.js Co-authored-by: Vinicius Vieira de Souza --- src/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.js b/src/index.js index 010dd47..7e7faf0 100644 --- a/src/index.js +++ b/src/index.js @@ -28,6 +28,7 @@ app.use('/item',itemRoutes); //controllers require('./controllers/loginController')(app); +require('./controllers/logoutController')(app); // starting the server app.listen(app.get('port'), () => { From 043fb92281c677559bb1ec5381ba0b0ce1217da0 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Thu, 24 Sep 2020 00:58:30 -0300 Subject: [PATCH 033/147] changes requested applied Co-authored-by: Victor Hugo Siqueira Costa --- src/config/auth,json | 3 -- src/controllers/loginController.js | 44 ------------------ src/index.js | 6 +-- .../authRoutes.js} | 45 ++++++++++++++++++- 4 files changed, 45 insertions(+), 53 deletions(-) delete mode 100644 src/config/auth,json delete mode 100644 src/controllers/loginController.js rename src/{controllers/logoutController.js => routes/authRoutes.js} (53%) diff --git a/src/config/auth,json b/src/config/auth,json deleted file mode 100644 index 5df31c6..0000000 --- a/src/config/auth,json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "secret": "d41d8cd98f00b204e9800998ecf8427e" -} \ No newline at end of file diff --git a/src/controllers/loginController.js b/src/controllers/loginController.js deleted file mode 100644 index 5ff8670..0000000 --- a/src/controllers/loginController.js +++ /dev/null @@ -1,44 +0,0 @@ -const express = require('express'); - -const jsonwebtoken = require('jsonwebtoken'); - -const User = require('../models/user'); - -const router = express.Router(); - -//const authConfig = require('../config/auth'); -const authConfig = { - "secret": "d41d8cd98f00b204e9800998ecf8427e" -}; - -router.post('/login', async(req, res) => { - const {email, password} = req.body; - - const user = await User.findOne({ email }).select('+password'); - /*const user = { - "email": "asda@asd.com", - "password": "asdz" - };*/ - - if(!user){ - - return res.status(400).send({Error: 'User not found'}); - - } - - if(!await password == user.password){ - - return res.status(400).send({ Error: 'Incorrect password'}); - - } - - user.password = undefined; - - const token = jsonwebtoken.sign({id: user.id}, authConfig.secret,{ - expiresIn: 86400, - }); - - res.send({user, token }); -}); - -module.exports = app => app.use('/', router); \ No newline at end of file diff --git a/src/index.js b/src/index.js index 7e7faf0..7bc111d 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ const morgan = require('morgan'); const mongoose = require('mongoose'); const itemRoutes = require('./routes/itemRoutes'); +const authRoutes = require('./routes/authRoutes'); // MongoDB connection mongoose @@ -25,10 +26,7 @@ app.use(express.json()); // routes app.use('/item',itemRoutes); - -//controllers -require('./controllers/loginController')(app); -require('./controllers/logoutController')(app); +app.use('/auth',authRoutes); // starting the server app.listen(app.get('port'), () => { diff --git a/src/controllers/logoutController.js b/src/routes/authRoutes.js similarity index 53% rename from src/controllers/logoutController.js rename to src/routes/authRoutes.js index 4e4b61c..2a2d877 100644 --- a/src/controllers/logoutController.js +++ b/src/routes/authRoutes.js @@ -1,13 +1,54 @@ const express = require('express'); +const router = express.Router(); + const jsonwebtoken = require('jsonwebtoken'); -const router = express.Router(); +const User = require('../models/user'); + +router.get('/', (req, res) => { + res.json({ + message: 'Authentication!' + }); +}); const authConfig = { "secret": "d41d8cd98f00b204e9800998ecf8427e" }; +router.post('/login', async(req, res) => { + const {email, password} = req.body; + + //const user = await User.findOne({ email }).select('+password'); + const user = { + "email": "asda@asd.com", + "password": "asdz" + }; + + if(!user){ + + return res.status(400).send({Error: 'User not found'}); + + } + + if(!await password == user.password){ + + return res.status(400).send({ Error: 'Incorrect password'}); + + } + + user.password = undefined; + + const token = jsonwebtoken.sign({id: user.id}, authConfig.secret,{ + expiresIn: 86400, + }); + + const aToken = "Bearer "+token; + + res.header("authToken", aToken); + res.redirect('/main'); +}); + router.get('/logout', async(req, res) => { const sessiontoken = req.headers.sessiontoken; @@ -41,4 +82,4 @@ router.get('/logout', async(req, res) => { res.redirect('/login'); }); -module.exports = app => app.use('/', router); \ No newline at end of file +module.exports = router; From 9cb8250dcafb3b36f7b69e75200382074f1f3d7a Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Thu, 24 Sep 2020 01:14:23 -0300 Subject: [PATCH 034/147] solving conflicts Co-authored-by: Victor Hugo Siqueira Costa --- src/models/user.js | 26 ++++++------- src/routes/authRoutes.js | 81 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 93 insertions(+), 14 deletions(-) diff --git a/src/models/user.js b/src/models/user.js index 715450e..5b87ad6 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -1,22 +1,22 @@ const mongoose = require('mongoose'); -const UserSchema = new mongoose.Schema({ - name:{ +const Schema = mongoose.Schema; + +const userSchema = new Schema({ + username: { type: String, - require: true, + required: true }, - email:{ + password: { type: String, - unique: true, - required: true, - lowercase: true, + required: true }, - password:{ + email: { type: String, - required: true, - select: false, - }, - + required: true + } }); -module.exports = User = mongoose.model('User', UserSchema); \ No newline at end of file +const User = mongoose.model('User', userSchema); + +module.exports = User; \ No newline at end of file diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 2a2d877..35b3f12 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -6,6 +6,8 @@ const jsonwebtoken = require('jsonwebtoken'); const User = require('../models/user'); +const userSchema = require('../schemas/userSchema'); + router.get('/', (req, res) => { res.json({ message: 'Authentication!' @@ -82,4 +84,81 @@ router.get('/logout', async(req, res) => { res.redirect('/login'); }); -module.exports = router; +router.post('/signup', async(req, res, next) => { + + try { + + const newUserData = req.body; + const result = userSchema.validate(req.body); + + if( await User.findOne({ username: newUserData.username}) ) { + const error = new Error('Username already being used.'); + return next(error); + } + + if( result.error ) { + return next(result.error); + } + + const user = new User(newUserData); + + user.save() + .then( result => { + return res.send(result); + }) + .catch( err => next(err)); + + } catch(err) { + return next(err); + } + +}); + +router.put('/update-user/:id', async(req, res, next) => { + + try { + + const user = await User.findById(req.params.id); + const newData = req.body; + + if ( !newData.username ) { + newData.username = user.username; + } + if ( !newData.password ) { + newData.password = user.password; + } + if ( !newData.email ) { + newData.email = user.email; + } + + const result = userSchema.validate(newData); + + if(result.error) { + return next(result.error); + } + + await User.findOneAndUpdate({_id: req.params.id}, req.body, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'User updated successfully.'}); + }); + + } catch(err) { + return next(err); + } + +}); + +router.delete('/delete-user/:id', async(req, res, next) => { + + try { + + await User.findByIdAndDelete(req.params.id); + return res.send({ message: 'User successfully deleted.' }); + + } catch(err) { + return next(err); + } + +}); + +module.exports = router; \ No newline at end of file From 91976f208f77937a06a38b12695e8710e9e93583 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Thu, 24 Sep 2020 01:27:40 -0300 Subject: [PATCH 035/147] error solving Co-authored-by: Victor Hugo Siqueira Costa --- src/routes/authRoutes.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 35b3f12..5cce565 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -21,11 +21,11 @@ const authConfig = { router.post('/login', async(req, res) => { const {email, password} = req.body; - //const user = await User.findOne({ email }).select('+password'); - const user = { + const user = await User.findOne({ email, password }); + /*const user = { "email": "asda@asd.com", "password": "asdz" - }; + };*/ if(!user){ @@ -47,8 +47,11 @@ router.post('/login', async(req, res) => { const aToken = "Bearer "+token; - res.header("authToken", aToken); - res.redirect('/main'); + res.header('authToken', aToken); + res.json({ + message: 'Auth token generated' + }).redirect('/main'); + }); router.get('/logout', async(req, res) => { From 70629cdb4c740aade76d3332bd46660d0dc5500a Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Thu, 24 Sep 2020 01:43:03 -0300 Subject: [PATCH 036/147] change header field to lower case Co-authored-by: Victor Hugo Siqueira Costa --- src/routes/authRoutes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 5cce565..2bd2c05 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -47,7 +47,7 @@ router.post('/login', async(req, res) => { const aToken = "Bearer "+token; - res.header('authToken', aToken); + res.header('authtoken', aToken); res.json({ message: 'Auth token generated' }).redirect('/main'); @@ -55,7 +55,7 @@ router.post('/login', async(req, res) => { }); router.get('/logout', async(req, res) => { - const sessiontoken = req.headers.sessiontoken; + const sessiontoken = req.headers.authtoken; if(!sessiontoken){ return res.status(401).send({Error: 'Token not provided'}); From e8206a4a84dffaf20969ee7fb9de3e91a5f2a5cf Mon Sep 17 00:00:00 2001 From: faco400 Date: Mon, 28 Sep 2020 22:46:20 -0300 Subject: [PATCH 037/147] Added UserSchema Co-authored-by: Marcos Gabriel Tavares --- src/schemas/userSchema.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/schemas/userSchema.js diff --git a/src/schemas/userSchema.js b/src/schemas/userSchema.js new file mode 100644 index 0000000..b3300ab --- /dev/null +++ b/src/schemas/userSchema.js @@ -0,0 +1,11 @@ + +const Joi = require('joi'); + +const userSchema = Joi.object({ + username: Joi.string().alphanum().min(4).max(30).required(), + password: Joi.string().min(8).required(), + passwordConfirmation: Joi.string().min(8).required().valid(Joi.ref('password')).error(new Error('Password confirmation does not match.')), + email: Joi.string().email().required() +}); + +module.exports = userSchema; \ No newline at end of file From efeff82b5be1424d9a8f1b04d18afd28a3a1f803 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 12:46:51 -0300 Subject: [PATCH 038/147] A#dd topic creation and error handlers Co-authored-by: Victor Santos --- src/index.js | 1 + src/models/topic.js | 31 ++++++++++++++ src/models/user.js | 7 +++- src/routes/topicRoutes.js | 86 +++++++++++++-------------------------- 4 files changed, 66 insertions(+), 59 deletions(-) create mode 100644 src/models/topic.js diff --git a/src/index.js b/src/index.js index 49c4596..1647880 100644 --- a/src/index.js +++ b/src/index.js @@ -10,6 +10,7 @@ const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); const authRoutes = require('./routes/authRoutes'); +const topicRoutes = require('./routes/topicRoutes'); // MongoDB connection diff --git a/src/models/topic.js b/src/models/topic.js new file mode 100644 index 0000000..21eed56 --- /dev/null +++ b/src/models/topic.js @@ -0,0 +1,31 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const topicSchema = new Schema({ + title: { + type: String, + require: true, + }, + description: { + type: String, + require: true, + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + createdAt: { + type: Date, + default: Date.now, + }, + completed: { + type: Boolean, + require: true, + default: false, + }, +}); + +const Topic = mongoose.model('Topic', topicSchema); + +module.exports = Topic; diff --git a/src/models/user.js b/src/models/user.js index 32ff1ec..eb95e35 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -13,7 +13,12 @@ const userSchema = new Schema({ email: { type: String, required: true - } + }, + topics: [{ + type: mongoose.Schema.Types.ObjectId, + ref: 'Topics', + require: true, + }] }); const User = mongoose.model('User', userSchema); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index e2db253..655683a 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -1,63 +1,33 @@ const express = require('express'); -const Plant = require('../models/Plant'); -const Topico = require('../models/Topico'); - const router = express.Router(); -//Criar um novo topico pelo id da planta -router.put('/:plantId', async (req , res) => { - try{ - const {topicos} = req.body; - const plant = await Plant.findByIdAndUpdate(req.params.plantId, - {},{ new: true}).populate('topicos'); - await Promise.all(topicos.map(async topico =>{ - const plantTopic = new Topico({...topico,plant : plant._id}); - - await plantTopic.save(); - - plant.topicos.push(plantTopic); - })); - await plant.save(); - return res.send({ plant }); - }catch (err){ - return res.status(400).send({ error: 'Registration failed'}); - } -}); -//Listando todos os topics -router.get('/', async (req , res) => { - try{ - const topics = await Topico.find(); - return res.send({ topics }); - }catch (err){ - return res.status(400).send({ error: 'Loading plants failed'}); - } -}); -//Procurando topic por id -router.get('/:topicId', async (req , res) => { - try{ - const topico = await Topico.findById(req.params.topicId); - return res.send({ topico }); - }catch (err){ - return res.status(400).send({ error: 'error when searching for this topic '}); - } -}); -//Deletando topic por id -router.delete('/:topicId', async (req , res) => { - try{ - await Topico.findByIdAndRemove(req.params.topicId); - return res.send(); - }catch (err){ - return res.status(400).send({ error: 'Error when Delete this topic'}); - } -}); -//Dando upgrade topic por id -router.put('/:topicId', async (req , res) => { - try{ - await Topico.findByIdAndUpdate(req.params.topicId,{description: 'marcos felipe'},{new : true}); - return res.send(); - }catch (err){ - console.log(err); - return res.status(400).send({ error: 'Error when Delete this plant'}); + +const Topic = require('../models/topic'); +const User = require('../models/user'); + +router.post('/create/:userId', async (req, res, next) => { + + try { + + const topic = await Topic.create({...req.body, user: req.params.userId}); + await topic.save(); + + const user = await User.findById(req.params.userId); + + if (!user) { + const error = new Error('User not found.'); + return next(error); + } + + user.topics.push(topic); + + await user.save(); + + return res.send({ topic }); + + } catch (err) { + return next(err); } + }); -module.exports = router; \ No newline at end of file +module.exports = router; From da39988abc775f321e31e1744861fe8027698e8a Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 13:31:57 -0300 Subject: [PATCH 039/147] Add update, delete and list topics functions Co-authored-by: Victor Santos --- src/routes/topicRoutes.js | 62 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 655683a..8c139f1 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -9,8 +9,6 @@ router.post('/create/:userId', async (req, res, next) => { try { const topic = await Topic.create({...req.body, user: req.params.userId}); - await topic.save(); - const user = await User.findById(req.params.userId); if (!user) { @@ -18,16 +16,72 @@ router.post('/create/:userId', async (req, res, next) => { return next(error); } - user.topics.push(topic); + await topic.save(); + user.topics.push(topic); await user.save(); return res.send({ topic }); } catch (err) { - return next(err); + console.log(err); + return next({ error: 'Error creating topic.' }); + } + +}); + +router.put('/update/:topicId', async (req, res) => { + + try { + + const topic = await Topic.findById(req.params.topicId); + + if (!topic) { + const error = new Error('Topic not found.'); + return next(error); + } + + const newData = req.body; + + if (!newData.title) newData.title = topic.title; + if (!newData.description) newData.description = topic.description; + if (!newData.completed) newData.completed = topic.completed; + + + await Topic.findOneAndUpdate({_id: req.params.topicId}, req.body, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Topic updated successfully.'}); + }); + + } catch (err) { + console.log(err); + return res.next({ error: 'Error updating topic.' }); } }); +router.delete('/delete/:topicId', async (req, res) => { + try { + await Topic.findByIdAndRemove(req.params.topicId).populate('user'); + + return res.send({ + message: 'Topic successfully removed.' + }); + } catch (err) { + console.log(err); + return res.next({ error: 'Error deleting topic.' }); + } +}); + +router.get('/list_topics', async (req, res) => { + try { + const topic = await Topic.find().populate(['user']); + + return res.send({ topic }); + } catch (err) { + console.log(err); + return res.next({ error: 'Error loading topics.' }); + } +}); + module.exports = router; From 31d2a3b362b99f1224563bf988bf0bff7ce2b069 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 16:33:04 -0300 Subject: [PATCH 040/147] Add comment model and its creation route Co-authored-by: Victor Santos --- src/models/comment.js | 23 +++++++++++++++++++++++ src/models/topic.js | 4 ++++ src/routes/topicRoutes.js | 30 +++++++++++++++++++++++++++--- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/models/comment.js diff --git a/src/models/comment.js b/src/models/comment.js new file mode 100644 index 0000000..9e5973c --- /dev/null +++ b/src/models/comment.js @@ -0,0 +1,23 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const commentSchema = new Schema({ + text: { + type: String, + require: true + }, + author: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topics', + require: true + } +}); + +const Comment = mongoose.model('Comment', commentSchema); + +module.exports = Comment; diff --git a/src/models/topic.js b/src/models/topic.js index 21eed56..aee0ff1 100644 --- a/src/models/topic.js +++ b/src/models/topic.js @@ -15,6 +15,10 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, + comments: [{ + type: Schema.Types.ObjectId, + ref: 'Comment' + }], createdAt: { type: Date, default: Date.now, diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 8c139f1..7dbde2a 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -3,6 +3,7 @@ const router = express.Router(); const Topic = require('../models/topic'); const User = require('../models/user'); +const Comment = require('../models/comment'); router.post('/create/:userId', async (req, res, next) => { @@ -30,7 +31,7 @@ router.post('/create/:userId', async (req, res, next) => { }); -router.put('/update/:topicId', async (req, res) => { +router.put('/update/:topicId', async (req, res, next) => { try { @@ -60,7 +61,7 @@ router.put('/update/:topicId', async (req, res) => { }); -router.delete('/delete/:topicId', async (req, res) => { +router.delete('/delete/:topicId', async (req, res, next) => { try { await Topic.findByIdAndRemove(req.params.topicId).populate('user'); @@ -73,7 +74,7 @@ router.delete('/delete/:topicId', async (req, res) => { } }); -router.get('/list_topics', async (req, res) => { +router.get('/list_topics', async (req, res, next) => { try { const topic = await Topic.find().populate(['user']); @@ -84,4 +85,27 @@ router.get('/list_topics', async (req, res) => { } }); +router.post('/comment/:topicId/:userId', async (req, res, next) => { + try { + + const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); + const user = await User.findById(req.params.userId); + const topic = await Topic.findById(req.params.topicId); + + if (!user) return next(new Error('User not found.')); + if (!topic) return next(new Error('Topic not found.')); + + await comment.save(); + + topic.comments.push(comment); + await topic.save(); + + return res.send({ message: 'Comment successfully registered.' }); + + } catch (err) { + console.log(err); + return res.next({ error: 'Error, it was not possible to comment.'}); + } +}) + module.exports = router; From 910e5a1558e00fc79b3f21c332578a54225048c4 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 17:13:24 -0300 Subject: [PATCH 041/147] Create update comment function Co-authored-by: Victor Santos --- src/routes/topicRoutes.js | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 7dbde2a..e66ce5f 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -12,10 +12,7 @@ router.post('/create/:userId', async (req, res, next) => { const topic = await Topic.create({...req.body, user: req.params.userId}); const user = await User.findById(req.params.userId); - if (!user) { - const error = new Error('User not found.'); - return next(error); - } + if (!user) return next( new Error('User not found.')); await topic.save(); @@ -37,10 +34,7 @@ router.put('/update/:topicId', async (req, res, next) => { const topic = await Topic.findById(req.params.topicId); - if (!topic) { - const error = new Error('Topic not found.'); - return next(error); - } + if (!topic) return next(new Error('Topic not found.')); const newData = req.body; @@ -106,6 +100,30 @@ router.post('/comment/:topicId/:userId', async (req, res, next) => { console.log(err); return res.next({ error: 'Error, it was not possible to comment.'}); } -}) +}); + +router.put('/update_comment/:commentId', async (req, res, next) => { + + try { + + const comment = await Comment.findById(req.params.commentId); + + if (!comment) return next(new Error('Comment not found.')); + + const newData = req.body; + + if (!newData.text) return next(new Error('Comment should not be empty.'));; + + await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Comment updated successfully.'}); + }); + + } catch (err) { + console.log(err); + return res.next({ error: 'Error updating comment.' }); + } + +}); module.exports = router; From 519683c7bb8ceb9350268a6f45101749a1381b0b Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 17:17:57 -0300 Subject: [PATCH 042/147] Create comment Routes file Co-authored-by: Victor Santos --- src/index.js | 1 + src/models/comment.js | 37 +++++++++++++++-------- src/routes/commentRoutes.js | 58 ++++++++++++++++++++++++++++++------- src/routes/topicRoutes.js | 48 ------------------------------ 4 files changed, 73 insertions(+), 71 deletions(-) diff --git a/src/index.js b/src/index.js index 1647880..a049c1b 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,7 @@ const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); const authRoutes = require('./routes/authRoutes'); const topicRoutes = require('./routes/topicRoutes'); +const commentRoutes = require('./routes/commentRoutes'); // MongoDB connection diff --git a/src/models/comment.js b/src/models/comment.js index 9e5973c..3d0abd7 100644 --- a/src/models/comment.js +++ b/src/models/comment.js @@ -1,23 +1,36 @@ const mongoose = require('mongoose'); -const Schema = mongoose.Schema; -const commentSchema = new Schema({ - text: { +const CommentSchema = new mongoose.Schema({ + username: { type: String, - require: true + require : true }, - author: { - type: Schema.Types.ObjectId, - ref: 'User', + message: { + type: String, require: true }, - topic: { - type: Schema.Types.ObjectId, - ref: 'Topics', - require: true + vote_count:{ + type: Number, + require:true } + }); -const Comment = mongoose.model('Comment', commentSchema); + +const Comment = mongoose.model('comment',CommentSchema); module.exports = Comment; +//Exemplo de teste insominia +//{ +// "scientificName":"scientificName", +// "family_name":"family_name", +// "gender_name":"gender_name", +// "specie_name":"specie_name", +// "usage":"usage", +// "first_User":"first_User", +// "collection_count":"17", +// "extinction":"1", +// "profile_picture":"7", +// "gbifID":"17", +// "stateProvince":"brasilia" +//} diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index d8dc5bf..a9ea9b4 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,19 +1,55 @@ const express = require('express'); -const Plant = require('../models/Plant'); -const Topico = require('../models/Topico'); -const Comment = require('../models/Comment'); - const router = express.Router(); -router.post('/register', async (req , res) => { - try{ - const comment = await Comment.create(req.body); +const Topic = require('../models/topic'); +const User = require('../models/user'); +const Comment = require('../models/comment'); + +router.post('/create/:topicId/:userId', async (req, res, next) => { + try { + + const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); + const user = await User.findById(req.params.userId); + const topic = await Topic.findById(req.params.topicId); + + if (!user) return next(new Error('User not found.')); + if (!topic) return next(new Error('Topic not found.')); - return res.send({ comment }); - }catch (err){ - return res.status(400).send({ error: 'Registration failed'}); + await comment.save(); + + topic.comments.push(comment); + await topic.save(); + + return res.send({ message: 'Comment successfully registered.' }); + + } catch (err) { + console.log(err); + return res.next({ error: 'Error, it was not possible to comment.'}); } }); +router.put('/update/:commentId', async (req, res, next) => { + + try { + + const comment = await Comment.findById(req.params.commentId); + + if (!comment) return next(new Error('Comment not found.')); + + const newData = req.body; + + if (!newData.text) return next(new Error('Comment should not be empty.'));; + + await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Comment updated successfully.'}); + }); + + } catch (err) { + console.log(err); + return res.next({ error: 'Error updating comment.' }); + } + +}); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index e66ce5f..a5c22b3 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -3,7 +3,6 @@ const router = express.Router(); const Topic = require('../models/topic'); const User = require('../models/user'); -const Comment = require('../models/comment'); router.post('/create/:userId', async (req, res, next) => { @@ -79,51 +78,4 @@ router.get('/list_topics', async (req, res, next) => { } }); -router.post('/comment/:topicId/:userId', async (req, res, next) => { - try { - - const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); - const user = await User.findById(req.params.userId); - const topic = await Topic.findById(req.params.topicId); - - if (!user) return next(new Error('User not found.')); - if (!topic) return next(new Error('Topic not found.')); - - await comment.save(); - - topic.comments.push(comment); - await topic.save(); - - return res.send({ message: 'Comment successfully registered.' }); - - } catch (err) { - console.log(err); - return res.next({ error: 'Error, it was not possible to comment.'}); - } -}); - -router.put('/update_comment/:commentId', async (req, res, next) => { - - try { - - const comment = await Comment.findById(req.params.commentId); - - if (!comment) return next(new Error('Comment not found.')); - - const newData = req.body; - - if (!newData.text) return next(new Error('Comment should not be empty.'));; - - await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Comment updated successfully.'}); - }); - - } catch (err) { - console.log(err); - return res.next({ error: 'Error updating comment.' }); - } - -}); - module.exports = router; From 4ea090046ee5ddcc3424daf06ef6906fb7cb4e3f Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 12:46:51 -0300 Subject: [PATCH 043/147] A#dd topic creation and error handlers Co-authored-by: Victor Santos --- src/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.js b/src/index.js index a049c1b..1647880 100644 --- a/src/index.js +++ b/src/index.js @@ -11,7 +11,6 @@ const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); const authRoutes = require('./routes/authRoutes'); const topicRoutes = require('./routes/topicRoutes'); -const commentRoutes = require('./routes/commentRoutes'); // MongoDB connection From b1ccbf1835371d419dbae4fe51979c1ec3956d66 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 13:31:57 -0300 Subject: [PATCH 044/147] Add update, delete and list topics functions Co-authored-by: Victor Santos --- src/routes/topicRoutes.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index a5c22b3..4c2ad1f 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -27,13 +27,16 @@ router.post('/create/:userId', async (req, res, next) => { }); -router.put('/update/:topicId', async (req, res, next) => { +router.put('/update/:topicId', async (req, res) => { try { const topic = await Topic.findById(req.params.topicId); - if (!topic) return next(new Error('Topic not found.')); + if (!topic) { + const error = new Error('Topic not found.'); + return next(error); + } const newData = req.body; @@ -78,4 +81,28 @@ router.get('/list_topics', async (req, res, next) => { } }); +router.delete('/delete/:topicId', async (req, res) => { + try { + await Topic.findByIdAndRemove(req.params.topicId).populate('user'); + + return res.send({ + message: 'Topic successfully removed.' + }); + } catch (err) { + console.log(err); + return res.next({ error: 'Error deleting topic.' }); + } +}); + +router.get('/list_topics', async (req, res) => { + try { + const topic = await Topic.find().populate(['user']); + + return res.send({ topic }); + } catch (err) { + console.log(err); + return res.next({ error: 'Error loading topics.' }); + } +}); + module.exports = router; From 3b5df2f54ff98db323c6c36eae0d63947e6b5c00 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 16:33:04 -0300 Subject: [PATCH 045/147] Add comment model and its creation route Co-authored-by: Victor Santos --- src/routes/topicRoutes.js | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 4c2ad1f..9325d6f 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -3,6 +3,7 @@ const router = express.Router(); const Topic = require('../models/topic'); const User = require('../models/user'); +const Comment = require('../models/comment'); router.post('/create/:userId', async (req, res, next) => { @@ -27,7 +28,7 @@ router.post('/create/:userId', async (req, res, next) => { }); -router.put('/update/:topicId', async (req, res) => { +router.put('/update/:topicId', async (req, res, next) => { try { @@ -94,7 +95,7 @@ router.delete('/delete/:topicId', async (req, res) => { } }); -router.get('/list_topics', async (req, res) => { +router.get('/list_topics', async (req, res, next) => { try { const topic = await Topic.find().populate(['user']); @@ -105,4 +106,27 @@ router.get('/list_topics', async (req, res) => { } }); +router.post('/comment/:topicId/:userId', async (req, res, next) => { + try { + + const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); + const user = await User.findById(req.params.userId); + const topic = await Topic.findById(req.params.topicId); + + if (!user) return next(new Error('User not found.')); + if (!topic) return next(new Error('Topic not found.')); + + await comment.save(); + + topic.comments.push(comment); + await topic.save(); + + return res.send({ message: 'Comment successfully registered.' }); + + } catch (err) { + console.log(err); + return res.next({ error: 'Error, it was not possible to comment.'}); + } +}) + module.exports = router; From f527be697bcd27b4e0aa5a8ba555e94fc01bcea0 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 17:13:24 -0300 Subject: [PATCH 046/147] Create update comment function Co-authored-by: Victor Santos --- src/routes/topicRoutes.js | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 9325d6f..4e83da4 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -34,10 +34,7 @@ router.put('/update/:topicId', async (req, res, next) => { const topic = await Topic.findById(req.params.topicId); - if (!topic) { - const error = new Error('Topic not found.'); - return next(error); - } + if (!topic) return next(new Error('Topic not found.')); const newData = req.body; @@ -127,6 +124,30 @@ router.post('/comment/:topicId/:userId', async (req, res, next) => { console.log(err); return res.next({ error: 'Error, it was not possible to comment.'}); } -}) +}); + +router.put('/update_comment/:commentId', async (req, res, next) => { + + try { + + const comment = await Comment.findById(req.params.commentId); + + if (!comment) return next(new Error('Comment not found.')); + + const newData = req.body; + + if (!newData.text) return next(new Error('Comment should not be empty.'));; + + await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Comment updated successfully.'}); + }); + + } catch (err) { + console.log(err); + return res.next({ error: 'Error updating comment.' }); + } + +}); module.exports = router; From a55668a1aeb9f5cf9e0099dd6b11cfc8bcc304b6 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 24 Sep 2020 17:17:57 -0300 Subject: [PATCH 047/147] Create comment Routes file Co-authored-by: Victor Santos --- src/index.js | 1 + src/routes/topicRoutes.js | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 1647880..a049c1b 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,7 @@ const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); const authRoutes = require('./routes/authRoutes'); const topicRoutes = require('./routes/topicRoutes'); +const commentRoutes = require('./routes/commentRoutes'); // MongoDB connection diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 4e83da4..3a91a0f 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -3,7 +3,6 @@ const router = express.Router(); const Topic = require('../models/topic'); const User = require('../models/user'); -const Comment = require('../models/comment'); router.post('/create/:userId', async (req, res, next) => { From 55337dae59e2a0ea6508514780d072db2ba75f8d Mon Sep 17 00:00:00 2001 From: senaarth Date: Fri, 9 Oct 2020 11:12:53 -0300 Subject: [PATCH 048/147] Solve conflicts that were created after rebase Co-authored-by: Victor Santos --- src/config/index.js | 5 ----- src/index.js | 5 +---- src/models/Comment.js | 2 +- src/models/comment.js | 36 ------------------------------------ src/models/index.js | 0 src/routes/index.js | 0 src/routes/topicRoutes.js | 19 ++++++++----------- src/schemas/index.js | 0 8 files changed, 10 insertions(+), 57 deletions(-) delete mode 100644 src/config/index.js delete mode 100644 src/models/comment.js delete mode 100644 src/models/index.js delete mode 100644 src/routes/index.js delete mode 100644 src/schemas/index.js diff --git a/src/config/index.js b/src/config/index.js deleted file mode 100644 index aef1de3..0000000 --- a/src/config/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - app : { - port: process.env.PORT || 3000, - }, -}; \ No newline at end of file diff --git a/src/index.js b/src/index.js index a049c1b..eb8a212 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,4 @@ require('dotenv').config(); -const config = require('./config') const express = require('express'); const app = express(); const morgan = require('morgan'); @@ -10,9 +9,6 @@ const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); const authRoutes = require('./routes/authRoutes'); -const topicRoutes = require('./routes/topicRoutes'); -const commentRoutes = require('./routes/commentRoutes'); - // MongoDB connection //mongodb://localhost:27017/noderest => meu banco de dados local polupado @@ -39,6 +35,7 @@ app.use('/comment',commentRoutes); app.use('/auth',authRoutes); // starting the server +app.set('port', process.env.PORT || 3000); app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); }); diff --git a/src/models/Comment.js b/src/models/Comment.js index 3d0abd7..60a8623 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -33,4 +33,4 @@ module.exports = Comment; // "profile_picture":"7", // "gbifID":"17", // "stateProvince":"brasilia" -//} +//} \ No newline at end of file diff --git a/src/models/comment.js b/src/models/comment.js deleted file mode 100644 index 3d0abd7..0000000 --- a/src/models/comment.js +++ /dev/null @@ -1,36 +0,0 @@ -const mongoose = require('mongoose'); - -const CommentSchema = new mongoose.Schema({ - username: { - type: String, - require : true - }, - message: { - type: String, - require: true - }, - vote_count:{ - type: Number, - require:true - } - -}); - - -const Comment = mongoose.model('comment',CommentSchema); - -module.exports = Comment; -//Exemplo de teste insominia -//{ -// "scientificName":"scientificName", -// "family_name":"family_name", -// "gender_name":"gender_name", -// "specie_name":"specie_name", -// "usage":"usage", -// "first_User":"first_User", -// "collection_count":"17", -// "extinction":"1", -// "profile_picture":"7", -// "gbifID":"17", -// "stateProvince":"brasilia" -//} diff --git a/src/models/index.js b/src/models/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/routes/index.js b/src/routes/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 3a91a0f..4483bcb 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -11,8 +11,6 @@ router.post('/create/:userId', async (req, res, next) => { const topic = await Topic.create({...req.body, user: req.params.userId}); const user = await User.findById(req.params.userId); - if (!user) return next( new Error('User not found.')); - await topic.save(); user.topics.push(topic); @@ -21,8 +19,7 @@ router.post('/create/:userId', async (req, res, next) => { return res.send({ topic }); } catch (err) { - console.log(err); - return next({ error: 'Error creating topic.' }); + return res.status(400).send({ error: 'Error while creating topic.'}); } }); @@ -33,8 +30,6 @@ router.put('/update/:topicId', async (req, res, next) => { const topic = await Topic.findById(req.params.topicId); - if (!topic) return next(new Error('Topic not found.')); - const newData = req.body; if (!newData.title) newData.title = topic.title; @@ -48,33 +43,35 @@ router.put('/update/:topicId', async (req, res, next) => { }); } catch (err) { - console.log(err); - return res.next({ error: 'Error updating topic.' }); + return res.status(400).send({ error: 'Error while updating topic.'}); } }); router.delete('/delete/:topicId', async (req, res, next) => { try { + await Topic.findByIdAndRemove(req.params.topicId).populate('user'); return res.send({ message: 'Topic successfully removed.' }); + } catch (err) { - console.log(err); - return res.next({ error: 'Error deleting topic.' }); + return res.status(400).send({ error: 'Error while deleting topic.'}); } }); router.get('/list_topics', async (req, res, next) => { try { + const topic = await Topic.find().populate(['user']); return res.send({ topic }); + } catch (err) { console.log(err); - return res.next({ error: 'Error loading topics.' }); + return res.status(400).send({ error: 'Error while listing topics.'}); } }); diff --git a/src/schemas/index.js b/src/schemas/index.js deleted file mode 100644 index e69de29..0000000 From b6db8bb65c200b51e64345a777522dbfcd2efb50 Mon Sep 17 00:00:00 2001 From: senaarth Date: Fri, 9 Oct 2020 12:03:59 -0300 Subject: [PATCH 049/147] Fix error handling to follow project pattern Co-authored-by: Victor Santos --- src/routes/authRoutes.js | 22 ++++++++++++---------- src/routes/topicRoutes.js | 4 ++-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 71f88b8..e491947 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -18,25 +18,24 @@ router.post('/signup', async(req, res, next) => { const newUserData = req.body; const result = userSchema.validate(req.body); - if( await User.findOne({ username: newUserData.username}) ) { - const error = new Error('Username already being used.'); - return next(error); - } + await User.findOne({ username: newUserData.username}); if( result.error ) { - return next(result.error); + return res.status(400).send({ error: 'Error while signing up. ' + result.error}) } const user = new User(newUserData); user.save() .then( result => { - return res.send(result); + return res.send(user); }) - .catch( err => next(err)); + .catch(err => { + return res.status(400).send({ error: 'Error while signing up. ' + err}); + }); } catch(err) { - return next(err); + return res.status(400).send({ error: 'Error while signing up.'}); } }); @@ -67,10 +66,13 @@ router.put('/update-user/:id', async(req, res, next) => { await User.findOneAndUpdate({_id: req.params.id}, req.body, { useFindAndModify: false}) .then( () => { res.send({ message: 'User updated successfully.'}); + }) + .catch(err => { + return res.status(400).send({ error: 'Error while updating user. ' + err}); }); } catch(err) { - return next(err); + return res.status(400).send({ error: 'Error while updating user.' + err}); } }); @@ -83,7 +85,7 @@ router.delete('/delete-user/:id', async(req, res, next) => { return res.send({ message: 'User successfully deleted.' }); } catch(err) { - return next(err); + return res.status(400).send({ error: 'Error while deleting user. ' + err}); } }); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 4483bcb..ba0aa01 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -19,7 +19,7 @@ router.post('/create/:userId', async (req, res, next) => { return res.send({ topic }); } catch (err) { - return res.status(400).send({ error: 'Error while creating topic.'}); + return res.status(400).send({ error: 'Error while creating topic.' + err}); } }); @@ -51,7 +51,7 @@ router.put('/update/:topicId', async (req, res, next) => { router.delete('/delete/:topicId', async (req, res, next) => { try { - await Topic.findByIdAndRemove(req.params.topicId).populate('user'); + await Topic.findByIdAndRemove(req.params.topicId).populate('user') return res.send({ message: 'Topic successfully removed.' From 52f17dc0177d36fc047001904a1f55e94116e6a7 Mon Sep 17 00:00:00 2001 From: senaarth Date: Fri, 9 Oct 2020 13:31:56 -0300 Subject: [PATCH 050/147] Adds upvote and downvote to topics Co-authored-by: Victor Santos --- src/models/topic.js | 8 ++++++++ src/routes/authRoutes.js | 28 +++++++++------------------- src/routes/topicRoutes.js | 35 ++++++++++++++++++++++++++++++----- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/models/topic.js b/src/models/topic.js index aee0ff1..548552a 100644 --- a/src/models/topic.js +++ b/src/models/topic.js @@ -15,6 +15,14 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, + likes: { + type: Number, + default: 0 + }, + dislikes: { + type: Number, + default: 0 + }, comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index e491947..39803db 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -11,7 +11,7 @@ router.get('/', (req, res) => { }); }); -router.post('/signup', async(req, res, next) => { +router.post('/signup', async(req, res) => { try { @@ -20,14 +20,12 @@ router.post('/signup', async(req, res, next) => { await User.findOne({ username: newUserData.username}); - if( result.error ) { - return res.status(400).send({ error: 'Error while signing up. ' + result.error}) - } + if ( result.error ) return res.status(400).send({ error: 'Error while signing up. ' + result.error}); const user = new User(newUserData); user.save() - .then( result => { + .then( () => { return res.send(user); }) .catch(err => { @@ -40,28 +38,20 @@ router.post('/signup', async(req, res, next) => { }); -router.put('/update-user/:id', async(req, res, next) => { +router.put('/update_user/:id', async(req, res) => { try { const user = await User.findById(req.params.id); const newData = req.body; - if ( !newData.username ) { - newData.username = user.username; - } - if ( !newData.password ) { - newData.password = user.password; - } - if ( !newData.email ) { - newData.email = user.email; - } + if ( !newData.username ) newData.username = user.username; + if ( !newData.password ) newData.password = user.password; + if ( !newData.email ) newData.email = user.email; const result = userSchema.validate(newData); - if(result.error) { - return next(result.error); - } + if ( result.error ) return res.status(400).send(result.error); await User.findOneAndUpdate({_id: req.params.id}, req.body, { useFindAndModify: false}) .then( () => { @@ -77,7 +67,7 @@ router.put('/update-user/:id', async(req, res, next) => { }); -router.delete('/delete-user/:id', async(req, res, next) => { +router.delete('/delete_user/:id', async(req, res) => { try { diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index ba0aa01..755b8b5 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -4,7 +4,7 @@ const router = express.Router(); const Topic = require('../models/topic'); const User = require('../models/user'); -router.post('/create/:userId', async (req, res, next) => { +router.post('/create/:userId', async (req, res) => { try { @@ -24,7 +24,7 @@ router.post('/create/:userId', async (req, res, next) => { }); -router.put('/update/:topicId', async (req, res, next) => { +router.put('/update/:topicId', async (req, res) => { try { @@ -48,7 +48,7 @@ router.put('/update/:topicId', async (req, res, next) => { }); -router.delete('/delete/:topicId', async (req, res, next) => { +router.delete('/delete/:topicId', async (req, res) => { try { await Topic.findByIdAndRemove(req.params.topicId).populate('user') @@ -62,7 +62,7 @@ router.delete('/delete/:topicId', async (req, res, next) => { } }); -router.get('/list_topics', async (req, res, next) => { +router.get('/list', async (req, res) => { try { const topic = await Topic.find().populate(['user']); @@ -70,7 +70,32 @@ router.get('/list_topics', async (req, res, next) => { return res.send({ topic }); } catch (err) { - console.log(err); + return res.status(400).send({ error: 'Error while listing topics.'}); + } +}); + +router.post('/like/:topicId', async (req, res) => { + try { + + await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Liked!'}); + }); + + } catch (err) { + return res.status(400).send({ error: 'Error while listing topics.'}); + } +}); + +router.post('/dislike/:topicId', async (req, res) => { + try { + + await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Disliked!'}); + }); + + } catch (err) { return res.status(400).send({ error: 'Error while listing topics.'}); } }); From a81b874aac15b212ad98405dd681b77b95ba18a7 Mon Sep 17 00:00:00 2001 From: senaarth Date: Fri, 9 Oct 2020 14:06:01 -0300 Subject: [PATCH 051/147] Fix error handling to follow project pattern and add comment properties Co-authored-by: Victor Santos --- src/models/Comment.js | 44 +++++++++++++++++-------------------- src/routes/commentRoutes.js | 23 ++++++++----------- 2 files changed, 29 insertions(+), 38 deletions(-) diff --git a/src/models/Comment.js b/src/models/Comment.js index 60a8623..dcdb05d 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -1,36 +1,32 @@ const mongoose = require('mongoose'); +const Schema = mongoose.Schema; const CommentSchema = new mongoose.Schema({ - username: { + text: { type: String, - require : true + require: true, }, - message: { - type: String, - require: true + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topic', + require: true, }, - vote_count:{ + likes: { type: Number, - require:true - } - + default: 0 + }, + dislikes: { + type: Number, + default: 0 + }, }); -const Comment = mongoose.model('comment',CommentSchema); +const Comment = mongoose.model('Comment',CommentSchema); module.exports = Comment; -//Exemplo de teste insominia -//{ -// "scientificName":"scientificName", -// "family_name":"family_name", -// "gender_name":"gender_name", -// "specie_name":"specie_name", -// "usage":"usage", -// "first_User":"first_User", -// "collection_count":"17", -// "extinction":"1", -// "profile_picture":"7", -// "gbifID":"17", -// "stateProvince":"brasilia" -//} \ No newline at end of file diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index a9ea9b4..cf685eb 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -5,40 +5,36 @@ const Topic = require('../models/topic'); const User = require('../models/user'); const Comment = require('../models/comment'); -router.post('/create/:topicId/:userId', async (req, res, next) => { +router.post('/create/:topicId/:userId', async (req, res) => { try { const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); const user = await User.findById(req.params.userId); const topic = await Topic.findById(req.params.topicId); - if (!user) return next(new Error('User not found.')); - if (!topic) return next(new Error('Topic not found.')); - await comment.save(); topic.comments.push(comment); await topic.save(); + + user.comments.push(comment); + await topic.save(); return res.send({ message: 'Comment successfully registered.' }); } catch (err) { - console.log(err); - return res.next({ error: 'Error, it was not possible to comment.'}); + return res.status(400).send({ error: 'Error while commenting.' + err}); } }); -router.put('/update/:commentId', async (req, res, next) => { +router.put('/update/:commentId', async (req, res) => { try { - const comment = await Comment.findById(req.params.commentId); - - if (!comment) return next(new Error('Comment not found.')); - + await Comment.findById(req.params.commentId); const newData = req.body; - if (!newData.text) return next(new Error('Comment should not be empty.'));; + if ( !newData.text ) return res.status(400).send({ error: 'Comment should not be empty'}); await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) .then( () => { @@ -46,8 +42,7 @@ router.put('/update/:commentId', async (req, res, next) => { }); } catch (err) { - console.log(err); - return res.next({ error: 'Error updating comment.' }); + return res.status(400).send({ error: 'Error while updating comment.' + err}); } }); From 1db34ad1323227b3251b8cdf61046756583f4f82 Mon Sep 17 00:00:00 2001 From: senaarth Date: Sun, 11 Oct 2020 13:41:54 -0300 Subject: [PATCH 052/147] Associate topic with specific plant Co-authored-by: Victor Santos --- src/models/Plant.js | 9 ++++----- src/models/topic.js | 5 +++++ src/routes/topicRoutes.js | 7 ++++++- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/models/Plant.js b/src/models/Plant.js index 412b525..0e31893 100644 --- a/src/models/Plant.js +++ b/src/models/Plant.js @@ -50,14 +50,13 @@ const PlantSchema = new mongoose.Schema({ type: String, require : true }, - topicos: [{ + topics: [{ type: mongoose.Schema.Types.ObjectId, - ref: 'topic', - + ref: 'Topic', }], }); -const Plant = mongoose.model('plant',PlantSchema); +const Plant = mongoose.model('Plant',PlantSchema); -module.exports = Plant; \ No newline at end of file +module.exports = Plant; diff --git a/src/models/topic.js b/src/models/topic.js index 548552a..26d0e13 100644 --- a/src/models/topic.js +++ b/src/models/topic.js @@ -10,6 +10,11 @@ const topicSchema = new Schema({ type: String, require: true, }, + plant:{ + type:mongoose.Schema.Types.ObjectId, + ref:'Plant', + require:true + }, user: { type: Schema.Types.ObjectId, ref: 'User', diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 755b8b5..6a7dc9a 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -3,18 +3,23 @@ const router = express.Router(); const Topic = require('../models/topic'); const User = require('../models/user'); +const Plant = require('../models/Plant'); -router.post('/create/:userId', async (req, res) => { +router.post('/create/:plantId/:userId', async (req, res) => { try { const topic = await Topic.create({...req.body, user: req.params.userId}); const user = await User.findById(req.params.userId); + const plant = await Plant.findById(req.params.plantId); await topic.save(); user.topics.push(topic); await user.save(); + + plant.topics.push(topic); + await plant.save(); return res.send({ topic }); From a777192f03cedad36dd19fa9164cfb10b3bfe33e Mon Sep 17 00:00:00 2001 From: senaarth Date: Sun, 11 Oct 2020 14:15:34 -0300 Subject: [PATCH 053/147] Add comment deletion Co-authored-by: Victor Santos --- src/routes/commentRoutes.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index cf685eb..3f29ecf 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -9,16 +9,12 @@ router.post('/create/:topicId/:userId', async (req, res) => { try { const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); - const user = await User.findById(req.params.userId); const topic = await Topic.findById(req.params.topicId); await comment.save(); topic.comments.push(comment); await topic.save(); - - user.comments.push(comment); - await topic.save(); return res.send({ message: 'Comment successfully registered.' }); @@ -47,4 +43,20 @@ router.put('/update/:commentId', async (req, res) => { }); +router.delete('/update/:commentId', async (req, res) => { + + try { + + await Comment.findByIdAndRemove(req.params.commentId).populate('user') + + return res.send({ + message: 'Comment successfully removed.' + }); + + } catch (err) { + return res.status(400).send({ error: 'Error while deleting topic.'}); + } + +}); + module.exports = router; From c8865686c53e7f7a4cd53c0d93bda509123e23d8 Mon Sep 17 00:00:00 2001 From: senaarth Date: Sun, 11 Oct 2020 14:21:21 -0300 Subject: [PATCH 054/147] Add comment upvote and downvote Co-authored-by: Victor Santos --- src/models/{topic.js => Topic.js} | 0 src/models/Topico.js | 21 ------------------- src/models/{user.js => User.js} | 0 src/routes/authRoutes.js | 6 +++--- src/routes/commentRoutes.js | 34 +++++++++++++++++++++++++++---- src/routes/itemRoutes.js | 2 +- src/routes/plantRoutes.js | 16 +++++++-------- src/routes/topicRoutes.js | 8 ++++---- 8 files changed, 46 insertions(+), 41 deletions(-) rename src/models/{topic.js => Topic.js} (100%) delete mode 100644 src/models/Topico.js rename src/models/{user.js => User.js} (100%) diff --git a/src/models/topic.js b/src/models/Topic.js similarity index 100% rename from src/models/topic.js rename to src/models/Topic.js diff --git a/src/models/Topico.js b/src/models/Topico.js deleted file mode 100644 index 9cead4a..0000000 --- a/src/models/Topico.js +++ /dev/null @@ -1,21 +0,0 @@ -const mongoose = require('mongoose'); - -const TopicoSchema = new mongoose.Schema({ - plant:{ - type:mongoose.Schema.Types.ObjectId, - ref:'plant', - require:true - - }, - description: { - type: String, - require: true - } - -}); - - - -const Topico = mongoose.model('topic',TopicoSchema); - -module.exports = Topico; \ No newline at end of file diff --git a/src/models/user.js b/src/models/User.js similarity index 100% rename from src/models/user.js rename to src/models/User.js diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 39803db..eebf051 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -2,7 +2,7 @@ const express = require('express'); const router = express.Router(); -const User = require('../models/user'); +const User = require('../models/User'); const userSchema = require('../schemas/userSchema'); router.get('/', (req, res) => { @@ -38,7 +38,7 @@ router.post('/signup', async(req, res) => { }); -router.put('/update_user/:id', async(req, res) => { +router.put('/update/:id', async(req, res) => { try { @@ -67,7 +67,7 @@ router.put('/update_user/:id', async(req, res) => { }); -router.delete('/delete_user/:id', async(req, res) => { +router.delete('/delete/:id', async(req, res) => { try { diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 3f29ecf..210de4c 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,9 +1,9 @@ const express = require('express'); const router = express.Router(); -const Topic = require('../models/topic'); -const User = require('../models/user'); -const Comment = require('../models/comment'); +const Topic = require('../models/Topic'); +const User = require('../models/User'); +const Comment = require('../models/Comment'); router.post('/create/:topicId/:userId', async (req, res) => { try { @@ -43,7 +43,7 @@ router.put('/update/:commentId', async (req, res) => { }); -router.delete('/update/:commentId', async (req, res) => { +router.delete('/delete/:commentId', async (req, res) => { try { @@ -59,4 +59,30 @@ router.delete('/update/:commentId', async (req, res) => { }); +router.post('/like/:commentId', async (req, res) => { + try { + + await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Liked!'}); + }); + + } catch (err) { + return res.status(400).send({ error: 'Error while liking comment.'}); + } +}); + +router.post('/dislike/:commentId', async (req, res) => { + try { + + await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: 'Disliked!'}); + }); + + } catch (err) { + return res.status(400).send({ error: 'Error while linking comment.'}); + } +}); + module.exports = router; diff --git a/src/routes/itemRoutes.js b/src/routes/itemRoutes.js index a1d8b76..2a8079c 100644 --- a/src/routes/itemRoutes.js +++ b/src/routes/itemRoutes.js @@ -1,6 +1,6 @@ const { Router } = require('express'); const router = Router(); -const Item = require('../models/item'); +const Item = require('../models/Item'); const ItemSchema = require('../schemas/itemSchema'); // Get all diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index ed4c1e0..54a5085 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -1,7 +1,7 @@ const express = require('express'); const Plant = require('../models/Plant'); -const Topico = require('../models/Topico'); +const Topic = require('../models/Topic'); const router = express.Router(); @@ -30,7 +30,7 @@ router.post('/register', async (req , res) => { //Listagem de Todas as plantas router.get('/', async (req , res) => { try{ - const plants = await Plant.find().populate('topicos'); + const plants = await Plant.find().populate('topics'); return res.send({ plants }); }catch (err){ @@ -40,7 +40,7 @@ router.get('/', async (req , res) => { //Procurando planta por id router.get('/:plantId', async (req , res) => { try{ - const plant = await Plant.findById(req.params.plantId).populate('topicos'); + const plant = await Plant.findById(req.params.plantId).populate('topics'); return res.send({ plant }); }catch (err){ @@ -66,15 +66,15 @@ router.put('/:plantId', async (req , res) => { const plant = await Plant.findByIdAndUpdate(req.params.plantId, {scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince},{ new: true}); - plant.topicos = []; - await Topico.remove({plant: plant._id}); + plant.topics = []; + await Topic.remove({plant: plant._id}); - await Promise.all(topicos.map(async topico =>{ - const plantTopic = new Topico({...topico,plant : plant._id}); + await Promise.all(topics.map(async topic =>{ + const plantTopic = new Topic({...topic,plant : plant._id}); await plantTopic.save(); - plant.topicos.push(plantTopic); + plant.topics.push(plantTopic); })); await plant.save(); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 6a7dc9a..8481cb3 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -1,8 +1,8 @@ const express = require('express'); const router = express.Router(); -const Topic = require('../models/topic'); -const User = require('../models/user'); +const Topic = require('../models/Topic'); +const User = require('../models/User'); const Plant = require('../models/Plant'); router.post('/create/:plantId/:userId', async (req, res) => { @@ -88,7 +88,7 @@ router.post('/like/:topicId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while listing topics.'}); + return res.status(400).send({ error: 'Error while liking topic.'}); } }); @@ -101,7 +101,7 @@ router.post('/dislike/:topicId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while listing topics.'}); + return res.status(400).send({ error: 'Error while dislikinng topic.'}); } }); From 864e36218897c3ce808c76e1ea4143f0a070887d Mon Sep 17 00:00:00 2001 From: senaarth Date: Sun, 11 Oct 2020 14:59:18 -0300 Subject: [PATCH 055/147] Add topic schema and verificate if comment is not empty Co-authored-by: Victor Santos --- src/routes/commentRoutes.js | 2 ++ src/routes/topicRoutes.js | 15 ++++++++++++--- src/schemas/topicSchema.js | 8 ++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/schemas/topicSchema.js diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 210de4c..cd5e404 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -8,6 +8,8 @@ const Comment = require('../models/Comment'); router.post('/create/:topicId/:userId', async (req, res) => { try { + if ( !req.body.text ) return res.status(400).send({ error: 'Comment should not be empty'}); + const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); const topic = await Topic.findById(req.params.topicId); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 8481cb3..5855e28 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -4,15 +4,21 @@ const router = express.Router(); const Topic = require('../models/Topic'); const User = require('../models/User'); const Plant = require('../models/Plant'); +const topicSchema = require('../schemas/topicSchema'); router.post('/create/:plantId/:userId', async (req, res) => { try { - const topic = await Topic.create({...req.body, user: req.params.userId}); const user = await User.findById(req.params.userId); const plant = await Plant.findById(req.params.plantId); + const result = topicSchema.validate(req.body); + + if ( result.error ) return res.status(400).send({ error: 'Error while creating topic. ' + result.error}); + + const topic = await Topic.create({...req.body, user: req.params.userId}); + await topic.save(); user.topics.push(topic); @@ -39,10 +45,13 @@ router.put('/update/:topicId', async (req, res) => { if (!newData.title) newData.title = topic.title; if (!newData.description) newData.description = topic.description; - if (!newData.completed) newData.completed = topic.completed; + const result = topicSchema.validate(newData); + if ( result.error ) return res.status(400).send({ error: 'Error while creating topic. ' + result.error}); + + if (!newData.completed) newData.completed = topic.completed; - await Topic.findOneAndUpdate({_id: req.params.topicId}, req.body, { useFindAndModify: false}) + await Topic.findOneAndUpdate({_id: req.params.topicId}, newData, { useFindAndModify: false}) .then( () => { res.send({ message: 'Topic updated successfully.'}); }); diff --git a/src/schemas/topicSchema.js b/src/schemas/topicSchema.js new file mode 100644 index 0000000..e105942 --- /dev/null +++ b/src/schemas/topicSchema.js @@ -0,0 +1,8 @@ +const Joi = require('joi'); + +const topicSchema = Joi.object({ + title: Joi.string().min(4).max(30).required(), + description: Joi.string().min(5).required() +}); + +module.exports = topicSchema; From 516d4b33bd500d90881a711a487fe24c526260e9 Mon Sep 17 00:00:00 2001 From: senaarth Date: Sun, 11 Oct 2020 16:01:11 -0300 Subject: [PATCH 056/147] Finish topic removal Co-authored-by: Victor Santos --- src/routes/topicRoutes.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 5855e28..bfe2fe9 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -17,7 +17,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { if ( result.error ) return res.status(400).send({ error: 'Error while creating topic. ' + result.error}); - const topic = await Topic.create({...req.body, user: req.params.userId}); + const topic = await Topic.create({...req.body, user: req.params.userId, plant: req.params.plantId}); await topic.save(); @@ -65,14 +65,31 @@ router.put('/update/:topicId', async (req, res) => { router.delete('/delete/:topicId', async (req, res) => { try { - await Topic.findByIdAndRemove(req.params.topicId).populate('user') + const topic = await Topic.findById(req.params.topicId); + const user = await User.findById(topic.user); + const plant = await Plant.findById(topic.plant); + + const indexAtUser = user.topics.indexOf(req.params.topicId); + const indexAtPlant = plant.topics.indexOf(req.params.topicId); + + if (indexAtUser > -1) { + user.topics.splice(indexAtUser, 1); + } + if (indexAtPlant > -1) { + plant.topics.splice(indexAtPlant, 1); + } + + user.save(); + plant.save(); + + await Topic.findByIdAndRemove(req.params.topicId, { useFindAndModify: false }); return res.send({ message: 'Topic successfully removed.' }); } catch (err) { - return res.status(400).send({ error: 'Error while deleting topic.'}); + return res.status(400).send({ error: 'Error while deleting topic.' + err }); } }); From 72128b80217130ab61d4d4ed11f1da75da3624c4 Mon Sep 17 00:00:00 2001 From: senaarth Date: Sun, 11 Oct 2020 16:06:27 -0300 Subject: [PATCH 057/147] Finish comment removal Co-authored-by: Victor Santos --- src/routes/authRoutes.js | 4 ++-- src/routes/commentRoutes.js | 21 ++++++++++++++++----- src/routes/topicRoutes.js | 10 +++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index eebf051..ec4d265 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -33,7 +33,7 @@ router.post('/signup', async(req, res) => { }); } catch(err) { - return res.status(400).send({ error: 'Error while signing up.'}); + return res.status(400).send({ error: 'Error while signing up.' + err }); } }); @@ -75,7 +75,7 @@ router.delete('/delete/:id', async(req, res) => { return res.send({ message: 'User successfully deleted.' }); } catch(err) { - return res.status(400).send({ error: 'Error while deleting user. ' + err}); + return res.status(400).send({ error: 'Error while deleting user. ' + err }); } }); diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index cd5e404..4b708be 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -40,7 +40,7 @@ router.put('/update/:commentId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while updating comment.' + err}); + return res.status(400).send({ error: 'Error while updating comment.' + err }); } }); @@ -49,14 +49,25 @@ router.delete('/delete/:commentId', async (req, res) => { try { - await Comment.findByIdAndRemove(req.params.commentId).populate('user') + const comment = await Comment.findById(req.params.commentId); + const topic = await Topic.findById(comment.topic); + + const index = topic.comments.indexOf(req.params.commentId); + + if (index > -1) { + topic.comments.splice(index, 1); + } + + topic.save(); + + await Comment.findByIdAndRemove(req.params.commentId).populate('user'); return res.send({ message: 'Comment successfully removed.' }); } catch (err) { - return res.status(400).send({ error: 'Error while deleting topic.'}); + return res.status(400).send({ error: 'Error while deleting topic.' + err }); } }); @@ -70,7 +81,7 @@ router.post('/like/:commentId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while liking comment.'}); + return res.status(400).send({ error: 'Error while liking comment.' + err }); } }); @@ -83,7 +94,7 @@ router.post('/dislike/:commentId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while linking comment.'}); + return res.status(400).send({ error: 'Error while linking comment.' + err }); } }); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index bfe2fe9..b6ab046 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -30,7 +30,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { return res.send({ topic }); } catch (err) { - return res.status(400).send({ error: 'Error while creating topic.' + err}); + return res.status(400).send({ error: 'Error while creating topic.' + err }); } }); @@ -57,7 +57,7 @@ router.put('/update/:topicId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while updating topic.'}); + return res.status(400).send({ error: 'Error while updating topic.' + err }); } }); @@ -101,7 +101,7 @@ router.get('/list', async (req, res) => { return res.send({ topic }); } catch (err) { - return res.status(400).send({ error: 'Error while listing topics.'}); + return res.status(400).send({ error: 'Error while listing topics.' + err }); } }); @@ -114,7 +114,7 @@ router.post('/like/:topicId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while liking topic.'}); + return res.status(400).send({ error: 'Error while liking topic.' + err }); } }); @@ -127,7 +127,7 @@ router.post('/dislike/:topicId', async (req, res) => { }); } catch (err) { - return res.status(400).send({ error: 'Error while dislikinng topic.'}); + return res.status(400).send({ error: 'Error while dislikinng topic.' + err }); } }); From 60891d0cf3e7102a9f354de5e1e5f21540c5b831 Mon Sep 17 00:00:00 2001 From: faco400 Date: Mon, 12 Oct 2020 15:24:50 -0300 Subject: [PATCH 058/147] Fix password authentication in login --- src/routes/authRoutes.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 2bd2c05..4ed2239 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -22,10 +22,11 @@ router.post('/login', async(req, res) => { const {email, password} = req.body; const user = await User.findOne({ email, password }); - /*const user = { - "email": "asda@asd.com", - "password": "asdz" - };*/ + //Para testar estava utilizando a estrutura abaixo + // const user = { + // "email": "asda@asd.com", + // "password": "asdz" + // }; if(!user){ @@ -33,7 +34,7 @@ router.post('/login', async(req, res) => { } - if(!await password == user.password){ + if(await password != user.password){ return res.status(400).send({ Error: 'Incorrect password'}); From 7c64a574e1ac7616e566cb7e24622fbac0a44d82 Mon Sep 17 00:00:00 2001 From: senaarth Date: Tue, 13 Oct 2020 09:56:18 -0300 Subject: [PATCH 059/147] Fix problems from review --- src/models/Topic.js | 6 ---- src/routes/topicRoutes.js | 73 -------------------------------------- src/schemas/topicSchema.js | 2 +- 3 files changed, 1 insertion(+), 80 deletions(-) diff --git a/src/models/Topic.js b/src/models/Topic.js index 26d0e13..e08b34c 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -8,7 +8,6 @@ const topicSchema = new Schema({ }, description: { type: String, - require: true, }, plant:{ type:mongoose.Schema.Types.ObjectId, @@ -36,11 +35,6 @@ const topicSchema = new Schema({ type: Date, default: Date.now, }, - completed: { - type: Boolean, - require: true, - default: false, - }, }); const Topic = mongoose.model('Topic', topicSchema); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index b6ab046..525645b 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -48,8 +48,6 @@ router.put('/update/:topicId', async (req, res) => { const result = topicSchema.validate(newData); if ( result.error ) return res.status(400).send({ error: 'Error while creating topic. ' + result.error}); - - if (!newData.completed) newData.completed = topic.completed; await Topic.findOneAndUpdate({_id: req.params.topicId}, newData, { useFindAndModify: false}) .then( () => { @@ -131,75 +129,4 @@ router.post('/dislike/:topicId', async (req, res) => { } }); -router.delete('/delete/:topicId', async (req, res) => { - try { - await Topic.findByIdAndRemove(req.params.topicId).populate('user'); - - return res.send({ - message: 'Topic successfully removed.' - }); - } catch (err) { - console.log(err); - return res.next({ error: 'Error deleting topic.' }); - } -}); - -router.get('/list_topics', async (req, res, next) => { - try { - const topic = await Topic.find().populate(['user']); - - return res.send({ topic }); - } catch (err) { - console.log(err); - return res.next({ error: 'Error loading topics.' }); - } -}); - -router.post('/comment/:topicId/:userId', async (req, res, next) => { - try { - - const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); - const user = await User.findById(req.params.userId); - const topic = await Topic.findById(req.params.topicId); - - if (!user) return next(new Error('User not found.')); - if (!topic) return next(new Error('Topic not found.')); - - await comment.save(); - - topic.comments.push(comment); - await topic.save(); - - return res.send({ message: 'Comment successfully registered.' }); - - } catch (err) { - console.log(err); - return res.next({ error: 'Error, it was not possible to comment.'}); - } -}); - -router.put('/update_comment/:commentId', async (req, res, next) => { - - try { - - const comment = await Comment.findById(req.params.commentId); - - if (!comment) return next(new Error('Comment not found.')); - - const newData = req.body; - - if (!newData.text) return next(new Error('Comment should not be empty.'));; - - await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Comment updated successfully.'}); - }); - - } catch (err) { - console.log(err); - return res.next({ error: 'Error updating comment.' }); - } - -}); - module.exports = router; diff --git a/src/schemas/topicSchema.js b/src/schemas/topicSchema.js index e105942..0e07919 100644 --- a/src/schemas/topicSchema.js +++ b/src/schemas/topicSchema.js @@ -2,7 +2,7 @@ const Joi = require('joi'); const topicSchema = Joi.object({ title: Joi.string().min(4).max(30).required(), - description: Joi.string().min(5).required() + description: Joi.string().min(5) }); module.exports = topicSchema; From 55dbe32a8d76144689e5f307cbf8ccfbd570c847 Mon Sep 17 00:00:00 2001 From: senaarth Date: Thu, 15 Oct 2020 13:13:23 -0300 Subject: [PATCH 060/147] Remove item files. --- src/index.js | 2 -- src/models/item.js | 17 --------- src/routes/itemRoutes.js | 73 --------------------------------------- src/schemas/itemSchema.js | 6 ---- 4 files changed, 98 deletions(-) delete mode 100644 src/models/item.js delete mode 100644 src/routes/itemRoutes.js delete mode 100644 src/schemas/itemSchema.js diff --git a/src/index.js b/src/index.js index b1861da..a29693a 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,6 @@ const app = express(); const morgan = require('morgan'); const mongoose = require('mongoose'); -const itemRoutes = require('./routes/itemRoutes'); const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); @@ -27,7 +26,6 @@ app.use(express.urlencoded({extended: false})); app.use(express.json()); // routes -app.use('/item',itemRoutes); app.use('/plant',plantRoutes); app.use('/topic',topicRoutes); app.use('/comment',commentRoutes); diff --git a/src/models/item.js b/src/models/item.js deleted file mode 100644 index f550f7d..0000000 --- a/src/models/item.js +++ /dev/null @@ -1,17 +0,0 @@ -const mongoose = require('mongoose'); - -var ItemSchema = mongoose.Schema({ - name: { - type: String, - unique: true, - required: true - }, - email: { - type: String, - required: true - }, -},{ - timestamps: true -}); - -module.exports = Item = mongoose.model('Item', ItemSchema); \ No newline at end of file diff --git a/src/routes/itemRoutes.js b/src/routes/itemRoutes.js deleted file mode 100644 index 2a8079c..0000000 --- a/src/routes/itemRoutes.js +++ /dev/null @@ -1,73 +0,0 @@ -const { Router } = require('express'); -const router = Router(); -const Item = require('../models/Item'); -const ItemSchema = require('../schemas/itemSchema'); - -// Get all -router.get('/', async (req,res,next) => { - try { - const items = await Item.find(); - res.send(items); - } catch (error) { - next(error); - } -}); - -// Create One -router.post('/add', async (req, res, next) => { - try { - const value = await ItemSchema.validateAsync(req.body, { abortEarly: false }); - const validated = new Item(value); - const inserted = await validated.save(); - res.json(inserted); - } catch (error) { - next(error); - } -}); - -// Get One -router.get('/:id', async (req, res, next) => { - try { - const { id } = req.params; - const item = await Item.findOne({ - _id: id - }); - if (!item) return next(); - return res.json(item); - } catch (error) { - next(error); - } -}) - -// Edit One -router.put('/edit/:id', async (req,res, next) => { - try { - const { id } = req.params; - const value = await ItemSchema.validateAsync(req.body, { abortEarly: false }) - const item = await Item.findOne({ - _id: id - }); - if (!item) return next(); - const updated = await Item.update({ - _id: id - }, { - $set: value - }); - res.json(updated); - } catch (error) { - next(error); - } -}); - -router.delete('/delete/:id', async (req,res,next) => { - try { - const { id } = req.params; - const deleted = await Item.remove({_id: id}); - res.json(deleted); - } catch (error) { - next(error); - } -}); - - -module.exports = router; \ No newline at end of file diff --git a/src/schemas/itemSchema.js b/src/schemas/itemSchema.js deleted file mode 100644 index 75db8f2..0000000 --- a/src/schemas/itemSchema.js +++ /dev/null @@ -1,6 +0,0 @@ -const Joi = require('joi'); - -module.exports = ItemSchema = Joi.object({ - name: Joi.string().min(4).max(30).required(), - email: Joi.string().email().required(), -}) \ No newline at end of file From ca3fda51a586138dacc017ce39c01bd21ffb6856 Mon Sep 17 00:00:00 2001 From: Marofelipe Date: Fri, 16 Oct 2020 16:28:22 -0300 Subject: [PATCH 061/147] auth function was added and logout route was deleted Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- package-lock.json | 20 ++++++--- package.json | 4 +- src/index.js | 4 +- src/models/index.js | 0 src/models/user.js | 6 ++- src/routes/auth.js | 37 ++++++++++++++++ src/routes/authRoutes.js | 92 +++++++++++----------------------------- src/routes/index.js | 0 src/schemas/index.js | 0 9 files changed, 86 insertions(+), 77 deletions(-) delete mode 100644 src/models/index.js create mode 100644 src/routes/auth.js delete mode 100644 src/routes/index.js delete mode 100644 src/schemas/index.js diff --git a/package-lock.json b/package-lock.json index 3cddde7..4f55c77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -449,6 +449,11 @@ "is-obj": "^2.0.0" } }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -663,6 +668,11 @@ "toidentifier": "1.0.0" } }, + "i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -813,11 +823,6 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, - "kareem": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", - "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" - }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -861,6 +866,11 @@ "safe-buffer": "^5.0.1" } }, + "kareem": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", + "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", diff --git a/package.json b/package.json index a24ddad..cd92567 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,12 @@ }, "homepage": "https://github.com/fga-eps-mds/2020.1-Grupo2-backend#readme", "dependencies": { + "dotenv": "^8.2.0", "express": "^4.17.1", + "i": "^0.3.6", "joi": "^17.2.1", - "mongoose": "^5.10.5", "jsonwebtoken": "^8.5.1", + "mongoose": "^5.10.5", "morgan": "^1.10.0" }, "devDependencies": { diff --git a/src/index.js b/src/index.js index 7bc111d..a0b43e0 100644 --- a/src/index.js +++ b/src/index.js @@ -5,11 +5,12 @@ const mongoose = require('mongoose'); const itemRoutes = require('./routes/itemRoutes'); const authRoutes = require('./routes/authRoutes'); +const userRoutes = require('./routes/userRoutes'); // MongoDB connection mongoose .connect( - 'mongodb://mongo:27017/backend', + 'mongodb://localhost:27017/noderest', { useNewUrlParser: true } ) .then(() => console.log('MongoDB Connected')) @@ -27,6 +28,7 @@ app.use(express.json()); // routes app.use('/item',itemRoutes); app.use('/auth',authRoutes); +app.use('/user',userRoutes); // starting the server app.listen(app.get('port'), () => { diff --git a/src/models/index.js b/src/models/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/models/user.js b/src/models/user.js index 5b87ad6..43af212 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -5,7 +5,8 @@ const Schema = mongoose.Schema; const userSchema = new Schema({ username: { type: String, - required: true + required: true, + unique: true }, password: { type: String, @@ -13,7 +14,8 @@ const userSchema = new Schema({ }, email: { type: String, - required: true + required: true, + unique: true } }); diff --git a/src/routes/auth.js b/src/routes/auth.js new file mode 100644 index 0000000..8ef7fe5 --- /dev/null +++ b/src/routes/auth.js @@ -0,0 +1,37 @@ + +//confere se o token é valido + +const jsonwebtoken = require('jsonwebtoken'); + +const authConfig = { + "secret": "d41d8cd98f00b204e9800998ecf8427e" + +}; +module.exports = (req, res, next) => { + const sessiontoken = req.headers.authtoken; + + if(!sessiontoken){ + return res.status(401).send({Error: 'Token not provided'}); + } + + const parts = sessiontoken.split(' '); + + if (!parts.length === 2){ + return res.status(401).send({Error: 'Token error'}); + } + + const [scheme, token] = parts; + + if(!/^Bearer$/i.test(scheme)){ + return res.status(401).send({Error: 'Token malformated'}); + } + + jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { + if(err){ + return res.status(401).send({Error: 'Token invalid'}); + } + req.userId = decoded.id; + return next() + + }); +} diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 4ed2239..ce71b7e 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -7,15 +7,11 @@ const jsonwebtoken = require('jsonwebtoken'); const User = require('../models/user'); const userSchema = require('../schemas/userSchema'); +const auth = require('./auth'); -router.get('/', (req, res) => { - res.json({ - message: 'Authentication!' - }); -}); const authConfig = { - "secret": "d41d8cd98f00b204e9800998ecf8427e" + "secret": "d41d8cd98f00b204e9800998ecf8427e" }; router.post('/login', async(req, res) => { @@ -55,104 +51,63 @@ router.post('/login', async(req, res) => { }); -router.get('/logout', async(req, res) => { - const sessiontoken = req.headers.authtoken; - - if(!sessiontoken){ - return res.status(401).send({Error: 'Token not provided'}); - } - - const parts = sessiontoken.split(' '); - if (!parts.length === 2){ - return res.status(401).send({Error: 'Token error'}); - } - - const [scheme, token] = parts; - - if(!/^Bearer$/i.test(scheme)){ - return res.status(401).send({Error: 'Token malformated'}); - } - - jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { - if(err){ - return res.status(401).send({Error: 'Token invalid'}); - } - - const token = jsonwebtoken.sign({id: decoded.id}, authConfig.secret,{ - expiresIn: 1, - }); - - }); - - res.redirect('/login'); -}); - -router.post('/signup', async(req, res, next) => { +router.post('/signup', async(req, res) => { try { const newUserData = req.body; const result = userSchema.validate(req.body); - if( await User.findOne({ username: newUserData.username}) ) { - const error = new Error('Username already being used.'); - return next(error); - } + await User.findOne({ username: newUserData.username}); - if( result.error ) { - return next(result.error); - } + if ( result.error ) return res.status(400).send({ error: 'Error while signing up. ' + result.error}); const user = new User(newUserData); user.save() - .then( result => { - return res.send(result); + .then( () => { + return res.send(user); }) - .catch( err => next(err)); + .catch(err => { + return res.status(400).send({ error: 'Error while signing up. ' + err}); + }); } catch(err) { - return next(err); + return res.status(400).send({ error: 'Error while signing up.' + err }); } }); - -router.put('/update-user/:id', async(req, res, next) => { +router.put('/update/:id',auth, async(req, res) => { try { const user = await User.findById(req.params.id); const newData = req.body; - if ( !newData.username ) { - newData.username = user.username; - } - if ( !newData.password ) { - newData.password = user.password; - } - if ( !newData.email ) { - newData.email = user.email; - } + if ( !newData.username ) newData.username = user.username; + if ( !newData.password ) newData.password = user.password; + if ( !newData.email ) newData.email = user.email; const result = userSchema.validate(newData); - if(result.error) { - return next(result.error); - } + if ( result.error ) return res.status(400).send(result.error); await User.findOneAndUpdate({_id: req.params.id}, req.body, { useFindAndModify: false}) .then( () => { res.send({ message: 'User updated successfully.'}); + }) + .catch(err => { + return res.status(400).send({ error: 'Error while updating user. ' + err}); }); } catch(err) { - return next(err); + return res.status(400).send({ error: 'Error while updating user.' + err}); } }); -router.delete('/delete-user/:id', async(req, res, next) => { +router.delete('/delete/:id',auth, async(req, res) => { try { @@ -160,9 +115,10 @@ router.delete('/delete-user/:id', async(req, res, next) => { return res.send({ message: 'User successfully deleted.' }); } catch(err) { - return next(err); + return res.status(400).send({ error: 'Error while deleting user. ' + err }); } }); -module.exports = router; \ No newline at end of file + +module.exports = router; diff --git a/src/routes/index.js b/src/routes/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/src/schemas/index.js b/src/schemas/index.js deleted file mode 100644 index e69de29..0000000 From ef14cb54ee7181dda15085d323698560e17c687d Mon Sep 17 00:00:00 2001 From: Marofelipe Date: Fri, 16 Oct 2020 16:44:55 -0300 Subject: [PATCH 062/147] put secret on .env Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/index.js | 4 ++-- src/routes/auth.js | 7 ++++--- src/routes/authRoutes.js | 13 +++---------- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/index.js b/src/index.js index a0b43e0..54fd137 100644 --- a/src/index.js +++ b/src/index.js @@ -5,7 +5,7 @@ const mongoose = require('mongoose'); const itemRoutes = require('./routes/itemRoutes'); const authRoutes = require('./routes/authRoutes'); -const userRoutes = require('./routes/userRoutes'); + // MongoDB connection mongoose @@ -28,7 +28,7 @@ app.use(express.json()); // routes app.use('/item',itemRoutes); app.use('/auth',authRoutes); -app.use('/user',userRoutes); + // starting the server app.listen(app.get('port'), () => { diff --git a/src/routes/auth.js b/src/routes/auth.js index 8ef7fe5..178bee1 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,13 +1,13 @@ //confere se o token é valido - +require('dotenv').config(); const jsonwebtoken = require('jsonwebtoken'); const authConfig = { - "secret": "d41d8cd98f00b204e9800998ecf8427e" + "secret": process.env.SECRET }; -module.exports = (req, res, next) => { +function auth(req, res, next) { const sessiontoken = req.headers.authtoken; if(!sessiontoken){ @@ -35,3 +35,4 @@ module.exports = (req, res, next) => { }); } +module.exports = {authConfig,auth} diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index ce71b7e..e5b08f0 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -7,23 +7,16 @@ const jsonwebtoken = require('jsonwebtoken'); const User = require('../models/user'); const userSchema = require('../schemas/userSchema'); -const auth = require('./auth'); +const {auth,authConfig} = require('./auth'); -const authConfig = { - "secret": "d41d8cd98f00b204e9800998ecf8427e" -}; router.post('/login', async(req, res) => { + const {email, password} = req.body; const user = await User.findOne({ email, password }); - //Para testar estava utilizando a estrutura abaixo - // const user = { - // "email": "asda@asd.com", - // "password": "asdz" - // }; - + if(!user){ return res.status(400).send({Error: 'User not found'}); From 1ab5a79f518f642fd47e11ff71aed003c35f0dc0 Mon Sep 17 00:00:00 2001 From: Marofelipe Date: Fri, 16 Oct 2020 16:51:40 -0300 Subject: [PATCH 063/147] uninstalled i dependence Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index cd92567..5b4c61a 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "dependencies": { "dotenv": "^8.2.0", "express": "^4.17.1", - "i": "^0.3.6", "joi": "^17.2.1", "jsonwebtoken": "^8.5.1", "mongoose": "^5.10.5", From 2104f8b533b4522fe2febac3b274ce5546162b61 Mon Sep 17 00:00:00 2001 From: Marofelipe Date: Fri, 16 Oct 2020 17:29:55 -0300 Subject: [PATCH 064/147] removed item and changed imports on authRoutes Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- package-lock.json | 5 ----- src/index.js | 4 ++-- src/models/user.js | 16 +++++++++++----- src/routes/authRoutes.js | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f55c77..d788113 100644 --- a/package-lock.json +++ b/package-lock.json @@ -668,11 +668,6 @@ "toidentifier": "1.0.0" } }, - "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", diff --git a/src/index.js b/src/index.js index f1d3bbe..6afa0b5 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ const app = express(); const morgan = require('morgan'); const mongoose = require('mongoose'); -const itemRoutes = require('./routes/itemRoutes'); + const authRoutes = require('./routes/authRoutes'); const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); @@ -27,7 +27,7 @@ app.use(express.urlencoded({extended: false})); app.use(express.json()); // routes -app.use('/item',itemRoutes); + app.use('/auth',authRoutes); app.use('/plant',plantRoutes); app.use('/topic',topicRoutes); diff --git a/src/models/user.js b/src/models/user.js index 43af212..26825bc 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -1,12 +1,11 @@ const mongoose = require('mongoose'); - const Schema = mongoose.Schema; const userSchema = new Schema({ username: { type: String, required: true, - unique: true + unique:true }, password: { type: String, @@ -15,10 +14,17 @@ const userSchema = new Schema({ email: { type: String, required: true, - unique: true - } + unique:true + }, + topics: [{ + type: mongoose.Schema.Types.ObjectId, + ref: 'Topics', + require: true, + }] }); const User = mongoose.model('User', userSchema); -module.exports = User; \ No newline at end of file +module.exports = User; + + diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index d42e1a8..672e07b 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -1,12 +1,12 @@ const express = require('express'); const router = express.Router(); const jsonwebtoken = require('jsonwebtoken'); -const User = require('../models/user'); +const User = require('../models/User'); const userSchema = require('../schemas/userSchema'); const {auth,authConfig} = require('./auth'); -router.post('/login', async(req, res) => { +router.post('/login', async(req, res ,next) => { try{ const {email, password} = req.body; const user = await User.findOne({ email, password }); From d8289708e609e2c961eff2874ff19eaabdbced89 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Fri, 16 Oct 2020 17:42:14 -0300 Subject: [PATCH 065/147] Removes user.js and Update User.js Co-authored-by: Antonio Ruan Co-authored-by: Marcos Filipe --- src/models/User.js | 6 ++++-- src/models/user.js | 30 ------------------------------ 2 files changed, 4 insertions(+), 32 deletions(-) delete mode 100644 src/models/user.js diff --git a/src/models/User.js b/src/models/User.js index eb95e35..0faf8c4 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -4,7 +4,8 @@ const Schema = mongoose.Schema; const userSchema = new Schema({ username: { type: String, - required: true + required: true, + unique:true }, password: { type: String, @@ -12,7 +13,8 @@ const userSchema = new Schema({ }, email: { type: String, - required: true + required: true, + unique:true }, topics: [{ type: mongoose.Schema.Types.ObjectId, diff --git a/src/models/user.js b/src/models/user.js deleted file mode 100644 index 26825bc..0000000 --- a/src/models/user.js +++ /dev/null @@ -1,30 +0,0 @@ -const mongoose = require('mongoose'); -const Schema = mongoose.Schema; - -const userSchema = new Schema({ - username: { - type: String, - required: true, - unique:true - }, - password: { - type: String, - required: true - }, - email: { - type: String, - required: true, - unique:true - }, - topics: [{ - type: mongoose.Schema.Types.ObjectId, - ref: 'Topics', - require: true, - }] -}); - -const User = mongoose.model('User', userSchema); - -module.exports = User; - - From bbc0c8a6cc4fc9378f4b65d785a1bd629cb19c15 Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Mon, 19 Oct 2020 20:45:42 -0300 Subject: [PATCH 066/147] adding eslint https://github.com/fga-eps-mds/2020.1-GaiaDex-wiki/issues/101 --- .eslintrc.json | 33 + package-lock.json | 3561 ++++++++++++++++++++++++++++++++++++++++----- package.json | 408 +++++- src/index.js | 1 - yarn.lock | 1356 ----------------- 5 files changed, 3607 insertions(+), 1752 deletions(-) create mode 100644 .eslintrc.json delete mode 100644 yarn.lock diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..2a0e12c --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": [ + "airbnb", + "prettier", + "prettier/react", + "plugin:prettier/recommended", + "eslint-config-prettier" + ], + "parser": "babel-eslint", + "rules": { + "import/no-unresolved": "off", + "react/jsx-filename-extension": [ + 1, + { + "extensions": [ + ".js", + ".jsx" + ] + } + ], + "prettier/prettier": [ + "error", + { + "trailingComma": "es5", + "singleQuote": true, + "printWidth": 100 + } + ] + }, + "plugins": [ + "prettier" + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d788113..423614e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,219 @@ { - "name": "2020.1-Grupo2-backend", + "name": "2020.1-gaiadex-backend", "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", + "dev": true + }, + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", + "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.1", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.1", + "@babel/types": "^7.12.1", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, "@hapi/address": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", @@ -38,14 +248,12 @@ "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, "requires": { "defer-to-connect": "^1.0.1" } @@ -53,14 +261,22 @@ "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.7", @@ -71,54 +287,270 @@ "negotiator": "0.6.2" } }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-align": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, "requires": { "string-width": "^3.0.0" }, "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" } } }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "axe-core": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", + "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==" + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "basic-auth": { "version": "2.0.1", @@ -131,8 +563,7 @@ "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, "bl": { "version": "2.2.1", @@ -141,6 +572,13 @@ "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "bluebird": { @@ -169,7 +607,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, "requires": { "ansi-align": "^3.0.0", "camelcase": "^5.3.1", @@ -185,7 +622,6 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" @@ -195,7 +631,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -205,7 +640,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -213,20 +647,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -237,7 +668,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -247,7 +677,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -271,7 +700,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -286,7 +714,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -294,22 +721,53 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" } } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", - "dev": true, + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -318,56 +776,154 @@ "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.5.0" } }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "restore-cursor": "^3.1.0" } }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "requires": { - "safe-buffer": "5.1.2" + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", + "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==" + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "confusing-browser-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" } }, "content-type": { @@ -385,16 +941,65 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "damerau-levenshtein": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", + "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" }, "debug": { "version": "2.6.9", @@ -402,28 +1007,50 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, "requires": { "mimic-response": "^1.0.0" } }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } }, "denque": { "version": "1.4.1", @@ -440,13 +1067,28 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, "dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, "requires": { "is-obj": "^2.0.0" + }, + "dependencies": { + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + } } }, "dotenv": { @@ -457,8 +1099,7 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "ecdsa-sig-formatter": { "version": "1.0.11", @@ -466,6 +1107,13 @@ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { "safe-buffer": "^5.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "ee-first": { @@ -474,10 +1122,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -488,136 +1135,669 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "eslint": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "dev": true, "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + } } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "eslint-config-airbnb": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz", + "integrity": "sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg==", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "eslint-config-airbnb-base": "^14.2.0", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "eslint-config-airbnb-base": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz", + "integrity": "sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q==", + "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "confusing-browser-globals": "^1.0.9", + "object.assign": "^4.1.0", + "object.entries": "^1.1.2" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "eslint-config-prettier": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.13.0.tgz", + "integrity": "sha512-LcT0i0LSmnzqK2t764pyIt7kKH2AuuqKRTtJTdddWxOiUja9HdG5GXBVF2gmCTvVYWVsTu8J2MhJLVGRh+pj8w==", "dev": true, "requires": { - "pump": "^3.0.0" + "get-stdin": "^6.0.0" } }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "debug": "^2.6.9", + "resolve": "^1.13.1" } }, - "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "dev": true, "requires": { - "ini": "^1.3.5" + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + } } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", + "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "aria-query": "^4.2.2", + "array-includes": "^3.1.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^3.5.4", + "axobject-query": "^2.1.2", + "damerau-levenshtein": "^1.0.6", + "emoji-regex": "^9.0.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1", + "language-tags": "^1.0.5" + }, + "dependencies": { + "emoji-regex": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.1.1.tgz", + "integrity": "sha512-AaWyDiNO9rbtMIcGl7tdxMcNu8SOLaDLxmQEFT5JhgKufOJzPPkYmgN2QwqTgw4doWMZZQttC6sUWVQjb+1VdA==", + "dev": true + } + } + }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz", + "integrity": "sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.17.0", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "jsx-ast-utils": { + "version": "3.1.0", + "resolved": "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", + "integrity": "sha1-ZC8de4iqbX652PIhDhZkeERPqJE= sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.1" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.0.0", + "resolved": "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.0.tgz", + "integrity": "sha1-gRlrmQBDzeM54lxmYq7r4yrFLQE= sha512-YKBY+kilK5wrwIdQnCF395Ya6nDro3EAMoe+2xFkmyklyhF16fH83TrQOo9zbZIDxBsXFgBbywta/0JKRNFDkw==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "execa": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", + "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "requires": { + "semver-regex": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "requires": { + "ini": "^1.3.5" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "requires": { + "type-fest": "^0.8.1" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -630,31 +1810,55 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU= sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + } } }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-errors": { "version": "1.7.2", @@ -666,6 +1870,145 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "husky": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz", + "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^7.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "iconv-lite": { @@ -676,75 +2019,174 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } + } }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM= sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + } + }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, "requires": { "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -753,53 +2195,87 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, "requires": { "global-dirs": "^2.0.1", "is-path-inside": "^3.0.1" } }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + }, "is-npm": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, "is-path-inside": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, "joi": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/joi/-/joi-17.2.1.tgz", @@ -812,12 +2288,53 @@ "@hapi/topo": "^5.0.0" } }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -842,6 +2359,15 @@ } } }, + "jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + } + }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -850,6 +2376,13 @@ "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "jws": { @@ -859,6 +2392,13 @@ "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "kareem": { @@ -870,66 +2410,388 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, "requires": { "json-buffer": "3.0.0" } }, + "language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==" + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, "latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "lint-staged": { + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.4.2.tgz", + "integrity": "sha512-OLCA9K1hS+Sl179SO6kX0JtnsaKj/MZalEhUj5yAgXsb63qPI/Gfn6Ua1KuZdbfkZNEu3/n5C/obYCu70IMt9g==", "dev": true, "requires": { - "package-json": "^6.3.0" + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.0.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.1.1", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.0.3", + "listr2": "^2.6.0", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "listr2": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz", + "integrity": "sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==", + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.2", + "through": "^2.3.8" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "requires": { + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "requires": { "semver": "^6.0.0" }, @@ -937,8 +2799,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -950,19 +2811,32 @@ "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -981,17 +2855,20 @@ "mime-db": "1.44.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -999,8 +2876,15 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } }, "mongodb": { "version": "3.6.2", @@ -1013,6 +2897,13 @@ "require_optional": "^1.0.1", "safe-buffer": "^5.1.2", "saslprep": "^1.0.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "mongoose": { @@ -1093,13 +2984,28 @@ "requires": { "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "negotiator": { "version": "0.6.2", @@ -1145,22 +3051,177 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, "requires": { "abbrev": "1" } }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } }, "on-finished": { "version": "2.3.0", @@ -1179,22 +3240,79 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opencollective-postinstall": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, "requires": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -1205,38 +3323,180 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + } + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "requires": { + "semver-compare": "^1.0.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", "dev": true }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, "proxy-addr": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", @@ -1249,24 +3509,26 @@ "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, "pupa": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", - "dev": true, "requires": { "escape-goat": "^2.0.0" } @@ -1296,12 +3558,52 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + } + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + } + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { @@ -1319,24 +3621,61 @@ } }, "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "requires": { "picomatch": "^2.2.1" } }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, "regexp-clone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + }, "registry-auth-token": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", - "dev": true, "requires": { "rc": "^1.2.8" } @@ -1345,7 +3684,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, "requires": { "rc": "^1.2.8" } @@ -1359,6 +3697,15 @@ "semver": "^5.1.0" } }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, "resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", @@ -1368,9 +3715,38 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, "requires": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "requires": { + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -1387,7 +3763,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, "requires": { "sparse-bitfield": "^3.0.3" } @@ -1397,11 +3772,15 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, "requires": { "semver": "^6.3.0" }, @@ -1409,11 +3788,15 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -1434,6 +3817,18 @@ "statuses": "~1.5.0" }, "dependencies": { + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY= sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -1457,6 +3852,49 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "requires": { + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, "sift": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", @@ -1465,33 +3903,121 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k= sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } }, "sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, "sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, "requires": { "memory-pager": "^1.0.2" } }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1501,32 +4027,119 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "requires": { "ansi-regex": "^5.0.0" } } } }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -1535,47 +4148,137 @@ "safe-buffer": "~5.1.0" } }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + } + } + }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "term-size": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", - "dev": true + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -1589,16 +4292,38 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, "requires": { "nopt": "~1.0.10" } }, + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" }, "type-is": { "version": "1.6.18", @@ -1613,7 +4338,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, "requires": { "is-typedarray": "^1.0.0" } @@ -1622,7 +4346,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, "requires": { "debug": "^2.2.0" } @@ -1631,7 +4354,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, "requires": { "crypto-random-string": "^2.0.0" } @@ -1642,10 +4364,9 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.1.tgz", - "integrity": "sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg==", - "dev": true, + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", "requires": { "boxen": "^4.2.0", "chalk": "^3.0.0", @@ -1662,63 +4383,42 @@ "xdg-basedir": "^4.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "^2.1.0" + } + }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, "requires": { "prepend-http": "^2.0.0" } @@ -1733,31 +4433,114 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, "requires": { "string-width": "^4.0.0" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -1768,8 +4551,12 @@ "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" } } } diff --git a/package.json b/package.json index 4fa3ad8..d363a91 100644 --- a/package.json +++ b/package.json @@ -1,34 +1,426 @@ { - "name": "2020.1-Grupo2-backend", + "name": "2020.1-gaiadex-backend", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node src/index.js", - "dev": "nodemon src/index.js" + "dev": "nodemon src/index.js", + "precommit": "lint-staged" + }, + "lint-staged": { + "*.{js,jsx}": [ + "eslint --fix", + "git add" + ] }, "repository": { "type": "git", - "url": "git+https://github.com/fga-eps-mds/2020.1-Grupo2-backend.git" + "url": "git+https://github.com/fga-eps-mds/2020.1-GaiaDex-backend.git" }, "keywords": [], "author": "", "license": "ISC", "bugs": { - "url": "https://github.com/fga-eps-mds/2020.1-Grupo2-backend/issues" + "url": "https://github.com/fga-eps-mds/2020.1-GaiaDex-backend/issues" }, - "homepage": "https://github.com/fga-eps-mds/2020.1-Grupo2-backend#readme", + "homepage": "https://github.com/fga-eps-mds/2020.1-GaiaDex-backend#readme", "dependencies": { + "abbrev": "^1.1.1", + "accepts": "^1.3.7", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "aggregate-error": "^3.1.0", + "ajv": "^6.12.6", + "ansi-align": "^3.0.0", + "ansi-colors": "^4.1.1", + "ansi-escapes": "^4.3.1", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.3.0", + "anymatch": "^3.1.1", + "argparse": "^1.0.10", + "aria-query": "^4.2.2", + "array-flatten": "^1.1.1", + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "array.prototype.flatmap": "^1.2.3", + "ast-types-flow": "^0.0.7", + "astral-regex": "^2.0.0", + "axe-core": "^3.5.5", + "axobject-query": "^2.2.0", + "balanced-match": "^1.0.0", + "basic-auth": "^2.0.1", + "binary-extensions": "^2.1.0", + "bl": "^2.2.1", + "bluebird": "^3.5.1", + "body-parser": "^1.19.0", + "boxen": "^4.2.0", + "brace-expansion": "^1.1.11", + "braces": "^3.0.2", + "bson": "^1.1.5", + "buffer-equal-constant-time": "^1.0.1", + "bytes": "^3.1.0", + "cacheable-request": "^6.1.0", + "callsites": "^3.1.0", + "camelcase": "^5.3.1", + "chalk": "^4.1.0", + "chardet": "^0.7.0", + "chokidar": "^3.4.3", + "ci-info": "^2.0.0", + "clean-stack": "^2.2.0", + "cli-boxes": "^2.2.1", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "cli-width": "^3.0.0", + "clone-response": "^1.0.2", + "color-convert": "^2.0.1", + "color-name": "^1.1.4", + "commander": "^6.1.0", + "compare-versions": "^3.6.0", + "concat-map": "^0.0.1", + "configstore": "^5.0.1", + "confusing-browser-globals": "^1.0.9", + "contains-path": "^0.1.0", + "content-disposition": "^0.5.3", + "content-type": "^1.0.4", + "cookie": "^0.4.0", + "cookie-signature": "^1.0.6", + "core-js-pure": "^3.6.5", + "cosmiconfig": "^7.0.0", + "core-util-is": "^1.0.2", + "cross-spawn": "^7.0.3", + "crypto-random-string": "^2.0.0", + "damerau-levenshtein": "^1.0.6", + "debug": "^2.6.9", + "decompress-response": "^3.3.0", + "dedent": "^0.7.0", + "deep-extend": "^0.6.0", + "deep-is": "^0.1.3", + "defer-to-connect": "^1.1.3", + "define-properties": "^1.1.3", + "denque": "^1.4.1", + "depd": "^1.1.2", + "destroy": "^1.0.4", + "doctrine": "^1.5.0", + "dot-prop": "^5.3.0", "dotenv": "^8.2.0", + "duplexer3": "^0.1.4", + "ecdsa-sig-formatter": "^1.0.11", + "ee-first": "^1.1.1", + "emoji-regex": "^8.0.0", + "encodeurl": "^1.0.2", + "end-of-stream": "^1.4.4", + "enquirer": "^2.3.6", + "error-ex": "^1.3.2", + "es-abstract": "^1.17.7", + "es-to-primitive": "^1.2.1", + "escape-goat": "^2.1.1", + "escape-html": "^1.0.3", + "escape-string-regexp": "^1.0.5", + "espree": "^7.3.0", + "esprima": "^4.0.1", + "esquery": "^1.3.1", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0", + "esutils": "^2.0.3", + "etag": "^1.8.1", + "execa": "^4.0.3", "express": "^4.17.1", + "external-editor": "^3.1.0", + "fast-deep-equal": "^3.1.3", + "fast-json-stable-stringify": "^2.1.0", + "fast-levenshtein": "^2.0.6", + "figures": "^3.2.0", + "file-entry-cache": "^5.0.1", + "fill-range": "^7.0.1", + "finalhandler": "^1.1.2", + "find-up": "^2.1.0", + "find-versions": "^3.2.0", + "flat-cache": "^2.0.1", + "flatted": "^2.0.2", + "forwarded": "^0.1.2", + "fresh": "^0.5.2", + "fs.realpath": "^1.0.0", + "function-bind": "^1.1.1", + "functional-red-black-tree": "^1.0.1", + "get-own-enumerable-property-symbols": "^3.0.2", + "get-stream": "^5.2.0", + "glob": "^7.1.6", + "glob-parent": "^5.1.1", + "global-dirs": "^2.0.1", + "globals": "^12.4.0", + "got": "^9.6.0", + "graceful-fs": "^4.2.4", + "has": "^1.0.3", + "has-flag": "^3.0.0", + "has-yarn": "^2.1.0", + "has-symbols": "^1.0.1", + "hosted-git-info": "^2.8.8", + "http-cache-semantics": "^4.1.0", + "http-errors": "^1.7.2", + "human-signals": "^1.1.1", + "iconv-lite": "^0.4.24", + "ignore": "^4.0.6", + "ignore-by-default": "^1.0.1", + "import-fresh": "^3.2.1", + "import-lazy": "^2.1.0", + "imurmurhash": "^0.1.4", + "indent-string": "^4.0.0", + "inflight": "^1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.5", + "inquirer": "^7.3.3", + "internal-slot": "^1.0.2", + "ipaddr.js": "^1.9.1", + "is-arrayish": "^0.2.1", + "is-binary-path": "^2.1.0", + "is-callable": "^1.2.2", + "is-ci": "^2.0.0", + "is-core-module": "^2.0.0", + "is-date-object": "^1.0.2", + "is-extglob": "^2.1.1", + "is-fullwidth-code-point": "^3.0.0", + "is-glob": "^4.0.1", + "is-installed-globally": "^0.3.2", + "is-negative-zero": "^2.0.0", + "is-npm": "^4.0.0", + "is-number": "^7.0.0", + "is-obj": "^1.0.1", + "is-path-inside": "^3.0.2", + "is-regex": "^1.1.1", + "is-regexp": "^1.0.0", + "is-stream": "^2.0.0", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3", + "is-typedarray": "^1.0.0", + "is-yarn-global": "^0.3.0", + "isarray": "^1.0.0", + "isexe": "^2.0.0", "joi": "^17.2.1", + "js-tokens": "^4.0.0", + "js-yaml": "^3.14.0", + "jsesc": "^2.5.2", + "json-buffer": "^3.0.0", + "json-parse-even-better-errors": "^2.3.1", + "json-schema-traverse": "^0.4.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "json5": "^1.0.1", "jsonwebtoken": "^8.5.1", - "body-parser": "^1.19.0", + "jsx-ast-utils": "^2.4.1", + "jwa": "^1.4.1", + "jws": "^3.2.2", + "kareem": "^2.3.1", + "keyv": "^3.1.0", + "language-subtag-registry": "^0.3.20", + "language-tags": "^1.0.5", + "latest-version": "^5.1.0", + "levn": "^0.4.1", + "lines-and-columns": "^1.1.6", + "listr2": "^2.6.2", + "load-json-file": "^2.0.0", + "locate-path": "^2.0.0", + "lodash": "^4.17.20", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.1.1", + "log-update": "^4.0.0", + "loose-envify": "^1.4.0", + "log-symbols": "^4.0.0", + "lowercase-keys": "^1.0.1", + "make-dir": "^3.1.0", + "media-typer": "^0.3.0", + "memory-pager": "^1.5.0", + "merge-descriptors": "^1.0.1", + "merge-stream": "^2.0.0", + "methods": "^1.1.2", + "micromatch": "^4.0.2", + "mime": "^1.6.0", + "mime-db": "^1.44.0", + "mime-types": "^2.1.27", + "mimic-fn": "^2.1.0", + "mimic-response": "^1.0.1", + "minimatch": "^3.0.4", + "minimist": "^1.2.5", + "mkdirp": "^0.5.5", "mongodb": "^3.6.2", + "morgan": "^1.10.0", "mongoose": "^5.10.5", - "morgan": "^1.10.0" + "mongoose-legacy-pluralize": "^1.0.2", + "mpath": "^0.7.0", + "mquery": "^3.2.2", + "ms": "^2.1.2", + "mute-stream": "^0.0.8", + "natural-compare": "^1.4.0", + "negotiator": "^0.6.2", + "nopt": "^1.0.10", + "normalize-package-data": "^2.5.0", + "normalize-path": "^3.0.0", + "normalize-url": "^4.5.0", + "npm-run-path": "^4.0.1", + "object-assign": "^4.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "on-finished": "^2.3.0", + "on-headers": "^1.0.2", + "once": "^1.4.0", + "onetime": "^5.1.2", + "opencollective-postinstall": "^2.0.3", + "optionator": "^0.9.1", + "os-tmpdir": "^1.0.2", + "p-cancelable": "^1.1.0", + "p-limit": "^1.3.0", + "p-locate": "^2.0.0", + "p-map": "^4.0.0", + "p-try": "^1.0.0", + "package-json": "^6.5.0", + "parent-module": "^1.0.1", + "parse-json": "^5.1.0", + "parseurl": "^1.3.3", + "path-exists": "^3.0.0", + "path-is-absolute": "^1.0.1", + "path-key": "^3.1.1", + "path-parse": "^1.0.6", + "path-to-regexp": "^0.1.7", + "path-type": "^4.0.0", + "picomatch": "^2.2.2", + "pify": "^2.3.0", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "prelude-ls": "^1.2.1", + "prepend-http": "^2.0.0", + "process-nextick-args": "^2.0.1", + "progress": "^2.0.3", + "prop-types": "^15.7.2", + "proxy-addr": "^2.0.6", + "pstree.remy": "^1.1.8", + "pump": "^3.0.0", + "punycode": "^2.1.1", + "pupa": "^2.0.1", + "qs": "^6.7.0", + "range-parser": "^1.2.1", + "raw-body": "^2.4.0", + "rc": "^1.2.8", + "react-is": "^16.13.1", + "read-pkg": "^2.0.0", + "read-pkg-up": "^2.0.0", + "readable-stream": "^2.3.7", + "readdirp": "^3.5.0", + "regenerator-runtime": "^0.13.7", + "regexp-clone": "^1.0.0", + "regexp.prototype.flags": "^1.3.0", + "regexpp": "^3.1.0", + "registry-auth-token": "^4.2.0", + "registry-url": "^5.1.0", + "require_optional": "^1.0.1", + "resolve": "^1.18.1", + "resolve-from": "^2.0.0", + "responselike": "^1.0.2", + "restore-cursor": "^3.1.0", + "rimraf": "^2.6.3", + "run-async": "^2.4.1", + "rxjs": "^6.6.3", + "safe-buffer": "^5.1.2", + "safer-buffer": "^2.1.2", + "saslprep": "^1.0.3", + "semver": "^5.7.1", + "semver-compare": "^1.0.0", + "semver-diff": "^3.1.1", + "semver-regex": "^2.0.0", + "send": "^0.17.1", + "serve-static": "^1.14.1", + "setprototypeof": "^1.1.1", + "shebang-command": "^2.0.0", + "shebang-regex": "^3.0.0", + "side-channel": "^1.0.3", + "sift": "^7.0.1", + "signal-exit": "^3.0.3", + "slash": "^3.0.0", + "slice-ansi": "^2.1.0", + "sliced": "^1.0.1", + "source-map": "^0.5.7", + "sparse-bitfield": "^3.0.3", + "spdx-correct": "^3.1.1", + "spdx-exceptions": "^2.3.0", + "spdx-expression-parse": "^3.0.1", + "spdx-license-ids": "^3.0.6", + "sprintf-js": "^1.0.3", + "statuses": "^1.5.0", + "string-argv": "^0.3.1", + "string-width": "^4.2.0", + "string.prototype.matchall": "^4.0.2", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1", + "string_decoder": "^1.1.1", + "stringify-object": "^3.3.0", + "strip-ansi": "^6.0.0", + "strip-bom": "^3.0.0", + "strip-final-newline": "^2.0.0", + "strip-json-comments": "^3.1.1", + "supports-color": "^5.5.0", + "table": "^5.4.6", + "term-size": "^2.2.0", + "text-table": "^0.2.0", + "through": "^2.3.8", + "tmp": "^0.0.33", + "to-fast-properties": "^2.0.0", + "to-readable-stream": "^1.0.0", + "to-regex-range": "^5.0.1", + "toidentifier": "^1.0.0", + "touch": "^3.1.0", + "tsconfig-paths": "^3.9.0", + "tslib": "^1.14.1", + "type-check": "^0.4.0", + "type-fest": "^0.8.1", + "type-is": "^1.6.18", + "typedarray-to-buffer": "^3.1.5", + "undefsafe": "^2.0.3", + "unique-string": "^2.0.0", + "unpipe": "^1.0.0", + "update-notifier": "^4.1.3", + "uri-js": "^4.4.0", + "url-parse-lax": "^3.0.0", + "util-deprecate": "^1.0.2", + "utils-merge": "^1.0.1", + "v8-compile-cache": "^2.1.1", + "validate-npm-package-license": "^3.0.4", + "vary": "^1.1.2", + "which": "^2.0.2", + "which-pm-runs": "^1.0.0", + "widest-line": "^3.1.0", + "word-wrap": "^1.2.3", + "wrap-ansi": "^6.2.0", + "wrappy": "^1.0.2", + "write": "^1.0.3", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^4.0.0", + "yaml": "^1.10.0" }, "devDependencies": { - "nodemon": "^2.0.4" + "babel-eslint": "^10.1.0", + "eslint": "^7.11.0", + "eslint-config-airbnb": "^18.2.0", + "eslint-config-prettier": "^6.13.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-react": "^7.21.4", + "eslint-plugin-react-hooks": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^1.3.0", + "husky": "^4.3.0", + "lint-staged": "^10.4.2", + "nodemon": "^2.0.4", + "prettier": "2.1.2" } } diff --git a/src/index.js b/src/index.js index 6afa0b5..7d410a9 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,6 @@ const app = express(); const morgan = require('morgan'); const mongoose = require('mongoose'); - const authRoutes = require('./routes/authRoutes'); const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index c81745f..0000000 --- a/yarn.lock +++ /dev/null @@ -1,1356 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@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/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -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-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -basic-auth@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== - dependencies: - safe-buffer "5.1.2" - -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - -bl@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" - integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -bluebird@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== - -body-parser@1.19.0, body-parser@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -bson@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.5.tgz#2aaae98fcdf6750c0848b0cba1ddec3c73060a34" - integrity sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg== - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -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" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.2.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -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" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -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" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -denque@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" - integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.1.0: - 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" - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -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.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== - dependencies: - ini "^1.3.5" - -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.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -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== - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inherits@2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.1: - 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-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= - -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: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -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= - -kareem@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.1.tgz#def12d9c941017fabfb00f873af95e9c99e1be87" - integrity sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw== - -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" - -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" - -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== - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@~2.1.24: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -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== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mongodb@3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.2.tgz#1154a4ac107bf1375112d83a29c5cf97704e96b6" - integrity sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA== - dependencies: - bl "^2.2.1" - bson "^1.1.4" - denque "^1.4.1" - require_optional "^1.0.1" - safe-buffer "^5.1.2" - optionalDependencies: - saslprep "^1.0.0" - -mongoose-legacy-pluralize@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" - integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== - -mongoose@^5.10.5: - version "5.10.5" - resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.10.5.tgz#47bef488d1fd39ab9c93ab05a9b6d0b08fd8c662" - integrity sha512-BOQZsZn9Y79f3rWZFLD1gvOLNN5gOiGvGr5raqQ5v/T4fdAmnjXGCVynpW4SRnQLtrcCeLXyaaXVRT75863Q0w== - dependencies: - bson "^1.1.4" - kareem "2.3.1" - mongodb "3.6.2" - mongoose-legacy-pluralize "1.0.2" - mpath "0.7.0" - mquery "3.2.2" - ms "2.1.2" - regexp-clone "1.0.0" - safe-buffer "5.2.1" - sift "7.0.1" - sliced "1.0.1" - -morgan@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" - integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== - dependencies: - basic-auth "~2.0.1" - debug "2.6.9" - depd "~2.0.0" - on-finished "~2.3.0" - on-headers "~1.0.2" - -mpath@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.7.0.tgz#20e8102e276b71709d6e07e9f8d4d0f641afbfb8" - integrity sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg== - -mquery@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.2.tgz#e1383a3951852ce23e37f619a9b350f1fb3664e7" - integrity sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q== - dependencies: - bluebird "3.5.1" - debug "3.1.0" - regexp-clone "^1.0.0" - safe-buffer "5.1.2" - sliced "1.0.1" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -nodemon@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.4.tgz#55b09319eb488d6394aa9818148c0c2d1c04c416" - integrity sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ== - dependencies: - chokidar "^3.2.2" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.2" - update-notifier "^4.0.0" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -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== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -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== - -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" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -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= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -pstree.remy@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pupa@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" - integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== - dependencies: - escape-goat "^2.0.0" - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -readable-stream@^2.3.5: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - -regexp-clone@1.0.0, regexp-clone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" - integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== - -registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== - dependencies: - rc "^1.2.8" - -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" - -require_optional@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" - integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== - dependencies: - resolve-from "^2.0.0" - semver "^5.1.0" - -resolve-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" - integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= - -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" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -saslprep@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver@^5.1.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.0.0, 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== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sift@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08" - integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g== - -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -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= - -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" - integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= - dependencies: - memory-pager "^1.0.2" - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -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== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - -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@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - 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" - -undefsafe@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" - integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== - dependencies: - debug "^2.2.0" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -update-notifier@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.1.tgz#895fc8562bbe666179500f9f2cebac4f26323746" - integrity sha512-9y+Kds0+LoLG6yN802wVXoIfxYEwh3FlZwzMwpCZp62S2i1/Jzeqb9Eeeju3NSHccGGasfGlK5/vEHbAifYRDg== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -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" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== From 55b0fb59ffdbc1b86b3513a059bae703c537e671 Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Tue, 20 Oct 2020 01:42:25 -0300 Subject: [PATCH 067/147] Create .stickler.yml --- .stickler.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .stickler.yml diff --git a/.stickler.yml b/.stickler.yml new file mode 100644 index 0000000..216bddc --- /dev/null +++ b/.stickler.yml @@ -0,0 +1,11 @@ +linters: + eslint: + config: './eslint.config' + +files: + ignore: + - 'bower_components/*' + - 'node_modules/*' + +fixers: + enable: true From 2c7a3682e8f5275569537e5948b0c6ed97fc47d1 Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Tue, 20 Oct 2020 01:43:25 -0300 Subject: [PATCH 068/147] Update .stickler.yml --- .stickler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stickler.yml b/.stickler.yml index 216bddc..32c9168 100644 --- a/.stickler.yml +++ b/.stickler.yml @@ -1,6 +1,6 @@ linters: eslint: - config: './eslint.config' + config: './.eslintrc.json' files: ignore: From 550f9d4016b36c746644bb1580b1219dea1e8835 Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Tue, 20 Oct 2020 02:06:17 -0300 Subject: [PATCH 069/147] fixing .eslintrc (using very useful script in here -> https://github.com/paulolramos/eslint-prettier-airbnb-react) --- .eslintrc.json | 61 +- .prettierrc.json | 5 + package-lock.json | 2803 +++++++++++++++++++++++++---------- package.json | 226 +-- src/index.js | 27 +- src/models/Comment.js | 50 +- src/models/Plant.js | 111 +- src/models/Topic.js | 69 +- src/models/User.js | 41 +- src/routes/auth.js | 51 +- src/routes/authRoutes.js | 99 +- src/routes/commentRoutes.js | 136 +- src/routes/plantRoutes.js | 198 ++- src/routes/topicRoutes.js | 182 ++- src/schemas/topicSchema.js | 4 +- src/schemas/userSchema.js | 12 +- 16 files changed, 2689 insertions(+), 1386 deletions(-) create mode 100644 .prettierrc.json diff --git a/.eslintrc.json b/.eslintrc.json index 2a0e12c..38be060 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,33 +1,32 @@ { - "extends": [ - "airbnb", - "prettier", - "prettier/react", - "plugin:prettier/recommended", - "eslint-config-prettier" - ], - "parser": "babel-eslint", - "rules": { - "import/no-unresolved": "off", - "react/jsx-filename-extension": [ - 1, - { - "extensions": [ - ".js", - ".jsx" - ] - } - ], - "prettier/prettier": [ - "error", - { - "trailingComma": "es5", - "singleQuote": true, - "printWidth": 100 - } - ] - }, - "plugins": [ - "prettier" + "extends": [ + "airbnb", + "plugin:prettier/recommended", + "prettier/react" + ], + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "jest": true, + "node": true + }, + "rules": { + "jsx-a11y/href-no-hash": ["off"], + "react/jsx-filename-extension": ["warn", { "extensions": [".js", ".jsx"] }], + "max-len": [ + "warn", + { + "code": 80, + "tabWidth": 2, + "comments": 80, + "ignoreComments": false, + "ignoreTrailingComments": true, + "ignoreUrls": true, + "ignoreStrings": true, + "ignoreTemplateLiterals": true, + "ignoreRegExpLiterals": true + } ] -} \ No newline at end of file + } +} diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..11d9d42 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,5 @@ +{ + "printWidth": 80, + "singleQuote": true, + "trailingComma": "es5" +} diff --git a/package-lock.json b/package-lock.json index 423614e..d26bd23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,20 @@ "@babel/types": "^7.12.1", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, "@babel/helper-function-name": { @@ -83,6 +97,21 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "color-convert": { @@ -97,6 +126,16 @@ "version": "1.1.3", "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" } } }, @@ -151,26 +190,11 @@ "lodash": "^4.17.19" }, "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz", "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -183,6 +207,14 @@ "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } } }, "@eslint/eslintrc": { @@ -203,14 +235,26 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "requires": { - "ms": "2.1.2" + "type-fest": "^0.8.1" } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, @@ -246,16 +290,27 @@ } }, "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz", + "integrity": "sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==" }, "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@types/cacheable-request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", + "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", "requires": { - "defer-to-connect": "^1.0.1" + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" } }, "@types/color-name": { @@ -263,16 +318,47 @@ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" }, + "@types/http-cache-semantics": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", + "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==" + }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" }, + "@types/keyv": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", + "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "14.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", + "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -288,15 +374,23 @@ } }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", + "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==" }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" }, + "add-filename-increment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-filename-increment/-/add-filename-increment-1.0.0.tgz", + "integrity": "sha512-pFV8VZX8jxuVMIycKvGZkWF/ihnUubu9lbQVnOnZWp7noVxbKQTNj7zG2y9fXdPcuZ6lAN3Drr517HaivGCjdQ==", + "requires": { + "strip-filename-increment": "^2.0.1" + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -304,6 +398,13 @@ "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" + }, + "dependencies": { + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + } } }, "ajv": { @@ -315,6 +416,13 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "dependencies": { + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } } }, "ansi-align": { @@ -403,12 +511,9 @@ } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "aria-query": { "version": "4.2.2", @@ -420,9 +525,9 @@ } }, "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" }, "array-includes": { "version": "3.1.1", @@ -524,9 +629,9 @@ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "axe-core": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", - "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.0.2.tgz", + "integrity": "sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA==" }, "axobject-query": { "version": "2.2.0", @@ -545,6 +650,14 @@ "@babel/types": "^7.7.0", "eslint-visitor-keys": "^1.0.0", "resolve": "^1.12.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "balanced-match": { @@ -552,12 +665,24 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "binary-extensions": { @@ -566,25 +691,19 @@ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { "version": "1.19.0", @@ -601,6 +720,77 @@ "qs": "6.7.0", "raw-body": "2.4.0", "type-is": "~1.6.17" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } } }, "boxen": { @@ -627,6 +817,11 @@ "color-convert": "^2.0.1" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -661,16 +856,20 @@ "requires": { "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.0.tgz", + "integrity": "sha512-A4GHY1GpcTnp+Elcwp1CbKHY6ZQwwVR7QdjZk4fPetEh7oNBfICu+eLvvVvTEMHgC+SGn+XiLAgGo0MnPPBGOg==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "braces": { @@ -682,9 +881,21 @@ } }, "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.2.0.tgz", + "integrity": "sha512-c3MlJqdROnCRvDr/+MLfaDvQ7CvGI4p1hKX45/fvgzSwKRdOjsfRug1NJJ8ty5mXCNtUdjJEWzoZWcBQxV4TyA==", + "requires": { + "buffer": "^5.6.0" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } }, "buffer-equal-constant-time": { "version": "1.0.1", @@ -696,18 +907,23 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "cacheable-lookup": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", + "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==" + }, "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", + "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "responselike": "^2.0.0" }, "dependencies": { "get-stream": { @@ -718,10 +934,10 @@ "pump": "^3.0.0" } }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" } } }, @@ -731,9 +947,9 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", + "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" }, "chalk": { "version": "4.1.0", @@ -760,9 +976,9 @@ } }, "chardet": { - "version": "0.7.0", - "resolved": "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.3.0.tgz", + "integrity": "sha512-cyTQGGptIjIT+CMGT5J/0l9c6Fb+565GCFjjeUTKxUO7w3oR+FcNCMEKTn5xtVKaLFmladN7QF68IiQsv5Fbdw==" }, "chokidar": { "version": "3.4.3", @@ -785,9 +1001,12 @@ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", + "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", + "requires": { + "escape-string-regexp": "4.0.0" + } }, "cli-boxes": { "version": "2.2.1", @@ -865,6 +1084,13 @@ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "requires": { "mimic-response": "^1.0.0" + }, + "dependencies": { + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + } } }, "color-convert": { @@ -906,6 +1132,16 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + } } }, "confusing-browser-globals": { @@ -914,9 +1150,23 @@ "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" }, "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-1.0.0.tgz", + "integrity": "sha1-NFizMhhWA+ju0Y9RjUoQiIo6vJE=", + "requires": { + "normalize-path": "^2.1.1", + "path-starts-with": "^1.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } }, "content-disposition": { "version": "0.5.3", @@ -924,6 +1174,13 @@ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "content-type": { @@ -932,14 +1189,14 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.1.0.tgz", + "integrity": "sha512-Alvs19Vgq07eunykd3Xy2jF0/qSNv2u7KDbAek9H5liV1UMijbqFs5cycZvv5dVsvseT/U4H8/7/w8Koh35C4A==" }, "core-js-pure": { "version": "3.6.5", @@ -992,9 +1249,19 @@ } }, "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.3.0.tgz", + "integrity": "sha512-teWAwfMb1d6brahYyKqcBEb5Yp8PJPvPOdOonXDnvaKOTmKDFNVE8E3Y2XQuzjNV/3XMwHbrX9fHWvrhRKt4Gg==", + "requires": { + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } }, "damerau-levenshtein": { "version": "1.0.6", @@ -1002,26 +1269,19 @@ "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "ms": "2.1.2" } }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" } }, "dedent": { @@ -1040,9 +1300,9 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", + "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==" }, "define-properties": { "version": "1.1.3", @@ -1058,9 +1318,9 @@ "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" }, "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { "version": "1.0.4", @@ -1068,27 +1328,19 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "^2.0.2" } }, "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.0.tgz", + "integrity": "sha512-xCbB8IN3IT+tdgoEPOnJmYTNJDrygGFOmiQEiVa5eAD+JEB1vTgMNhVGRnN5Eex/6amck7cdcrixb1qN9Go+GQ==", "requires": { "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } } }, "dotenv": { @@ -1122,9 +1374,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.1.1.tgz", + "integrity": "sha512-AaWyDiNO9rbtMIcGl7tdxMcNu8SOLaDLxmQEFT5JhgKufOJzPPkYmgN2QwqTgw4doWMZZQttC6sUWVQjb+1VdA==" }, "encodeurl": { "version": "1.0.2", @@ -1153,6 +1405,13 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + } } }, "es-abstract": { @@ -1184,9 +1443,9 @@ } }, "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==" }, "escape-html": { "version": "1.0.3", @@ -1194,9 +1453,9 @@ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { "version": "7.11.0", @@ -1243,41 +1502,125 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "ms": "2.1.2" + "color-convert": "^1.9.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "esutils": "^2.0.2" + "color-name": "1.1.3" } }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true - } - } - }, - "eslint-config-airbnb": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz", + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "eslint-config-airbnb": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz", "integrity": "sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg==", "dev": true, "requires": { @@ -1314,6 +1657,23 @@ "requires": { "debug": "^2.6.9", "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "eslint-module-utils": { @@ -1326,6 +1686,61 @@ "pkg-dir": "^2.0.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "pkg-dir": { "version": "2.0.0", "resolved": "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -1333,6 +1748,17 @@ "dev": true, "requires": { "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + } } } } @@ -1358,6 +1784,21 @@ "tsconfig-paths": "^3.9.0" }, "dependencies": { + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", @@ -1367,6 +1808,154 @@ "esutils": "^2.0.2", "isarray": "^1.0.0" } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true } } }, @@ -1389,11 +1978,21 @@ "language-tags": "^1.0.5" }, "dependencies": { - "emoji-regex": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.1.1.tgz", - "integrity": "sha512-AaWyDiNO9rbtMIcGl7tdxMcNu8SOLaDLxmQEFT5JhgKufOJzPPkYmgN2QwqTgw4doWMZZQttC6sUWVQjb+1VdA==", + "axe-core": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", + "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", "dev": true + }, + "jsx-ast-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", + "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.0" + } } } }, @@ -1407,9 +2006,9 @@ } }, "eslint-plugin-react": { - "version": "7.21.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz", - "integrity": "sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg==", + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", "dev": true, "requires": { "array-includes": "^3.1.1", @@ -1421,7 +2020,7 @@ "object.fromentries": "^2.0.2", "object.values": "^1.1.1", "prop-types": "^15.7.2", - "resolve": "^1.17.0", + "resolve": "^1.18.1", "string.prototype.matchall": "^4.0.2" }, "dependencies": { @@ -1433,23 +2032,13 @@ "requires": { "esutils": "^2.0.2" } - }, - "jsx-ast-utils": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", - "integrity": "sha1-ZC8de4iqbX652PIhDhZkeERPqJE= sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.1" - } } } }, "eslint-plugin-react-hooks": { - "version": "4.0.0", - "resolved": "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.0.tgz", - "integrity": "sha1-gRlrmQBDzeM54lxmYq7r4yrFLQE= sha512-YKBY+kilK5wrwIdQnCF395Ya6nDro3EAMoe+2xFkmyklyhF16fH83TrQOo9zbZIDxBsXFgBbywta/0JKRNFDkw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.2.tgz", + "integrity": "sha512-ykUeqkGyUGgwTtk78C0o8UG2fzwmgJ0qxBGPp2WqRKsTwcLuVf01kTDRAtOsd4u6whX2XOC8749n2vPydP82fg==", "dev": true }, "eslint-scope": { @@ -1477,12 +2066,21 @@ "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true }, "espree": { "version": "7.3.0", @@ -1492,6 +2090,18 @@ "acorn": "^7.4.0", "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + } } }, "esprima": { @@ -1567,6 +2177,11 @@ "requires": { "pump": "^3.0.0" } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" } } }, @@ -1605,6 +2220,66 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } } }, "external-editor": { @@ -1615,6 +2290,29 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" + }, + "dependencies": { + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + } } }, "fast-deep-equal": { @@ -1634,9 +2332,17 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "requires": { + "fastest-levenshtein": "^1.0.7" + } + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==" }, "figures": { "version": "3.2.0", @@ -1644,6 +2350,13 @@ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + } } }, "file-entry-cache": { @@ -1674,14 +2387,35 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } } }, "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { - "locate-path": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, "find-versions": { @@ -1690,6 +2424,13 @@ "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", "requires": { "semver-regex": "^2.0.0" + }, + "dependencies": { + "semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + } } }, "flat-cache": { @@ -1700,12 +2441,43 @@ "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" + }, + "dependencies": { + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "requires": { + "glob": "^7.1.3" + } + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "requires": { + "mkdirp": "^0.5.1" + } + } } }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", + "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==" }, "forwarded": { "version": "0.1.2", @@ -1750,12 +2522,9 @@ "dev": true }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==" }, "glob": { "version": "7.1.6", @@ -1787,41 +2556,38 @@ } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.2.0.tgz", + "integrity": "sha512-OjvFbGDlR7aIsLqFrraxoqIP3bb+wgp+Aarel5S56lwS3se4uUrwKkChnv1MqsMIv/Opexbmu7qCfHL9T0mBEg==", "requires": { "type-fest": "^0.8.1" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@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" }, "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU= sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, + "got": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/got/-/got-11.7.0.tgz", + "integrity": "sha512-7en2XwH2MEqOsrK0xaKhbWibBoZqy+f1RSUoIeF1BLcnf+pyQdDsljWMfmOh+QKJwuvDIiKx38GtPh5wFdGGjg==", + "requires": { + "@sindresorhus/is": "^3.1.1", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -1836,9 +2602,9 @@ } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-symbols": { "version": "1.0.1", @@ -1851,9 +2617,12 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", + "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, "http-cache-semantics": { "version": "4.1.0", @@ -1861,28 +2630,42 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", + "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, + "http2-wrapper": { + "version": "1.0.0-beta.5.2", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", + "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "husky": { "version": "4.3.0", @@ -2012,22 +2795,27 @@ } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.0.0.tgz", + "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==" }, "import-fresh": { "version": "3.2.1", @@ -2038,6 +2826,14 @@ "resolve-from": "^4.0.0" }, "dependencies": { + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2046,9 +2842,9 @@ } }, "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" }, "imurmurhash": { "version": "0.1.4", @@ -2130,14 +2926,14 @@ } }, "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz", + "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==" }, "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-binary-path": { "version": "2.1.0", @@ -2206,9 +3002,9 @@ "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" }, "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" }, "is-number": { "version": "7.0.0", @@ -2216,9 +3012,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-path-inside": { "version": "3.0.2", @@ -2234,9 +3030,9 @@ } }, "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==" }, "is-stream": { "version": "2.0.0", @@ -2267,9 +3063,9 @@ "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "isexe": { "version": "2.0.0", @@ -2289,9 +3085,9 @@ } }, "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-6.0.0.tgz", + "integrity": "sha512-QJUTLeNZNFl/w4MmhHztb1I1UzV42KV/L/zNwNVGlCNc+zl8g01Nve0hPDGU+j2N7ctFZdLot49lUSi78L7WGg==" }, "js-yaml": { "version": "3.14.0", @@ -2300,17 +3096,32 @@ "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + } } }, "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.1.tgz", + "integrity": "sha512-w+MMxnByppM4jwskitZotEtvtO3a2C7WOz31NxJToGisHuysCAQQU7umb/pA/6soPFe8LGjXFEFbuPuLEPm7Ag==" }, "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -2318,9 +3129,9 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.5.0.tgz", + "integrity": "sha512-x+TRJIQFskrNnFKE2Viz9FCSjK1vIh+H/uaBiOYszh/IcZmAFneQ35H4osWDJp1NPXccuV2I0RMXmi2ZS6Kqcg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -2328,11 +3139,11 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "jsonwebtoken": { @@ -2352,53 +3163,63 @@ "semver": "^5.6.0" }, "dependencies": { + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" } } }, "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", + "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", "requires": { "array-includes": "^3.1.1", - "object.assign": "^4.1.0" + "object.assign": "^4.1.1" } }, "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "requires": { - "jwa": "^1.4.1", + "jwa": "^2.0.0", "safe-buffer": "^5.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "kareem": { @@ -2407,11 +3228,11 @@ "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" }, "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", "requires": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, "language-subtag-registry": { @@ -2521,6 +3342,22 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "listr2": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz", + "integrity": "sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.2", + "through": "^2.3.8" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2539,9 +3376,9 @@ } }, "listr2": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz", - "integrity": "sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.1.1.tgz", + "integrity": "sha512-5HjYFP0FpG2dOuSAth2vQ172rWqI78746itLIvgg0KjHMAyW8CVNc9wzBzEo4/5UYfNbmT28u0J29NoA3W0z+Q==", "requires": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", @@ -2549,83 +3386,34 @@ "indent-string": "^4.0.0", "log-update": "^4.0.0", "p-map": "^4.0.0", - "rxjs": "^6.6.2", + "rxjs": "^6.6.3", "through": "^2.3.8" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" }, "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" } } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" } }, "lodash": { @@ -2772,6 +3560,16 @@ "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } } } }, @@ -2781,12 +3579,27 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + } } }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } }, "make-dir": { "version": "3.1.0", @@ -2804,9 +3617,9 @@ } }, "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" }, "memory-pager": { "version": "1.5.0", @@ -2838,14 +3651,14 @@ } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" }, "mime-types": { "version": "2.1.27", @@ -2853,17 +3666,24 @@ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { "mime-db": "1.44.0" + }, + "dependencies": { + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + } } }, "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" }, "minimatch": { "version": "3.0.4", @@ -2871,6 +3691,17 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + } } }, "minimist": { @@ -2879,12 +3710,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mongodb": { "version": "3.6.2", @@ -2899,17 +3727,72 @@ "saslprep": "^1.0.0" }, "dependencies": { + "bl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "bson": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } } } }, "mongoose": { - "version": "5.10.5", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.5.tgz", - "integrity": "sha512-BOQZsZn9Y79f3rWZFLD1gvOLNN5gOiGvGr5raqQ5v/T4fdAmnjXGCVynpW4SRnQLtrcCeLXyaaXVRT75863Q0w==", + "version": "5.10.9", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.9.tgz", + "integrity": "sha512-7dkr1d6Uyk87hELzoc6B7Zo7kkPTx8rKummk51Y0je2V2Ttsw0KFPwTp1G8JIbBta7Wpw8j15PJi0d33Ode2nw==", "requires": { "bson": "^1.1.4", "kareem": "2.3.1", @@ -2924,15 +3807,15 @@ "sliced": "1.0.1" }, "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "bson": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" } } }, @@ -2953,10 +3836,23 @@ "on-headers": "~1.0.2" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -2977,6 +3873,11 @@ "sliced": "1.0.1" }, "dependencies": { + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -2989,6 +3890,11 @@ "version": "2.0.0", "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -3013,9 +3919,9 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "nodemon": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", - "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz", + "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==", "dev": true, "requires": { "chokidar": "^3.2.2", @@ -3026,10 +3932,37 @@ "semver": "^5.7.1", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^4.0.0" + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" }, "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -3039,30 +3972,84 @@ "ms": "^2.1.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } } } }, "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { "abbrev": "1" } }, "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", + "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", + "hosted-git-info": "^3.0.6", + "resolve": "^1.17.0", + "semver": "^7.3.2", "validate-npm-package-license": "^3.0.1" } }, @@ -3072,9 +4059,9 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-5.3.0.tgz", + "integrity": "sha512-9/nOVLYYe/dO/eJeQUNaGUF4m4Z5E7cb9oNTKabH+bNf19mqj60txTcveQxL0GlcWLXCxkOu2/LwL8oW0idIDA==" }, "npm-run-path": { "version": "4.0.1", @@ -3250,6 +4237,13 @@ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + } } }, "opencollective-postinstall": { @@ -3268,6 +4262,13 @@ "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.3" + }, + "dependencies": { + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + } } }, "os-tmpdir": { @@ -3276,24 +4277,24 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", + "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { - "p-limit": "^1.1.0" + "p-limit": "^3.0.2" } }, "p-map": { @@ -3305,9 +4306,9 @@ } }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "package-json": { "version": "6.5.0", @@ -3320,19 +4321,159 @@ "semver": "^6.2.0" }, "dependencies": { + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "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" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@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" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } } } }, "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", + "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", "requires": { - "callsites": "^3.0.0" + "callsites": "^3.1.0" } }, "parse-json": { @@ -3352,9 +4493,9 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -3371,10 +4512,28 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, + "path-starts-with": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-starts-with/-/path-starts-with-1.0.0.tgz", + "integrity": "sha1-soJDAV6LE43lcmgqxS2kLmRq2E4=", + "requires": { + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", + "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" }, "path-type": { "version": "4.0.0", @@ -3387,61 +4546,16 @@ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" }, "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - } + "find-up": "^5.0.0" } }, "please-upgrade-node": { @@ -3458,9 +4572,9 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", + "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==" }, "prettier": { "version": "2.1.2", @@ -3504,6 +4618,13 @@ "requires": { "forwarded": "~0.1.2", "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + } } }, "pstree.remy": { @@ -3531,12 +4652,24 @@ "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", "requires": { "escape-goat": "^2.0.0" + }, + "dependencies": { + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + } } }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.9.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, "range-parser": { "version": "1.2.1", @@ -3544,14 +4677,51 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", + "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", "requires": { "bytes": "3.1.0", - "http-errors": "1.7.2", + "http-errors": "1.7.3", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } } }, "rc": { @@ -3578,46 +4748,102 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { - "pify": "^2.0.0" + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { @@ -3688,6 +4914,11 @@ "rc": "^1.2.8" } }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -3695,6 +4926,18 @@ "requires": { "resolve-from": "^2.0.0", "semver": "^5.1.0" + }, + "dependencies": { + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, "resolve": { @@ -3706,17 +4949,22 @@ "path-parse": "^1.0.6" } }, + "resolve-alpn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", + "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==" + }, "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "requires": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" } }, "restore-cursor": { @@ -3729,9 +4977,9 @@ } }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } @@ -3747,12 +4995,19 @@ "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", "requires": { "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -3768,9 +5023,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" }, "semver-compare": { "version": "1.0.0", @@ -3793,9 +5048,9 @@ } }, "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.1.tgz", + "integrity": "sha512-3dPcmFqxblWB/cppQ2qXWqlp9b6GLgAS032+Ec5E0waDVHTkwYIL+7BFI9UqEe0tkoHle2f3pBgvT/Xl95+Dig==" }, "send": { "version": "0.17.1", @@ -3817,6 +5072,26 @@ "statuses": "~1.5.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz", @@ -3827,12 +5102,29 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + } } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -3848,9 +5140,9 @@ } }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "shebang-command": { "version": "2.0.0", @@ -3896,9 +5188,9 @@ } }, "sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + "version": "13.3.5", + "resolved": "https://registry.npmjs.org/sift/-/sift-13.3.5.tgz", + "integrity": "sha512-apSwBXO0Xpl7zGb26xwq7KGre9/WwyzMxUv0zmI6mLpDJQGOX+CynBgKDaSrn+AXuAuiS4orQo1ty6bU+OEN/Q==" }, "signal-exit": { "version": "3.0.3", @@ -3911,46 +5203,13 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k= sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - } + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "sliced": { @@ -3959,9 +5218,9 @@ "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" }, "sparse-bitfield": { "version": "3.0.3", @@ -4000,14 +5259,14 @@ "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" }, "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.0.tgz", + "integrity": "sha512-w9jNUUQdpuVoYqXxnyOakhckBbOxRaoYqJscyIBYCS5ixyCnO7nQn7zBZvP9zf5QOPZcz2DLUpE3KsNPbJBOFA==" }, "string-argv": { "version": "0.3.1", @@ -4141,11 +5400,11 @@ } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "stringify-object": { @@ -4162,6 +5421,11 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" } } }, @@ -4174,9 +5438,14 @@ } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + }, + "strip-filename-increment": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-filename-increment/-/strip-filename-increment-2.0.1.tgz", + "integrity": "sha512-+v5xsiTTsdYqkPj7qz1zlngIsjZedhHDi3xp/9bMurV8kXe9DAr732gNVqtt4X8sI3hOqS3nlFfps5gyVcux6w==" }, "strip-final-newline": { "version": "2.0.0", @@ -4189,57 +5458,22 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.3.tgz", + "integrity": "sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==", "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } + "ajv": "^6.12.4", + "lodash": "^4.17.20", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" } }, "term-size": { @@ -4258,22 +5492,22 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "tmp": { - "version": "0.0.33", - "resolved": "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "requires": { - "os-tmpdir": "~1.0.2" + "rimraf": "^3.0.0" } }, "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-3.0.1.tgz", + "integrity": "sha512-/wtNi1tW1F3nf0OL6AqVxGw9Tr1ET70InMhJuVxPwFdGqparF0nQ4UWGLf2DsoI2bFDtthlBnALncZpUzOnsUw==" }, "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", + "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" }, "to-regex-range": { "version": "5.0.1", @@ -4294,6 +5528,16 @@ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "requires": { "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + } } }, "tsconfig-paths": { @@ -4305,12 +5549,27 @@ "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" }, "type-check": { "version": "0.4.0", @@ -4321,9 +5580,9 @@ } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.0.tgz", + "integrity": "sha512-fbDukFPnJBdn2eZ3RR+5mK2slHLFd6gYHY7jna1KWWy4Yr4XysHuCdXRzy+RiG/HwG4WJat00vdC2UHky5eKiQ==" }, "type-is": { "version": "1.6.18", @@ -4332,6 +5591,13 @@ "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "dependencies": { + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + } } }, "typedarray-to-buffer": { @@ -4348,6 +5614,21 @@ "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", "requires": { "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "unique-string": { @@ -4356,6 +5637,13 @@ "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { "crypto-random-string": "^2.0.0" + }, + "dependencies": { + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + } } }, "unpipe": { @@ -4364,46 +5652,30 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", + "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", "requires": { "boxen": "^4.2.0", - "chalk": "^3.0.0", + "chalk": "^4.1.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", + "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", "latest-version": "^5.0.0", "pupa": "^2.0.1", + "semver": "^7.3.2", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" } } }, @@ -4416,11 +5688,11 @@ } }, "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-4.0.0.tgz", + "integrity": "sha512-CazaJJZUPr1EWmHjcntgS1F1q6YOpQROD6Z+aTb9obxgOFsRydnqYkRCh5xDJ3LhqTID46JrWaT7PsF7Oms0PA==", "requires": { - "prepend-http": "^2.0.0" + "prepend-http": "^3.0.1" } }, "util-deprecate": { @@ -4479,49 +5751,13 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "wrappy": { @@ -4530,11 +5766,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/write/-/write-2.0.0.tgz", + "integrity": "sha512-yam9TAqN8sAZokECAejo9HpT2j2s39OgK8i8yxadrFBVo+iSWLfnipRVFulfAw1d2dz5vSuGmlMHYRKG4fysOA==", "requires": { - "mkdirp": "^0.5.1" + "add-filename-increment": "^1.0.0" } }, "write-file-atomic": { @@ -4553,6 +5789,11 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "yaml": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", diff --git a/package.json b/package.json index d363a91..47d437f 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "dependencies": { "abbrev": "^1.1.1", "accepts": "^1.3.7", - "acorn": "^7.4.1", + "acorn": "^8.0.4", "acorn-jsx": "^5.3.1", "aggregate-error": "^3.1.0", "ajv": "^6.12.6", @@ -38,36 +38,36 @@ "ansi-regex": "^5.0.0", "ansi-styles": "^4.3.0", "anymatch": "^3.1.1", - "argparse": "^1.0.10", + "argparse": "^2.0.1", "aria-query": "^4.2.2", - "array-flatten": "^1.1.1", + "array-flatten": "^3.0.0", "array-includes": "^3.1.1", "array.prototype.flat": "^1.2.3", "array.prototype.flatmap": "^1.2.3", "ast-types-flow": "^0.0.7", "astral-regex": "^2.0.0", - "axe-core": "^3.5.5", + "axe-core": "^4.0.2", "axobject-query": "^2.2.0", "balanced-match": "^1.0.0", "basic-auth": "^2.0.1", "binary-extensions": "^2.1.0", - "bl": "^2.2.1", - "bluebird": "^3.5.1", + "bl": "^4.0.3", + "bluebird": "^3.7.2", "body-parser": "^1.19.0", "boxen": "^4.2.0", - "brace-expansion": "^1.1.11", + "brace-expansion": "^2.0.0", "braces": "^3.0.2", - "bson": "^1.1.5", + "bson": "^4.2.0", "buffer-equal-constant-time": "^1.0.1", "bytes": "^3.1.0", - "cacheable-request": "^6.1.0", + "cacheable-request": "^7.0.1", "callsites": "^3.1.0", - "camelcase": "^5.3.1", + "camelcase": "^6.1.0", "chalk": "^4.1.0", - "chardet": "^0.7.0", + "chardet": "^1.3.0", "chokidar": "^3.4.3", "ci-info": "^2.0.0", - "clean-stack": "^2.2.0", + "clean-stack": "^3.0.0", "cli-boxes": "^2.2.1", "cli-cursor": "^3.1.0", "cli-truncate": "^2.1.0", @@ -80,43 +80,43 @@ "concat-map": "^0.0.1", "configstore": "^5.0.1", "confusing-browser-globals": "^1.0.9", - "contains-path": "^0.1.0", + "contains-path": "^1.0.0", "content-disposition": "^0.5.3", "content-type": "^1.0.4", - "cookie": "^0.4.0", - "cookie-signature": "^1.0.6", + "cookie": "^0.4.1", + "cookie-signature": "^1.1.0", "core-js-pure": "^3.6.5", "cosmiconfig": "^7.0.0", "core-util-is": "^1.0.2", "cross-spawn": "^7.0.3", - "crypto-random-string": "^2.0.0", + "crypto-random-string": "^3.3.0", "damerau-levenshtein": "^1.0.6", - "debug": "^2.6.9", - "decompress-response": "^3.3.0", + "debug": "^4.2.0", + "decompress-response": "^6.0.0", "dedent": "^0.7.0", "deep-extend": "^0.6.0", "deep-is": "^0.1.3", - "defer-to-connect": "^1.1.3", + "defer-to-connect": "^2.0.0", "define-properties": "^1.1.3", "denque": "^1.4.1", - "depd": "^1.1.2", + "depd": "^2.0.0", "destroy": "^1.0.4", - "doctrine": "^1.5.0", - "dot-prop": "^5.3.0", + "doctrine": "^3.0.0", + "dot-prop": "^6.0.0", "dotenv": "^8.2.0", "duplexer3": "^0.1.4", "ecdsa-sig-formatter": "^1.0.11", "ee-first": "^1.1.1", - "emoji-regex": "^8.0.0", + "emoji-regex": "^9.1.1", "encodeurl": "^1.0.2", "end-of-stream": "^1.4.4", "enquirer": "^2.3.6", "error-ex": "^1.3.2", "es-abstract": "^1.17.7", "es-to-primitive": "^1.2.1", - "escape-goat": "^2.1.1", + "escape-goat": "^3.0.0", "escape-html": "^1.0.3", - "escape-string-regexp": "^1.0.5", + "escape-string-regexp": "^4.0.0", "espree": "^7.3.0", "esprima": "^4.0.1", "esquery": "^1.3.1", @@ -129,41 +129,41 @@ "external-editor": "^3.1.0", "fast-deep-equal": "^3.1.3", "fast-json-stable-stringify": "^2.1.0", - "fast-levenshtein": "^2.0.6", + "fast-levenshtein": "^3.0.0", "figures": "^3.2.0", "file-entry-cache": "^5.0.1", "fill-range": "^7.0.1", "finalhandler": "^1.1.2", - "find-up": "^2.1.0", + "find-up": "^5.0.0", "find-versions": "^3.2.0", "flat-cache": "^2.0.1", - "flatted": "^2.0.2", + "flatted": "^3.1.0", "forwarded": "^0.1.2", "fresh": "^0.5.2", "fs.realpath": "^1.0.0", "function-bind": "^1.1.1", "functional-red-black-tree": "^1.0.1", "get-own-enumerable-property-symbols": "^3.0.2", - "get-stream": "^5.2.0", + "get-stream": "^6.0.0", "glob": "^7.1.6", "glob-parent": "^5.1.1", "global-dirs": "^2.0.1", - "globals": "^12.4.0", - "got": "^9.6.0", + "globals": "^13.2.0", + "got": "^11.7.0", "graceful-fs": "^4.2.4", "has": "^1.0.3", - "has-flag": "^3.0.0", + "has-flag": "^4.0.0", "has-yarn": "^2.1.0", "has-symbols": "^1.0.1", - "hosted-git-info": "^2.8.8", + "hosted-git-info": "^3.0.7", "http-cache-semantics": "^4.1.0", - "http-errors": "^1.7.2", - "human-signals": "^1.1.1", - "iconv-lite": "^0.4.24", - "ignore": "^4.0.6", - "ignore-by-default": "^1.0.1", + "http-errors": "^1.8.0", + "human-signals": "^2.1.0", + "iconv-lite": "^0.6.2", + "ignore": "^5.1.8", + "ignore-by-default": "^2.0.0", "import-fresh": "^3.2.1", - "import-lazy": "^2.1.0", + "import-lazy": "^4.0.0", "imurmurhash": "^0.1.4", "indent-string": "^4.0.0", "inflight": "^1.0.6", @@ -171,8 +171,8 @@ "ini": "^1.3.5", "inquirer": "^7.3.3", "internal-slot": "^1.0.2", - "ipaddr.js": "^1.9.1", - "is-arrayish": "^0.2.1", + "ipaddr.js": "^2.0.0", + "is-arrayish": "^0.3.2", "is-binary-path": "^2.1.0", "is-callable": "^1.2.2", "is-ci": "^2.0.0", @@ -183,42 +183,42 @@ "is-glob": "^4.0.1", "is-installed-globally": "^0.3.2", "is-negative-zero": "^2.0.0", - "is-npm": "^4.0.0", + "is-npm": "^5.0.0", "is-number": "^7.0.0", - "is-obj": "^1.0.1", + "is-obj": "^2.0.0", "is-path-inside": "^3.0.2", "is-regex": "^1.1.1", - "is-regexp": "^1.0.0", + "is-regexp": "^2.1.0", "is-stream": "^2.0.0", "is-string": "^1.0.5", "is-symbol": "^1.0.3", "is-typedarray": "^1.0.0", "is-yarn-global": "^0.3.0", - "isarray": "^1.0.0", + "isarray": "^2.0.5", "isexe": "^2.0.0", "joi": "^17.2.1", - "js-tokens": "^4.0.0", + "js-tokens": "^6.0.0", "js-yaml": "^3.14.0", - "jsesc": "^2.5.2", - "json-buffer": "^3.0.0", + "jsesc": "^3.0.1", + "json-buffer": "^3.0.1", "json-parse-even-better-errors": "^2.3.1", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^0.5.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "json5": "^1.0.1", + "json5": "^2.1.3", "jsonwebtoken": "^8.5.1", - "jsx-ast-utils": "^2.4.1", - "jwa": "^1.4.1", - "jws": "^3.2.2", + "jsx-ast-utils": "^3.1.0", + "jwa": "^2.0.0", + "jws": "^4.0.0", "kareem": "^2.3.1", - "keyv": "^3.1.0", + "keyv": "^4.0.3", "language-subtag-registry": "^0.3.20", "language-tags": "^1.0.5", "latest-version": "^5.1.0", "levn": "^0.4.1", "lines-and-columns": "^1.1.6", - "listr2": "^2.6.2", - "load-json-file": "^2.0.0", - "locate-path": "^2.0.0", + "listr2": "^3.1.1", + "load-json-file": "^6.2.0", + "locate-path": "^6.0.0", "lodash": "^4.17.20", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", @@ -230,25 +230,25 @@ "log-update": "^4.0.0", "loose-envify": "^1.4.0", "log-symbols": "^4.0.0", - "lowercase-keys": "^1.0.1", + "lowercase-keys": "^2.0.0", "make-dir": "^3.1.0", - "media-typer": "^0.3.0", + "media-typer": "^1.1.0", "memory-pager": "^1.5.0", "merge-descriptors": "^1.0.1", "merge-stream": "^2.0.0", "methods": "^1.1.2", "micromatch": "^4.0.2", - "mime": "^1.6.0", - "mime-db": "^1.44.0", + "mime": "^2.4.6", + "mime-db": "^1.45.0", "mime-types": "^2.1.27", - "mimic-fn": "^2.1.0", - "mimic-response": "^1.0.1", + "mimic-fn": "^3.1.0", + "mimic-response": "^3.1.0", "minimatch": "^3.0.4", "minimist": "^1.2.5", - "mkdirp": "^0.5.5", + "mkdirp": "^1.0.4", "mongodb": "^3.6.2", "morgan": "^1.10.0", - "mongoose": "^5.10.5", + "mongoose": "^5.10.9", "mongoose-legacy-pluralize": "^1.0.2", "mpath": "^0.7.0", "mquery": "^3.2.2", @@ -256,10 +256,10 @@ "mute-stream": "^0.0.8", "natural-compare": "^1.4.0", "negotiator": "^0.6.2", - "nopt": "^1.0.10", - "normalize-package-data": "^2.5.0", + "nopt": "^5.0.0", + "normalize-package-data": "^3.0.0", "normalize-path": "^3.0.0", - "normalize-url": "^4.5.0", + "normalize-url": "^5.3.0", "npm-run-path": "^4.0.1", "object-assign": "^4.1.1", "object-inspect": "^1.8.0", @@ -275,27 +275,27 @@ "opencollective-postinstall": "^2.0.3", "optionator": "^0.9.1", "os-tmpdir": "^1.0.2", - "p-cancelable": "^1.1.0", - "p-limit": "^1.3.0", - "p-locate": "^2.0.0", + "p-cancelable": "^2.0.0", + "p-limit": "^3.0.2", + "p-locate": "^5.0.0", "p-map": "^4.0.0", - "p-try": "^1.0.0", + "p-try": "^2.2.0", "package-json": "^6.5.0", - "parent-module": "^1.0.1", + "parent-module": "^2.0.0", "parse-json": "^5.1.0", "parseurl": "^1.3.3", - "path-exists": "^3.0.0", + "path-exists": "^4.0.0", "path-is-absolute": "^1.0.1", "path-key": "^3.1.1", "path-parse": "^1.0.6", - "path-to-regexp": "^0.1.7", + "path-to-regexp": "^6.2.0", "path-type": "^4.0.0", "picomatch": "^2.2.2", - "pify": "^2.3.0", - "pkg-dir": "^4.2.0", + "pify": "^5.0.0", + "pkg-dir": "^5.0.0", "please-upgrade-node": "^3.2.0", "prelude-ls": "^1.2.1", - "prepend-http": "^2.0.0", + "prepend-http": "^3.0.1", "process-nextick-args": "^2.0.1", "progress": "^2.0.3", "prop-types": "^15.7.2", @@ -304,14 +304,14 @@ "pump": "^3.0.0", "punycode": "^2.1.1", "pupa": "^2.0.1", - "qs": "^6.7.0", + "qs": "^6.9.4", "range-parser": "^1.2.1", - "raw-body": "^2.4.0", + "raw-body": "^2.4.1", "rc": "^1.2.8", "react-is": "^16.13.1", - "read-pkg": "^2.0.0", - "read-pkg-up": "^2.0.0", - "readable-stream": "^2.3.7", + "read-pkg": "^5.2.0", + "read-pkg-up": "^7.0.1", + "readable-stream": "^3.6.0", "readdirp": "^3.5.0", "regenerator-runtime": "^0.13.7", "regexp-clone": "^1.0.0", @@ -321,72 +321,72 @@ "registry-url": "^5.1.0", "require_optional": "^1.0.1", "resolve": "^1.18.1", - "resolve-from": "^2.0.0", - "responselike": "^1.0.2", + "resolve-from": "^5.0.0", + "responselike": "^2.0.0", "restore-cursor": "^3.1.0", - "rimraf": "^2.6.3", + "rimraf": "^3.0.2", "run-async": "^2.4.1", "rxjs": "^6.6.3", - "safe-buffer": "^5.1.2", + "safe-buffer": "^5.2.1", "safer-buffer": "^2.1.2", "saslprep": "^1.0.3", - "semver": "^5.7.1", + "semver": "^7.3.2", "semver-compare": "^1.0.0", "semver-diff": "^3.1.1", - "semver-regex": "^2.0.0", + "semver-regex": "^3.1.1", "send": "^0.17.1", "serve-static": "^1.14.1", - "setprototypeof": "^1.1.1", + "setprototypeof": "^1.2.0", "shebang-command": "^2.0.0", "shebang-regex": "^3.0.0", "side-channel": "^1.0.3", - "sift": "^7.0.1", + "sift": "^13.3.5", "signal-exit": "^3.0.3", "slash": "^3.0.0", - "slice-ansi": "^2.1.0", + "slice-ansi": "^4.0.0", "sliced": "^1.0.1", - "source-map": "^0.5.7", + "source-map": "^0.7.3", "sparse-bitfield": "^3.0.3", "spdx-correct": "^3.1.1", "spdx-exceptions": "^2.3.0", "spdx-expression-parse": "^3.0.1", "spdx-license-ids": "^3.0.6", - "sprintf-js": "^1.0.3", - "statuses": "^1.5.0", + "sprintf-js": "^1.1.2", + "statuses": "^2.0.0", "string-argv": "^0.3.1", "string-width": "^4.2.0", "string.prototype.matchall": "^4.0.2", "string.prototype.trimend": "^1.0.1", "string.prototype.trimstart": "^1.0.1", - "string_decoder": "^1.1.1", + "string_decoder": "^1.3.0", "stringify-object": "^3.3.0", "strip-ansi": "^6.0.0", - "strip-bom": "^3.0.0", + "strip-bom": "^4.0.0", "strip-final-newline": "^2.0.0", "strip-json-comments": "^3.1.1", - "supports-color": "^5.5.0", - "table": "^5.4.6", + "supports-color": "^7.2.0", + "table": "^6.0.3", "term-size": "^2.2.0", "text-table": "^0.2.0", "through": "^2.3.8", - "tmp": "^0.0.33", - "to-fast-properties": "^2.0.0", - "to-readable-stream": "^1.0.0", + "tmp": "^0.2.1", + "to-fast-properties": "^3.0.1", + "to-readable-stream": "^2.1.0", "to-regex-range": "^5.0.1", "toidentifier": "^1.0.0", "touch": "^3.1.0", "tsconfig-paths": "^3.9.0", - "tslib": "^1.14.1", + "tslib": "^2.0.3", "type-check": "^0.4.0", - "type-fest": "^0.8.1", + "type-fest": "^0.18.0", "type-is": "^1.6.18", "typedarray-to-buffer": "^3.1.5", "undefsafe": "^2.0.3", "unique-string": "^2.0.0", "unpipe": "^1.0.0", - "update-notifier": "^4.1.3", + "update-notifier": "^5.0.0", "uri-js": "^4.4.0", - "url-parse-lax": "^3.0.0", + "url-parse-lax": "^4.0.0", "util-deprecate": "^1.0.2", "utils-merge": "^1.0.1", "v8-compile-cache": "^2.1.1", @@ -396,9 +396,9 @@ "which-pm-runs": "^1.0.0", "widest-line": "^3.1.0", "word-wrap": "^1.2.3", - "wrap-ansi": "^6.2.0", + "wrap-ansi": "^7.0.0", "wrappy": "^1.0.2", - "write": "^1.0.3", + "write": "^2.0.0", "write-file-atomic": "^3.0.3", "xdg-basedir": "^4.0.0", "yaml": "^1.10.0" @@ -413,14 +413,14 @@ "eslint-plugin-import": "^2.22.1", "eslint-plugin-jsx-a11y": "^6.3.1", "eslint-plugin-prettier": "^3.1.4", - "eslint-plugin-react": "^7.21.4", - "eslint-plugin-react-hooks": "^4.0.0", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.1.2", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^1.3.0", + "eslint-visitor-keys": "^2.0.0", "husky": "^4.3.0", "lint-staged": "^10.4.2", - "nodemon": "^2.0.4", - "prettier": "2.1.2" + "nodemon": "^2.0.6", + "prettier": "^2.1.2" } } diff --git a/src/index.js b/src/index.js index 7d410a9..d4d2616 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,5 @@ const express = require('express'); + const app = express(); const morgan = require('morgan'); const mongoose = require('mongoose'); @@ -9,31 +10,27 @@ const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); // MongoDB connection -//mongodb://localhost:27017/noderest => meu banco de dados local polupado -//mongodb://mongo:27017/backend => banco de dados da develop +// mongodb://localhost:27017/noderest => meu banco de dados local polupado +// mongodb://mongo:27017/backend => banco de dados da develop mongoose - .connect( - 'mongodb://localhost:27017/noderest', - { useNewUrlParser: true } - ) - .then(() => console.log('MongoDB Connected')) - .catch(err => console.log(err)); - + .connect('mongodb://localhost:27017/noderest', { useNewUrlParser: true }) + .then(() => console.log('MongoDB Connected')) + .catch((err) => console.log(err)); // middlewares app.use(morgan('dev')); -app.use(express.urlencoded({extended: false})); +app.use(express.urlencoded({ extended: false })); app.use(express.json()); // routes -app.use('/auth',authRoutes); -app.use('/plant',plantRoutes); -app.use('/topic',topicRoutes); -app.use('/comment',commentRoutes); +app.use('/auth', authRoutes); +app.use('/plant', plantRoutes); +app.use('/topic', topicRoutes); +app.use('/comment', commentRoutes); // starting the server app.set('port', process.env.PORT || 3000); app.listen(app.get('port'), () => { - console.log(`Server on port ${app.get('port')}`); + console.log(`Server on port ${app.get('port')}`); }); diff --git a/src/models/Comment.js b/src/models/Comment.js index dcdb05d..79ff587 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -1,32 +1,32 @@ const mongoose = require('mongoose'); -const Schema = mongoose.Schema; + +const { Schema } = mongoose; const CommentSchema = new mongoose.Schema({ - text: { - type: String, - require: true, - }, - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - topic: { - type: Schema.Types.ObjectId, - ref: 'Topic', - require: true, - }, - likes: { - type: Number, - default: 0 - }, - dislikes: { - type: Number, - default: 0 - }, + text: { + type: String, + require: true, + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topic', + require: true, + }, + likes: { + type: Number, + default: 0, + }, + dislikes: { + type: Number, + default: 0, + }, }); - -const Comment = mongoose.model('Comment',CommentSchema); +const Comment = mongoose.model('Comment', CommentSchema); module.exports = Comment; diff --git a/src/models/Plant.js b/src/models/Plant.js index 0e31893..3294204 100644 --- a/src/models/Plant.js +++ b/src/models/Plant.js @@ -1,62 +1,63 @@ const mongoose = require('mongoose'); const PlantSchema = new mongoose.Schema({ - scientificName: { - type: String, - require: true, - unique: true - }, - family_name: { - type: String, - require: true - }, - gender_name: { - type: String, - require: true - }, - specie_name: { - type: String, - require: true - }, - common_name: { - type: String, - require: true - }, - usage: { - type: String, - require: true - }, - first_User: { - type: String, - require: true - }, - collection_count: { - type: Number, - require: true - }, - extinction: { - type: Boolean, - require: true - }, - profile_picture: { - type: String, - require : true - }, - gbifID: { - type: Number, - require: true, - }, - stateProvince: { - type: String, - require : true - }, - topics: [{ - type: mongoose.Schema.Types.ObjectId, - ref: 'Topic', - }], + scientificName: { + type: String, + require: true, + unique: true, + }, + family_name: { + type: String, + require: true, + }, + gender_name: { + type: String, + require: true, + }, + specie_name: { + type: String, + require: true, + }, + common_name: { + type: String, + require: true, + }, + usage: { + type: String, + require: true, + }, + first_User: { + type: String, + require: true, + }, + collection_count: { + type: Number, + require: true, + }, + extinction: { + type: Boolean, + require: true, + }, + profile_picture: { + type: String, + require: true, + }, + gbifID: { + type: Number, + require: true, + }, + stateProvince: { + type: String, + require: true, + }, + topics: [ + { + type: mongoose.Schema.Types.ObjectId, + ref: 'Topic', + }, + ], }); - -const Plant = mongoose.model('Plant',PlantSchema); +const Plant = mongoose.model('Plant', PlantSchema); module.exports = Plant; diff --git a/src/models/Topic.js b/src/models/Topic.js index e08b34c..9b41e3c 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -1,40 +1,43 @@ const mongoose = require('mongoose'); -const Schema = mongoose.Schema; + +const { Schema } = mongoose; const topicSchema = new Schema({ - title: { - type: String, - require: true, - }, - description: { - type: String, - }, - plant:{ - type:mongoose.Schema.Types.ObjectId, - ref:'Plant', - require:true - }, - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - likes: { - type: Number, - default: 0 - }, - dislikes: { - type: Number, - default: 0 - }, - comments: [{ - type: Schema.Types.ObjectId, - ref: 'Comment' - }], - createdAt: { - type: Date, - default: Date.now, + title: { + type: String, + require: true, + }, + description: { + type: String, + }, + plant: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Plant', + require: true, + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + likes: { + type: Number, + default: 0, + }, + dislikes: { + type: Number, + default: 0, + }, + comments: [ + { + type: Schema.Types.ObjectId, + ref: 'Comment', }, + ], + createdAt: { + type: Date, + default: Date.now, + }, }); const Topic = mongoose.model('Topic', topicSchema); diff --git a/src/models/User.js b/src/models/User.js index 0faf8c4..a88a9a2 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -1,26 +1,29 @@ const mongoose = require('mongoose'); -const Schema = mongoose.Schema; + +const { Schema } = mongoose; const userSchema = new Schema({ - username: { - type: String, - required: true, - unique:true - }, - password: { - type: String, - required: true - }, - email: { - type: String, - required: true, - unique:true + username: { + type: String, + required: true, + unique: true, + }, + password: { + type: String, + required: true, + }, + email: { + type: String, + required: true, + unique: true, + }, + topics: [ + { + type: mongoose.Schema.Types.ObjectId, + ref: 'Topics', + require: true, }, - topics: [{ - type: mongoose.Schema.Types.ObjectId, - ref: 'Topics', - require: true, - }] + ], }); const User = mongoose.model('User', userSchema); diff --git a/src/routes/auth.js b/src/routes/auth.js index 178bee1..e58d17f 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,38 +1,35 @@ - -//confere se o token é valido +// confere se o token é valido require('dotenv').config(); const jsonwebtoken = require('jsonwebtoken'); const authConfig = { - "secret": process.env.SECRET - + secret: process.env.SECRET, }; function auth(req, res, next) { - const sessiontoken = req.headers.authtoken; + const sessiontoken = req.headers.authtoken; - if(!sessiontoken){ - return res.status(401).send({Error: 'Token not provided'}); - } - - const parts = sessiontoken.split(' '); + if (!sessiontoken) { + return res.status(401).send({ Error: 'Token not provided' }); + } - if (!parts.length === 2){ - return res.status(401).send({Error: 'Token error'}); - } - - const [scheme, token] = parts; - - if(!/^Bearer$/i.test(scheme)){ - return res.status(401).send({Error: 'Token malformated'}); - } + const parts = sessiontoken.split(' '); - jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { - if(err){ - return res.status(401).send({Error: 'Token invalid'}); - } + if (!parts.length === 2) { + return res.status(401).send({ Error: 'Token error' }); + } + + const [scheme, token] = parts; + + if (!/^Bearer$/i.test(scheme)) { + return res.status(401).send({ Error: 'Token malformated' }); + } + + jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { + if (err) { + return res.status(401).send({ Error: 'Token invalid' }); + } req.userId = decoded.id; - return next() - - }); + return next(); + }); } -module.exports = {authConfig,auth} +module.exports = { authConfig, auth }; diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 672e07b..acea393 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -1,83 +1,84 @@ const express = require('express'); + const router = express.Router(); const jsonwebtoken = require('jsonwebtoken'); const User = require('../models/User'); const userSchema = require('../schemas/userSchema'); -const {auth,authConfig} = require('./auth'); - +const { auth, authConfig } = require('./auth'); -router.post('/login', async(req, res ,next) => { - try{ - const {email, password} = req.body; +router.post('/login', async (req, res, next) => { + try { + const { email, password } = req.body; const user = await User.findOne({ email, password }); - if(!user){ - return res.status(400).send({Error: 'User not found'}); + if (!user) { + return res.status(400).send({ Error: 'User not found' }); } - if(await password != user.password){ - return res.status(400).send({ Error: 'Incorrect password'}); + if ((await password) != user.password) { + return res.status(400).send({ Error: 'Incorrect password' }); } user.password = undefined; - const token = jsonwebtoken.sign({id: user.id}, authConfig.secret,{ - expiresIn: 86400, + const token = jsonwebtoken.sign({ id: user.id }, authConfig.secret, { + expiresIn: 86400, }); - const aToken = "Bearer "+token; + const aToken = `Bearer ${token}`; res.header('authtoken', aToken); - res.json({ - message: 'Auth token generated' - }).redirect('/main'); - }catch(err){ + res + .json({ + message: 'Auth token generated', + }) + .redirect('/main'); + } catch (err) { next(err); } }); -router.post('/signup', async(req, res) => { +router.post('/signup', async (req, res) => { try { - const newUserData = req.body; - const result = userSchema.validate(req.body); + const newUserData = req.body; + const result = userSchema.validate(req.body); - await User.findOne({ username: newUserData.username}); + await User.findOne({ username: newUserData.username }); - if ( result.error ) return res.status(400).send({ error: 'Error while signing up. ' + result.error}); + if (result.error) + return res.status(400).send({ error: `Error while signing up. ${result.error}` }); - const user = new User(newUserData); - await user.save() + const user = new User(newUserData); + await user.save(); - return res.send(user); - - } catch(err) { - return res.status(400).send({ error: 'Error while signing up.' + err }); + return res.send(user); + } catch (err) { + return res.status(400).send({ error: `Error while signing up.${err}` }); } }); -router.put('/update/:id',auth, async(req, res) => { - try { - const user = await User.findById(req.params.id); - const newData = req.body; +router.put('/update/:id', auth, async (req, res) => { + try { + const user = await User.findById(req.params.id); + const newData = req.body; - if ( !newData.username ) newData.username = user.username; - if ( !newData.password ) newData.password = user.password; - if ( !newData.email ) newData.email = user.email; + if (!newData.username) newData.username = user.username; + if (!newData.password) newData.password = user.password; + if (!newData.email) newData.email = user.email; - const result = userSchema.validate(newData); + const result = userSchema.validate(newData); - if ( result.error ) return res.status(400).send(result.error); + if (result.error) return res.status(400).send(result.error); - await User.findOneAndUpdate({_id: req.params.id}, req.body, { useFindAndModify: false}) - - res.send({ message: 'User updated successfully.'}); + await User.findOneAndUpdate({ _id: req.params.id }, req.body, { useFindAndModify: false }); - } catch(err) { - return res.status(400).send({ error: 'Error while updating user.' + err}); - } + res.send({ message: 'User updated successfully.' }); + } catch (err) { + return res.status(400).send({ error: `Error while updating user.${err}` }); + } }); -router.delete('/delete/:id',auth, async(req, res) => { - try { - await User.findByIdAndDelete(req.params.id); - return res.send({ message: 'User successfully deleted.' }); - } catch(err) { - return res.status(400).send({ error: 'Error while deleting user. ' + err }); - } +router.delete('/delete/:id', auth, async (req, res) => { + try { + await User.findByIdAndDelete(req.params.id); + return res.send({ message: 'User successfully deleted.' }); + } catch (err) { + return res.status(400).send({ error: `Error while deleting user. ${err}` }); + } }); module.exports = router; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 4b708be..6cf62cf 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,4 +1,5 @@ const express = require('express'); + const router = express.Router(); const Topic = require('../models/Topic'); @@ -6,96 +7,93 @@ const User = require('../models/User'); const Comment = require('../models/Comment'); router.post('/create/:topicId/:userId', async (req, res) => { - try { - - if ( !req.body.text ) return res.status(400).send({ error: 'Comment should not be empty'}); + try { + if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); - const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); - const topic = await Topic.findById(req.params.topicId); + const comment = await Comment.create({ + ...req.body, + user: req.params.userId, + topic: req.params.topicId, + }); + const topic = await Topic.findById(req.params.topicId); - await comment.save(); + await comment.save(); - topic.comments.push(comment); - await topic.save(); - - return res.send({ message: 'Comment successfully registered.' }); + topic.comments.push(comment); + await topic.save(); - } catch (err) { - return res.status(400).send({ error: 'Error while commenting.' + err}); - } + return res.send({ message: 'Comment successfully registered.' }); + } catch (err) { + return res.status(400).send({ error: `Error while commenting.${err}` }); + } }); router.put('/update/:commentId', async (req, res) => { - - try { - - await Comment.findById(req.params.commentId); - const newData = req.body; - - if ( !newData.text ) return res.status(400).send({ error: 'Comment should not be empty'}); - - await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Comment updated successfully.'}); - }); - - } catch (err) { - return res.status(400).send({ error: 'Error while updating comment.' + err }); - } - + try { + await Comment.findById(req.params.commentId); + const newData = req.body; + + if (!newData.text) return res.status(400).send({ error: 'Comment should not be empty' }); + + await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { + useFindAndModify: false, + }).then(() => { + res.send({ message: 'Comment updated successfully.' }); + }); + } catch (err) { + return res.status(400).send({ error: `Error while updating comment.${err}` }); + } }); router.delete('/delete/:commentId', async (req, res) => { + try { + const comment = await Comment.findById(req.params.commentId); + const topic = await Topic.findById(comment.topic); - try { + const index = topic.comments.indexOf(req.params.commentId); - const comment = await Comment.findById(req.params.commentId); - const topic = await Topic.findById(comment.topic); - - const index = topic.comments.indexOf(req.params.commentId); - - if (index > -1) { - topic.comments.splice(index, 1); - } - - topic.save(); - - await Comment.findByIdAndRemove(req.params.commentId).populate('user'); + if (index > -1) { + topic.comments.splice(index, 1); + } - return res.send({ - message: 'Comment successfully removed.' - }); + topic.save(); - } catch (err) { - return res.status(400).send({ error: 'Error while deleting topic.' + err }); - } + await Comment.findByIdAndRemove(req.params.commentId).populate('user'); + return res.send({ + message: 'Comment successfully removed.', + }); + } catch (err) { + return res.status(400).send({ error: `Error while deleting topic.${err}` }); + } }); router.post('/like/:commentId', async (req, res) => { - try { - - await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Liked!'}); - }); - - } catch (err) { - return res.status(400).send({ error: 'Error while liking comment.' + err }); - } + try { + await Comment.findOneAndUpdate( + { _id: req.params.commentId }, + { $inc: { likes: 1 } }, + { useFindAndModify: false } + ).then(() => { + res.send({ message: 'Liked!' }); + }); + } catch (err) { + return res.status(400).send({ error: `Error while liking comment.${err}` }); + } }); router.post('/dislike/:commentId', async (req, res) => { - try { - - await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Disliked!'}); - }); - - } catch (err) { - return res.status(400).send({ error: 'Error while linking comment.' + err }); - } + try { + await Comment.findOneAndUpdate( + { _id: req.params.commentId }, + { $inc: { dislikes: 1 } }, + { useFindAndModify: false } + ).then(() => { + res.send({ message: 'Disliked!' }); + }); + } catch (err) { + return res.status(400).send({ error: `Error while linking comment.${err}` }); + } }); module.exports = router; diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 54a5085..eaa5040 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -5,86 +5,142 @@ const Topic = require('../models/Topic'); const router = express.Router(); -//registro de uma nova planta -router.post('/register', async (req , res) => { - try{ - const { scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince,topicos} = req.body; +// registro de uma nova planta +router.post('/register', async (req, res) => { + try { + const { + scientificName, + family_name, + gender_name, + specie_name, + common_name, + usage, + first_User, + collection_count, + extinction, + profile_picture, + gbifID, + stateProvince, + topicos, + } = req.body; - const plant = await Plant.create({scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince}); + const plant = await Plant.create({ + scientificName, + family_name, + gender_name, + specie_name, + common_name, + usage, + first_User, + collection_count, + extinction, + profile_picture, + gbifID, + stateProvince, + }); - // await Promise.all(topicos.map(async topico =>{ - // const plantTopic = new Topico({...topico,plant : plant._id}); + // await Promise.all(topicos.map(async topico =>{ + // const plantTopic = new Topico({...topico,plant : plant._id}); - // await plantTopic.save(); + // await plantTopic.save(); - // plant.topicos.push(plantTopic); - // })); + // plant.topicos.push(plantTopic); + // })); - await plant.save(); + await plant.save(); - return res.send({ plant }); - }catch (err){ - return res.send(err); - } + return res.send({ plant }); + } catch (err) { + return res.send(err); + } }); -//Listagem de Todas as plantas -router.get('/', async (req , res) => { - try{ - const plants = await Plant.find().populate('topics'); - - return res.send({ plants }); - }catch (err){ - return res.status(400).send({ error: 'Loading plants failed'}); - } +// Listagem de Todas as plantas +router.get('/', async (req, res) => { + try { + const plants = await Plant.find().populate('topics'); + + return res.send({ plants }); + } catch (err) { + return res.status(400).send({ error: 'Loading plants failed' }); + } }); -//Procurando planta por id -router.get('/:plantId', async (req , res) => { - try{ - const plant = await Plant.findById(req.params.plantId).populate('topics'); - - return res.send({ plant }); - }catch (err){ - return res.status(400).send({ error: 'error when searching for this plant '}); - } +// Procurando planta por id +router.get('/:plantId', async (req, res) => { + try { + const plant = await Plant.findById(req.params.plantId).populate('topics'); + + return res.send({ plant }); + } catch (err) { + return res.status(400).send({ error: 'error when searching for this plant ' }); + } }); -//Deletando planta por id -router.delete('/:plantId', async (req , res) => { - try{ - const deleted = await Plant.findByIdAndRemove(req.params.plantId); - - return res.send(deleted); - }catch (err){ - return res.status(400).send({ error: 'Error when Delete this plant'}); - } +// Deletando planta por id +router.delete('/:plantId', async (req, res) => { + try { + const deleted = await Plant.findByIdAndRemove(req.params.plantId); + + return res.send(deleted); + } catch (err) { + return res.status(400).send({ error: 'Error when Delete this plant' }); + } }); -//Dando upgrade planta por id -router.put('/:plantId', async (req , res) => { - - try{ - const { scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince,topicos} = req.body; - - const plant = await Plant.findByIdAndUpdate(req.params.plantId, - {scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince},{ new: true}); - - plant.topics = []; - await Topic.remove({plant: plant._id}); - - await Promise.all(topics.map(async topic =>{ - const plantTopic = new Topic({...topic,plant : plant._id}); - - await plantTopic.save(); - - plant.topics.push(plantTopic); - })); - - await plant.save(); - - - return res.send({ plant }); - }catch (err){ - return res.status(400).send({ error: 'Registration failed'}); - } - +// Dando upgrade planta por id +router.put('/:plantId', async (req, res) => { + try { + const { + scientificName, + family_name, + gender_name, + specie_name, + common_name, + usage, + first_User, + collection_count, + extinction, + profile_picture, + gbifID, + stateProvince, + topicos, + } = req.body; + + const plant = await Plant.findByIdAndUpdate( + req.params.plantId, + { + scientificName, + family_name, + gender_name, + specie_name, + common_name, + usage, + first_User, + collection_count, + extinction, + profile_picture, + gbifID, + stateProvince, + }, + { new: true } + ); + + plant.topics = []; + await Topic.remove({ plant: plant._id }); + + await Promise.all( + topics.map(async (topic) => { + const plantTopic = new Topic({ ...topic, plant: plant._id }); + + await plantTopic.save(); + + plant.topics.push(plantTopic); + }) + ); + + await plant.save(); + + return res.send({ plant }); + } catch (err) { + return res.status(400).send({ error: 'Registration failed' }); + } }); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 525645b..862423a 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -1,4 +1,5 @@ const express = require('express'); + const router = express.Router(); const Topic = require('../models/Topic'); @@ -7,126 +8,123 @@ const Plant = require('../models/Plant'); const topicSchema = require('../schemas/topicSchema'); router.post('/create/:plantId/:userId', async (req, res) => { - - try { - - const user = await User.findById(req.params.userId); - const plant = await Plant.findById(req.params.plantId); - - const result = topicSchema.validate(req.body); + try { + const user = await User.findById(req.params.userId); + const plant = await Plant.findById(req.params.plantId); - if ( result.error ) return res.status(400).send({ error: 'Error while creating topic. ' + result.error}); + const result = topicSchema.validate(req.body); - const topic = await Topic.create({...req.body, user: req.params.userId, plant: req.params.plantId}); + if (result.error) + return res.status(400).send({ error: `Error while creating topic. ${result.error}` }); - await topic.save(); + const topic = await Topic.create({ + ...req.body, + user: req.params.userId, + plant: req.params.plantId, + }); - user.topics.push(topic); - await user.save(); + await topic.save(); - plant.topics.push(topic); - await plant.save(); - - return res.send({ topic }); + user.topics.push(topic); + await user.save(); - } catch (err) { - return res.status(400).send({ error: 'Error while creating topic.' + err }); - } + plant.topics.push(topic); + await plant.save(); + return res.send({ topic }); + } catch (err) { + return res.status(400).send({ error: `Error while creating topic.${err}` }); + } }); router.put('/update/:topicId', async (req, res) => { - - try { - - const topic = await Topic.findById(req.params.topicId); - - const newData = req.body; - - if (!newData.title) newData.title = topic.title; - if (!newData.description) newData.description = topic.description; - - const result = topicSchema.validate(newData); - if ( result.error ) return res.status(400).send({ error: 'Error while creating topic. ' + result.error}); - - await Topic.findOneAndUpdate({_id: req.params.topicId}, newData, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Topic updated successfully.'}); - }); - - } catch (err) { - return res.status(400).send({ error: 'Error while updating topic.' + err }); - } - + try { + const topic = await Topic.findById(req.params.topicId); + + const newData = req.body; + + if (!newData.title) newData.title = topic.title; + if (!newData.description) newData.description = topic.description; + + const result = topicSchema.validate(newData); + if (result.error) + return res.status(400).send({ error: `Error while creating topic. ${result.error}` }); + + await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { + useFindAndModify: false, + }).then(() => { + res.send({ message: 'Topic updated successfully.' }); + }); + } catch (err) { + return res.status(400).send({ error: `Error while updating topic.${err}` }); + } }); router.delete('/delete/:topicId', async (req, res) => { - try { - - const topic = await Topic.findById(req.params.topicId); - const user = await User.findById(topic.user); - const plant = await Plant.findById(topic.plant); - - const indexAtUser = user.topics.indexOf(req.params.topicId); - const indexAtPlant = plant.topics.indexOf(req.params.topicId); + try { + const topic = await Topic.findById(req.params.topicId); + const user = await User.findById(topic.user); + const plant = await Plant.findById(topic.plant); - if (indexAtUser > -1) { - user.topics.splice(indexAtUser, 1); - } - if (indexAtPlant > -1) { - plant.topics.splice(indexAtPlant, 1); - } + const indexAtUser = user.topics.indexOf(req.params.topicId); + const indexAtPlant = plant.topics.indexOf(req.params.topicId); - user.save(); - plant.save(); + if (indexAtUser > -1) { + user.topics.splice(indexAtUser, 1); + } + if (indexAtPlant > -1) { + plant.topics.splice(indexAtPlant, 1); + } - await Topic.findByIdAndRemove(req.params.topicId, { useFindAndModify: false }); + user.save(); + plant.save(); - return res.send({ - message: 'Topic successfully removed.' - }); + await Topic.findByIdAndRemove(req.params.topicId, { useFindAndModify: false }); - } catch (err) { - return res.status(400).send({ error: 'Error while deleting topic.' + err }); - } + return res.send({ + message: 'Topic successfully removed.', + }); + } catch (err) { + return res.status(400).send({ error: `Error while deleting topic.${err}` }); + } }); router.get('/list', async (req, res) => { - try { + try { + const topic = await Topic.find().populate(['user']); - const topic = await Topic.find().populate(['user']); - - return res.send({ topic }); - - } catch (err) { - return res.status(400).send({ error: 'Error while listing topics.' + err }); - } + return res.send({ topic }); + } catch (err) { + return res.status(400).send({ error: `Error while listing topics.${err}` }); + } }); router.post('/like/:topicId', async (req, res) => { - try { - - await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Liked!'}); - }); - - } catch (err) { - return res.status(400).send({ error: 'Error while liking topic.' + err }); - } + try { + await Topic.findOneAndUpdate( + { _id: req.params.topicId }, + { $inc: { likes: 1 } }, + { useFindAndModify: false } + ).then(() => { + res.send({ message: 'Liked!' }); + }); + } catch (err) { + return res.status(400).send({ error: `Error while liking topic.${err}` }); + } }); router.post('/dislike/:topicId', async (req, res) => { - try { - - await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: 'Disliked!'}); - }); - - } catch (err) { - return res.status(400).send({ error: 'Error while dislikinng topic.' + err }); - } + try { + await Topic.findOneAndUpdate( + { _id: req.params.topicId }, + { $inc: { dislikes: 1 } }, + { useFindAndModify: false } + ).then(() => { + res.send({ message: 'Disliked!' }); + }); + } catch (err) { + return res.status(400).send({ error: `Error while dislikinng topic.${err}` }); + } }); module.exports = router; diff --git a/src/schemas/topicSchema.js b/src/schemas/topicSchema.js index 0e07919..9a0379e 100644 --- a/src/schemas/topicSchema.js +++ b/src/schemas/topicSchema.js @@ -1,8 +1,8 @@ const Joi = require('joi'); const topicSchema = Joi.object({ - title: Joi.string().min(4).max(30).required(), - description: Joi.string().min(5) + title: Joi.string().min(4).max(30).required(), + description: Joi.string().min(5), }); module.exports = topicSchema; diff --git a/src/schemas/userSchema.js b/src/schemas/userSchema.js index 5853b2b..20101d6 100644 --- a/src/schemas/userSchema.js +++ b/src/schemas/userSchema.js @@ -1,10 +1,14 @@ const Joi = require('joi'); const userSchema = Joi.object({ - username: Joi.string().alphanum().min(4).max(30).required(), - password: Joi.string().min(8).required(), - passwordConfirmation: Joi.string().min(8).required().valid(Joi.ref('password')).error(new Error('Password confirmation does not match.')), - email: Joi.string().email().required() + username: Joi.string().alphanum().min(4).max(30).required(), + password: Joi.string().min(8).required(), + passwordConfirmation: Joi.string() + .min(8) + .required() + .valid(Joi.ref('password')) + .error(new Error('Password confirmation does not match.')), + email: Joi.string().email().required(), }); module.exports = userSchema; From 83580ebaabb666c109e2d5f71225512edbd0269d Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Tue, 20 Oct 2020 02:14:28 -0300 Subject: [PATCH 070/147] Update .stickler.yml --- .stickler.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.stickler.yml b/.stickler.yml index 32c9168..15af50e 100644 --- a/.stickler.yml +++ b/.stickler.yml @@ -4,6 +4,7 @@ linters: files: ignore: + - '.eslintrc.json' - 'bower_components/*' - 'node_modules/*' From 80c0674cd19bc37eda978c9711b1401bf951d697 Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Tue, 20 Oct 2020 16:59:01 -0300 Subject: [PATCH 071/147] fixing lint errors --- .eslintrc.json | 1 + src/routes/auth.js | 15 +++++---- src/routes/authRoutes.js | 8 ++--- src/routes/commentRoutes.js | 14 +++----- src/routes/plantRoutes.js | 67 +++++++++++++++++++------------------ src/routes/topicRoutes.js | 13 +++---- 6 files changed, 58 insertions(+), 60 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index d685852..43d1e28 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -14,6 +14,7 @@ "rules": { "jsx-a11y/href-no-hash": ["off"], "no-console": "off", + "no-underscore-dangle": "off", "react/jsx-filename-extension": ["warn", { "extensions": [".js", ".jsx"] }], "max-len": [ "warn", diff --git a/src/routes/auth.js b/src/routes/auth.js index e58d17f..2b6ba85 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,6 +1,6 @@ // confere se o token é valido require('dotenv').config(); -const jsonwebtoken = require('jsonwebtoken'); +const jwt = require('jsonwebtoken'); const authConfig = { secret: process.env.SECRET, @@ -24,12 +24,13 @@ function auth(req, res, next) { return res.status(401).send({ Error: 'Token malformated' }); } - jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { - if (err) { - return res.status(401).send({ Error: 'Token invalid' }); - } - req.userId = decoded.id; + try { + const { userId } = jwt.verify(token, authConfig.secret); + req.userId = userId; return next(); - }); + } catch (err) { + req.redirect('/login_page'); + return res.status(400); + } } module.exports = { authConfig, auth }; diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index df73193..c29b72c 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -13,7 +13,7 @@ router.post('/login', async (req, res, next) => { if (!user) { return res.status(400).send({ Error: 'User not found' }); } - if ((await password) != user.password) { + if (password !== user.password) { return res.status(400).send({ Error: 'Incorrect password' }); } user.password = undefined; @@ -22,13 +22,13 @@ router.post('/login', async (req, res, next) => { }); const aToken = `Bearer ${token}`; res.header('authtoken', aToken); - res + return res .json({ message: 'Auth token generated', }) .redirect('/main'); } catch (err) { - next(err); + return next(err); } }); @@ -70,7 +70,7 @@ router.put('/update/:id', auth, async (req, res) => { useFindAndModify: false, }); - res.send({ message: 'User updated successfully.' }); + return res.send({ message: 'User updated successfully.' }); } catch (err) { return res.status(400).send({ error: `Error while updating user.${err}` }); } diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 939a6a9..f3bfcc2 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -3,7 +3,6 @@ const express = require('express'); const router = express.Router(); const Topic = require('../models/Topic'); -const User = require('../models/User'); const Comment = require('../models/Comment'); router.post('/create/:topicId/:userId', async (req, res) => { @@ -39,9 +38,8 @@ router.put('/update/:commentId', async (req, res) => { await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { useFindAndModify: false, - }).then(() => { - res.send({ message: 'Comment updated successfully.' }); }); + return res.send({ message: 'Comment updated successfully.' }); } catch (err) { return res .status(400) @@ -78,9 +76,8 @@ router.post('/like/:commentId', async (req, res) => { { _id: req.params.commentId }, { $inc: { likes: 1 } }, { useFindAndModify: false } - ).then(() => { - res.send({ message: 'Liked!' }); - }); + ); + return res.send({ message: 'Liked!' }); } catch (err) { return res.status(400).send({ error: `Error while liking comment.${err}` }); } @@ -92,9 +89,8 @@ router.post('/dislike/:commentId', async (req, res) => { { _id: req.params.commentId }, { $inc: { dislikes: 1 } }, { useFindAndModify: false } - ).then(() => { - res.send({ message: 'Disliked!' }); - }); + ); + return res.send({ message: 'Disliked!' }); } catch (err) { return res .status(400) diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index bf98267..3985c29 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -10,41 +10,40 @@ router.post('/register', async (req, res) => { try { const { scientificName, - family_name, - gender_name, - specie_name, - common_name, + familyName, + genderName, + specieName, + commonName, usage, - first_User, - collection_count, + firstUser, + collectionCount, extinction, - profile_picture, + profilePicture, gbifID, stateProvince, - topicos, } = req.body; const plant = await Plant.create({ scientificName, - family_name, - gender_name, - specie_name, - common_name, + familyName, + genderName, + specieName, + commonName, usage, - first_User, - collection_count, + firstUser, + collectionCount, extinction, - profile_picture, + profilePicture, gbifID, stateProvince, }); - // await Promise.all(topicos.map(async topico =>{ + // await Promise.all(topics.map(async topico =>{ // const plantTopic = new Topico({...topico,plant : plant._id}); // await plantTopic.save(); - // plant.topicos.push(plantTopic); + // plant.topics.push(plantTopic); // })); await plant.save(); @@ -54,6 +53,7 @@ router.post('/register', async (req, res) => { return res.send(err); } }); + // Listagem de Todas as plantas router.get('/', async (req, res) => { try { @@ -64,6 +64,7 @@ router.get('/', async (req, res) => { return res.status(400).send({ error: 'Loading plants failed' }); } }); + // Procurando planta por id router.get('/:plantId', async (req, res) => { try { @@ -76,6 +77,7 @@ router.get('/:plantId', async (req, res) => { .send({ error: 'error when searching for this plant ' }); } }); + // Deletando planta por id router.delete('/:plantId', async (req, res) => { try { @@ -86,38 +88,39 @@ router.delete('/:plantId', async (req, res) => { return res.status(400).send({ error: 'Error when Delete this plant' }); } }); + // Dando upgrade planta por id router.put('/:plantId', async (req, res) => { try { const { scientificName, - family_name, - gender_name, - specie_name, - common_name, + familyName, + genderName, + specieName, + commonName, usage, - first_User, - collection_count, + firstUser, + collectionCount, extinction, - profile_picture, + profilePicture, gbifID, stateProvince, - topicos, + topics, } = req.body; const plant = await Plant.findByIdAndUpdate( req.params.plantId, { scientificName, - family_name, - gender_name, - specie_name, - common_name, + familyName, + genderName, + specieName, + commonName, usage, - first_User, - collection_count, + firstUser, + collectionCount, extinction, - profile_picture, + profilePicture, gbifID, stateProvince, }, diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 173da3a..878f1dd 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -56,9 +56,8 @@ router.put('/update/:topicId', async (req, res) => { await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { useFindAndModify: false, - }).then(() => { - res.send({ message: 'Topic updated successfully.' }); }); + return res.send({ message: 'Topic updated successfully.' }); } catch (err) { return res.status(400).send({ error: `Error while updating topic.${err}` }); } @@ -111,9 +110,8 @@ router.post('/like/:topicId', async (req, res) => { { _id: req.params.topicId }, { $inc: { likes: 1 } }, { useFindAndModify: false } - ).then(() => { - res.send({ message: 'Liked!' }); - }); + ); + return res.send({ message: 'Liked!' }); } catch (err) { return res.status(400).send({ error: `Error while liking topic.${err}` }); } @@ -125,9 +123,8 @@ router.post('/dislike/:topicId', async (req, res) => { { _id: req.params.topicId }, { $inc: { dislikes: 1 } }, { useFindAndModify: false } - ).then(() => { - res.send({ message: 'Disliked!' }); - }); + ); + return res.send({ message: 'Disliked!' }); } catch (err) { return res .status(400) From b005261b7a6c1563df280f0f5ad5ccfd96b28100 Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Tue, 20 Oct 2020 18:12:19 -0300 Subject: [PATCH 072/147] adding github action --- .eslintrc.json | 3 +-- .github/workflows/linters.yml | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/linters.yml diff --git a/.eslintrc.json b/.eslintrc.json index 43d1e28..5d9f147 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,6 +4,7 @@ "plugin:prettier/recommended", "prettier/react" ], + "parser": "babel-eslint", "env": { "browser": true, "commonjs": true, @@ -12,10 +13,8 @@ "node": true }, "rules": { - "jsx-a11y/href-no-hash": ["off"], "no-console": "off", "no-underscore-dangle": "off", - "react/jsx-filename-extension": ["warn", { "extensions": [".js", ".jsx"] }], "max-len": [ "warn", { diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml new file mode 100644 index 0000000..be4aebc --- /dev/null +++ b/.github/workflows/linters.yml @@ -0,0 +1,22 @@ +name: Linters + +on: pull_request + +env: + FORCE_COLOR: 1 + +jobs: + eslint: + name: ESLint + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: '12.x' + - name: Setup ESLint + run: | + npm install --save-dev babel-eslint@10.1.x eslint@7.11.x eslint-config-airbnb@18.2.x eslint-config-prettier@6.13.x eslint-import-resolver-node@0.3.x eslint-module-utils@2.6.x eslint-plugin-import@2.22.x eslint-plugin-jsx-a11y@6.3.x eslint-plugin-prettier@3.1.x eslint-plugin-react@7.21.x eslint-plugin-react-hooks@4.1.x eslint-scope@5.1.x eslint-utils@2.1.x eslint-visitor-keys@2.0.x + [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/fga-eps-mds/2020.1-GaiaDex-BackEnd/adding_eslint/.eslintrc.json + - name: ESLint Report + run: npx eslint . From 3e6fd0a4f1877156fa6c5d0c0dbc527bcede5650 Mon Sep 17 00:00:00 2001 From: Guilherme de Lyra Date: Tue, 20 Oct 2020 18:25:23 -0300 Subject: [PATCH 073/147] adding precommit hook --- package.json | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 47d437f..4dcaec5 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,22 @@ "scripts": { "start": "node src/index.js", "dev": "nodemon src/index.js", - "precommit": "lint-staged" + "lint:js": "npx eslint . --ext .js,.jsx", + "lint:js:fix": "npm run lint:js -- --fix" }, "lint-staged": { - "*.{js,jsx}": [ - "eslint --fix", - "git add" + "src/**/*.{js,jsx}": [ + "npx eslint . --fix", "git add" + ], + "src/*.{js,jsx}": [ + "npx eslint . --fix", "git add" ] }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, "repository": { "type": "git", "url": "git+https://github.com/fga-eps-mds/2020.1-GaiaDex-backend.git" From aaae2b0310700dd1f7b6b71b67f86ffac26ab160 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Tue, 3 Nov 2020 16:16:02 -0300 Subject: [PATCH 074/147] Fix default mongodb url Co-authored-by: Marcos Filipe Co-authored-by: Antonio Ruan --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index d4d2616..19cf9c0 100644 --- a/src/index.js +++ b/src/index.js @@ -13,7 +13,7 @@ const commentRoutes = require('./routes/commentRoutes'); // mongodb://localhost:27017/noderest => meu banco de dados local polupado // mongodb://mongo:27017/backend => banco de dados da develop mongoose - .connect('mongodb://localhost:27017/noderest', { useNewUrlParser: true }) + .connect('mongodb://mongo:27017/backend', { useNewUrlParser: true }) .then(() => console.log('MongoDB Connected')) .catch((err) => console.log(err)); From 524a6f473712210dae81d7455316c11bf35e75c0 Mon Sep 17 00:00:00 2001 From: Antonio Ruan Moura Barreto Date: Tue, 20 Oct 2020 19:19:32 -0300 Subject: [PATCH 075/147] Adding scanner plant rounter Co-authored-by: Marcos Felipe De Almeida Souza --- package-lock.json | 1025 +++++++++++------------------------------ package.json | 8 +- src/index.js | 14 +- src/routes/scanner.js | 47 ++ 4 files changed, 341 insertions(+), 753 deletions(-) create mode 100644 src/routes/scanner.js diff --git a/package-lock.json b/package-lock.json index d26bd23..9d592c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,50 +83,40 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "color-convert": { "version": "1.9.3", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -136,6 +126,14 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -192,8 +190,8 @@ "dependencies": { "globals": { "version": "11.12.0", - "resolved": "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz", - "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true } } @@ -218,9 +216,9 @@ } }, "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -290,9 +288,9 @@ } }, "@sindresorhus/is": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz", - "integrity": "sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", + "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==" }, "@szmarczak/http-timer": { "version": "4.0.5", @@ -337,9 +335,9 @@ } }, "@types/node": { - "version": "14.11.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", - "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" + "version": "14.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", + "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==" }, "@types/normalize-package-data": { "version": "2.4.0", @@ -435,18 +433,8 @@ "dependencies": { "ansi-regex": { "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "string-width": { "version": "3.1.0", @@ -456,14 +444,26 @@ "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + } } } } @@ -537,26 +537,6 @@ "define-properties": "^1.1.3", "es-abstract": "^1.17.0", "is-string": "^1.0.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "array.prototype.flat": { @@ -566,26 +546,6 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "array.prototype.flatmap": { @@ -596,26 +556,6 @@ "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "ast-types-flow": { @@ -628,11 +568,24 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, "axe-core": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.0.2.tgz", "integrity": "sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA==" }, + "axios": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", + "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -889,12 +842,12 @@ } }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.0.tgz", + "integrity": "sha512-cd+5r1VLBwUqTrmnzW+D7ABkJUM6mr7uv1dv+6jRw4Rcl7tFIFHDqHPL98LhpGFn3dbAt3gtLxtrWp4m1kFrqg==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-equal-constant-time": { @@ -941,15 +894,24 @@ } } }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" }, "chalk": { "version": "4.1.0", @@ -958,21 +920,6 @@ "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "chardet": { @@ -1030,37 +977,6 @@ "string-width": "^4.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, "slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -1075,8 +991,8 @@ }, "cli-width": { "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "clone-response": { "version": "1.0.2", @@ -1106,10 +1022,18 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "commander": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", - "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==" }, "compare-versions": { "version": "3.6.0", @@ -1145,9 +1069,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", - "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==" }, "contains-path": { "version": "1.0.0", @@ -1218,24 +1142,6 @@ "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" - }, - "dependencies": { - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - } } }, "cross-spawn": { @@ -1312,6 +1218,11 @@ "object-keys": "^1.0.12" } }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, "denque": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", @@ -1359,13 +1270,6 @@ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { "safe-buffer": "^5.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "ee-first": { @@ -1374,9 +1278,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "emoji-regex": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.1.1.tgz", - "integrity": "sha512-AaWyDiNO9rbtMIcGl7tdxMcNu8SOLaDLxmQEFT5JhgKufOJzPPkYmgN2QwqTgw4doWMZZQttC6sUWVQjb+1VdA==" + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.0.tgz", + "integrity": "sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug==" }, "encodeurl": { "version": "1.0.2", @@ -1458,13 +1362,13 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", - "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz", + "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1641,9 +1545,9 @@ } }, "eslint-config-prettier": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.13.0.tgz", - "integrity": "sha512-LcT0i0LSmnzqK2t764pyIt7kKH2AuuqKRTtJTdddWxOiUja9HdG5GXBVF2gmCTvVYWVsTu8J2MhJLVGRh+pj8w==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "requires": { "get-stdin": "^6.0.0" @@ -1695,6 +1599,15 @@ "ms": "2.0.0" } }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -1743,22 +1656,11 @@ }, "pkg-dir": { "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } } } } @@ -1960,40 +1862,22 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", - "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", + "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==", "dev": true, "requires": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.11.2", "aria-query": "^4.2.2", "array-includes": "^3.1.1", "ast-types-flow": "^0.0.7", - "axe-core": "^3.5.4", - "axobject-query": "^2.1.2", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", "damerau-levenshtein": "^1.0.6", "emoji-regex": "^9.0.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1", + "jsx-ast-utils": "^3.1.0", "language-tags": "^1.0.5" - }, - "dependencies": { - "axe-core": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", - "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", - "dev": true - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" - } - } } }, "eslint-plugin-prettier": { @@ -2036,9 +1920,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.2.tgz", - "integrity": "sha512-ykUeqkGyUGgwTtk78C0o8UG2fzwmgJ0qxBGPp2WqRKsTwcLuVf01kTDRAtOsd4u6whX2XOC8749n2vPydP82fg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", "dev": true }, "eslint-scope": { @@ -2053,8 +1937,8 @@ "dependencies": { "estraverse": { "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true } } @@ -2115,13 +1999,6 @@ "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } } }, "esrecurse": { @@ -2130,13 +2007,6 @@ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } } }, "estraverse": { @@ -2155,9 +2025,9 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "execa": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", - "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -2284,8 +2154,8 @@ }, "external-editor": { "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -2479,6 +2349,21 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==" }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + }, + "form-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -2510,6 +2395,16 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -2556,9 +2451,9 @@ } }, "globals": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.2.0.tgz", - "integrity": "sha512-OjvFbGDlR7aIsLqFrraxoqIP3bb+wgp+Aarel5S56lwS3se4uUrwKkChnv1MqsMIv/Opexbmu7qCfHL9T0mBEg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.3.0.tgz", + "integrity": "sha512-RjuvsMnQXQWjVGClrHIVdKOkYZcP/4UrgrZxIFdEyp+NvradqD4bNtPmtTn4mv4NMvVqdFCzaJuGGA9QpKjZmA==", "requires": { "type-fest": "^0.8.1" }, @@ -2571,11 +2466,11 @@ } }, "got": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/got/-/got-11.7.0.tgz", - "integrity": "sha512-7en2XwH2MEqOsrK0xaKhbWibBoZqy+f1RSUoIeF1BLcnf+pyQdDsljWMfmOh+QKJwuvDIiKx38GtPh5wFdGGjg==", + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.0.tgz", + "integrity": "sha512-k9noyoIIY9EejuhaBNLyZ31D5328LeqnyPNXJQb2XlJZcKakLqN5m6O/ikhq/0lw56kUYS54fVm+D1x57YC9oQ==", "requires": { - "@sindresorhus/is": "^3.1.1", + "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", @@ -2685,72 +2580,32 @@ "which-pm-runs": "^1.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-locate": "^4.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -2762,18 +2617,6 @@ "p-limit": "^2.2.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -2782,15 +2625,6 @@ "requires": { "find-up": "^4.0.0" } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -2803,9 +2637,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.1.8", @@ -2818,9 +2652,9 @@ "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==" }, "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz", + "integrity": "sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2877,8 +2711,8 @@ }, "inquirer": { "version": "7.3.3", - "resolved": "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM= sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -2903,26 +2737,6 @@ "es-abstract": "^1.17.0-next.1", "has": "^1.0.3", "side-channel": "^1.0.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "ipaddr.js": { @@ -3114,9 +2928,9 @@ } }, "jsesc": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.1.tgz", - "integrity": "sha512-w+MMxnByppM4jwskitZotEtvtO3a2C7WOz31NxJToGisHuysCAQQU7umb/pA/6soPFe8LGjXFEFbuPuLEPm7Ag==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==" }, "json-buffer": { "version": "3.0.1", @@ -3236,9 +3050,9 @@ } }, "language-subtag-registry": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", - "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==" + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" }, "language-tags": { "version": "1.0.5", @@ -3271,114 +3085,32 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" }, "lint-staged": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.4.2.tgz", - "integrity": "sha512-OLCA9K1hS+Sl179SO6kX0JtnsaKj/MZalEhUj5yAgXsb63qPI/Gfn6Ua1KuZdbfkZNEu3/n5C/obYCu70IMt9g==", + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.1.tgz", + "integrity": "sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw==", "dev": true, "requires": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", - "commander": "^6.0.0", + "commander": "^6.2.0", "cosmiconfig": "^7.0.0", - "debug": "^4.1.1", + "debug": "^4.2.0", "dedent": "^0.7.0", "enquirer": "^2.3.6", - "execa": "^4.0.3", - "listr2": "^2.6.0", + "execa": "^4.1.0", + "listr2": "^3.2.2", "log-symbols": "^4.0.0", "micromatch": "^4.0.2", "normalize-path": "^3.0.0", "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "listr2": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz", - "integrity": "sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.2", - "through": "^2.3.8" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "listr2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.1.1.tgz", - "integrity": "sha512-5HjYFP0FpG2dOuSAth2vQ172rWqI78746itLIvgg0KjHMAyW8CVNc9wzBzEo4/5UYfNbmT28u0J29NoA3W0z+Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.2.tgz", + "integrity": "sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg==", "requires": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", @@ -3462,51 +3194,6 @@ "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "requires": { "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "log-update": { @@ -3520,47 +3207,6 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -3767,11 +3413,6 @@ } } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -3790,9 +3431,9 @@ } }, "mongoose": { - "version": "5.10.9", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.9.tgz", - "integrity": "sha512-7dkr1d6Uyk87hELzoc6B7Zo7kkPTx8rKummk51Y0je2V2Ttsw0KFPwTp1G8JIbBta7Wpw8j15PJi0d33Ode2nw==", + "version": "5.10.11", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.11.tgz", + "integrity": "sha512-R5BFitKW94/S/Z48w+X+qi/eto66jWBcVEVA8nYVkBoBAPFGq7JSYP/0uso+ZHs+7XjSzTuui+SUllzxIrf9yA==", "requires": { "bson": "^1.1.4", "kareem": "2.3.1", @@ -3884,13 +3525,15 @@ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3905,8 +3548,8 @@ }, "mute-stream": { "version": "0.0.8", - "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "natural-compare": { "version": "1.4.0", @@ -4087,35 +3730,14 @@ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "object.entries": { @@ -4126,26 +3748,6 @@ "define-properties": "^1.1.3", "es-abstract": "^1.17.5", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "object.fromentries": { @@ -4157,26 +3759,6 @@ "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "object.values": { @@ -4188,26 +3770,6 @@ "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "on-finished": { @@ -4273,7 +3835,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "p-cancelable": { @@ -4737,7 +4299,7 @@ "dependencies": { "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } @@ -4871,26 +4433,6 @@ "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "regexpp": { @@ -4986,8 +4528,8 @@ }, "run-async": { "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "rxjs": { "version": "6.6.3", @@ -5094,21 +4636,14 @@ }, "http-errors": { "version": "1.7.3", - "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY= sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", "requires": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" - }, - "dependencies": { - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - } } }, "mime": { @@ -5121,6 +4656,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -5168,8 +4708,8 @@ "dependencies": { "es-abstract": { "version": "1.18.0-next.1", - "resolved": "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -5319,47 +4859,28 @@ "internal-slot": "^1.0.2", "regexp.prototype.flags": "^1.3.0", "side-channel": "^1.0.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "es-abstract": "^1.18.0-next.1" }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", @@ -5371,24 +4892,25 @@ } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "es-abstract": "^1.18.0-next.1" }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", @@ -5652,9 +5174,9 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", - "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.1.tgz", + "integrity": "sha512-BuVpRdlwxeIOvmc32AGYvO1KVdPlsmqSh8KDDBxS6kDE5VR7R8OMP1d8MdhaVBvxl4H3551k9akXr0Y1iIB2Wg==", "requires": { "boxen": "^4.2.0", "chalk": "^4.1.0", @@ -5662,20 +5184,33 @@ "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", + "is-installed-globally": "^0.3.2", "is-npm": "^5.0.0", "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", "semver": "^7.3.2", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "dependencies": { + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } } } }, @@ -5706,9 +5241,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==" }, "validate-npm-package-license": { "version": "3.0.4", diff --git a/package.json b/package.json index 4dcaec5..d4714c0 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,12 @@ }, "lint-staged": { "src/**/*.{js,jsx}": [ - "npx eslint . --fix", "git add" + "npx eslint . --fix", + "git add" ], "src/*.{js,jsx}": [ - "npx eslint . --fix", "git add" + "npx eslint . --fix", + "git add" ] }, "husky": { @@ -111,6 +113,7 @@ "destroy": "^1.0.4", "doctrine": "^3.0.0", "dot-prop": "^6.0.0", + "axios": "^0.20.0", "dotenv": "^8.2.0", "duplexer3": "^0.1.4", "ecdsa-sig-formatter": "^1.0.11", @@ -204,6 +207,7 @@ "is-yarn-global": "^0.3.0", "isarray": "^2.0.5", "isexe": "^2.0.0", + "form-data": "^3.0.0", "joi": "^17.2.1", "js-tokens": "^6.0.0", "js-yaml": "^3.14.0", diff --git a/src/index.js b/src/index.js index d4d2616..7433e88 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,7 @@ const authRoutes = require('./routes/authRoutes'); const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); +const scanner = require('./routes/scanner') // MongoDB connection // mongodb://localhost:27017/noderest => meu banco de dados local polupado @@ -18,19 +19,20 @@ mongoose .catch((err) => console.log(err)); // middlewares +app.use(express.json({ limit: 20*1024*1024})); app.use(morgan('dev')); app.use(express.urlencoded({ extended: false })); app.use(express.json()); // routes - -app.use('/auth', authRoutes); -app.use('/plant', plantRoutes); -app.use('/topic', topicRoutes); -app.use('/comment', commentRoutes); +app.use('/auth',authRoutes); +app.use('/plant',plantRoutes); +app.use('/topic',topicRoutes); +app.use('/comment',commentRoutes); +app.use('/scanner',scanner); // starting the server -app.set('port', process.env.PORT || 3000); +app.set('port', process.env.PORT || 2000); app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); }); diff --git a/src/routes/scanner.js b/src/routes/scanner.js new file mode 100644 index 0000000..d855945 --- /dev/null +++ b/src/routes/scanner.js @@ -0,0 +1,47 @@ +const express = require('express'); +const router = express.Router(); +const fs = require('fs'); // File System | Node.js +const axios = require('axios'); // HTTP client +const FormData = require('form-data'); // Readable "multipart/form-data" streams +const path = require('path'); +require('dotenv').config(); + +function openFileReadStream(filePath) { + return new Promise((resolve,reject)=>{ + const readStream = fs.createReadStream(filePath); + readStream.on('open', () => resolve(readStream)); + readStream.on('error', (err) => reject(err)); + }); +} + +router.post('/',async(req,res,next) => { + try{ + const apiKey = process.env.PLANT_NET_API_KEY; // api key do plant net + const {data,filename,mime,plantType} = req.body; + const requireFields = {data,filename,mime,plantType}; + const erros = []; + Object.entries(requireFields).forEach( ([key,value]) => { + if(!value) erros.push(`${key} is required`); + }); + if (erros.length) throw erros; + const fileFormat = mime.split("/").pop(); + const filePath = path.join(__dirname, '..', `${filename}.${fileFormat}`); + + fs.writeFileSync(filePath, data, {encoding: 'base64'}); + + const form = new FormData(); + form.append('organs', plantType); + const stream = await openFileReadStream(filePath); + form.append('images', stream); + + const response = await axios.post(`https://my-api.plantnet.org/v2/identify/all?api-key=${apiKey}`,form, {headers: form.getHeaders()}); + fs.unlinkSync(filePath); + + res.send(response.data); + }catch(err){ + if(Array.isArray(err)) res.status(400).send({errors : err}); + next(err); + } +}); + +module.exports = router; \ No newline at end of file From 105d78598e0fc52fb8a43d80e53f20aba5e2cb30 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Thu, 29 Oct 2020 23:25:14 -0300 Subject: [PATCH 076/147] adding topic search by id and change the response to like qnt Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/routes/scanner.js | 2 +- src/routes/topicRoutes.js | 51 ++++++++++++++++++++++----------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/routes/scanner.js b/src/routes/scanner.js index d855945..a8deaf5 100644 --- a/src/routes/scanner.js +++ b/src/routes/scanner.js @@ -37,7 +37,7 @@ router.post('/',async(req,res,next) => { const response = await axios.post(`https://my-api.plantnet.org/v2/identify/all?api-key=${apiKey}`,form, {headers: form.getHeaders()}); fs.unlinkSync(filePath); - res.send(response.data); + res.send(response.data.results); }catch(err){ if(Array.isArray(err)) res.status(400).send({errors : err}); next(err); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 878f1dd..8b988fe 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -104,32 +104,39 @@ router.get('/list', async (req, res) => { } }); +router.get('/find/:topicId', async (req, res) => { + try { + + const topic = await Topic.findById(req.params.topicId).populate(['user']); + + return res.send({ topic }); + + } catch (err) { + return res.status(400).send({ error: 'Error while listing topics.' + err }); + } +}); + router.post('/like/:topicId', async (req, res) => { - try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Liked!' }); - } catch (err) { - return res.status(400).send({ error: `Error while liking topic.${err}` }); - } + try { + + const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + res.send(topic) + + } catch (err) { + return res.status(400).send({ error: 'Error while liking topic.' + err }); + } }); router.post('/dislike/:topicId', async (req, res) => { - try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Disliked!' }); - } catch (err) { - return res - .status(400) - .send({ error: `Error while dislikinng topic.${err}` }); - } + try { + + const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + res.send(topic) + + + } catch (err) { + return res.status(400).send({ error: 'Error while dislikinng topic.' + err }); + } }); module.exports = router; From c1541916e48c2819e0abf55945a0f49af712f52c Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Thu, 29 Oct 2020 23:31:38 -0300 Subject: [PATCH 077/147] change port to 3000 at index.js --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 7433e88..c00d1a6 100644 --- a/src/index.js +++ b/src/index.js @@ -32,7 +32,7 @@ app.use('/comment',commentRoutes); app.use('/scanner',scanner); // starting the server -app.set('port', process.env.PORT || 2000); +app.set('port', process.env.PORT || 3000); app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); }); From 96d68ccbd7332d27bc6058e7d10066ecd5bbd16f Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Tue, 3 Nov 2020 15:25:04 -0300 Subject: [PATCH 078/147] adding some changes to err treatment Co-authored-by: Antonio Ruan Co-authored-by: Rafael Makaha --- src/index.js | 10 ++++++++++ src/routes/plantRoutes.js | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/index.js b/src/index.js index c00d1a6..4e84633 100644 --- a/src/index.js +++ b/src/index.js @@ -14,9 +14,19 @@ const scanner = require('./routes/scanner') // mongodb://localhost:27017/noderest => meu banco de dados local polupado // mongodb://mongo:27017/backend => banco de dados da develop mongoose +<<<<<<< HEAD .connect('mongodb://localhost:27017/noderest', { useNewUrlParser: true }) .then(() => console.log('MongoDB Connected')) .catch((err) => console.log(err)); +======= + .connect( + 'mongodb://mongo:27017/backend', + { useNewUrlParser: true } + ) + .then(() => console.log('MongoDB Connected')) + .catch(err => console.log(err)); + +>>>>>>> 816d47f (adding some changes to err treatment) // middlewares app.use(express.json({ limit: 20*1024*1024})); diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 3985c29..b9df3b7 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -48,6 +48,7 @@ router.post('/register', async (req, res) => { await plant.save(); +<<<<<<< HEAD return res.send({ plant }); } catch (err) { return res.send(err); @@ -63,6 +64,28 @@ router.get('/', async (req, res) => { } catch (err) { return res.status(400).send({ error: 'Loading plants failed' }); } +======= + return res.send({ plant }); + }catch (err){ + if (err.code == 11000){ + const {scientificName} = req.body; + const plant = await Plant.find({'scientificName':scientificName}).populate('topics'); + return res.send({plant}); + }else{ + return res.send(err); + } + + } +}); +//Listagem de Todas as plantas +router.get('/', async (req , res) => { + try{ + const plants = await Plant.find().populate('topics'); + return res.send({ plants }); + }catch (err){ + return res.status(400).send({ error: 'Loading plants failed'}); + } +>>>>>>> 816d47f (adding some changes to err treatment) }); // Procurando planta por id @@ -77,6 +100,7 @@ router.get('/:plantId', async (req, res) => { .send({ error: 'error when searching for this plant ' }); } }); +<<<<<<< HEAD // Deletando planta por id router.delete('/:plantId', async (req, res) => { @@ -87,6 +111,17 @@ router.delete('/:plantId', async (req, res) => { } catch (err) { return res.status(400).send({ error: 'Error when Delete this plant' }); } +======= +//Detando planta por id +router.delete('/:plantId', async (req , res) => { + try{ + const deleted = await Plant.findByIdAndRemove(req.params.plantId); + + return res.send(deleted); + }catch (err){ + return res.status(400).send({ error: 'Error when Delete this plant'}); + } +>>>>>>> 816d47f (adding some changes to err treatment) }); // Dando upgrade planta por id From 171589aaacd1080b20aade40dd5771d7f443fe8b Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Tue, 3 Nov 2020 17:06:02 -0300 Subject: [PATCH 079/147] rebase Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/index.js | 6 ------ src/models/Plant.js | 13 ++++++------- src/routes/plantRoutes.js | 31 ------------------------------- 3 files changed, 6 insertions(+), 44 deletions(-) diff --git a/src/index.js b/src/index.js index 4e84633..90bdab2 100644 --- a/src/index.js +++ b/src/index.js @@ -14,11 +14,6 @@ const scanner = require('./routes/scanner') // mongodb://localhost:27017/noderest => meu banco de dados local polupado // mongodb://mongo:27017/backend => banco de dados da develop mongoose -<<<<<<< HEAD - .connect('mongodb://localhost:27017/noderest', { useNewUrlParser: true }) - .then(() => console.log('MongoDB Connected')) - .catch((err) => console.log(err)); -======= .connect( 'mongodb://mongo:27017/backend', { useNewUrlParser: true } @@ -26,7 +21,6 @@ mongoose .then(() => console.log('MongoDB Connected')) .catch(err => console.log(err)); ->>>>>>> 816d47f (adding some changes to err treatment) // middlewares app.use(express.json({ limit: 20*1024*1024})); diff --git a/src/models/Plant.js b/src/models/Plant.js index 3294204..080b159 100644 --- a/src/models/Plant.js +++ b/src/models/Plant.js @@ -16,7 +16,6 @@ const PlantSchema = new mongoose.Schema({ }, specie_name: { type: String, - require: true, }, common_name: { type: String, @@ -24,23 +23,23 @@ const PlantSchema = new mongoose.Schema({ }, usage: { type: String, - require: true, + }, first_User: { type: String, - require: true, + }, collection_count: { type: Number, - require: true, + }, extinction: { type: Boolean, - require: true, + }, profile_picture: { type: String, - require: true, + }, gbifID: { type: Number, @@ -48,7 +47,7 @@ const PlantSchema = new mongoose.Schema({ }, stateProvince: { type: String, - require: true, + }, topics: [ { diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index b9df3b7..2adccd7 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -48,23 +48,6 @@ router.post('/register', async (req, res) => { await plant.save(); -<<<<<<< HEAD - return res.send({ plant }); - } catch (err) { - return res.send(err); - } -}); - -// Listagem de Todas as plantas -router.get('/', async (req, res) => { - try { - const plants = await Plant.find().populate('topics'); - - return res.send({ plants }); - } catch (err) { - return res.status(400).send({ error: 'Loading plants failed' }); - } -======= return res.send({ plant }); }catch (err){ if (err.code == 11000){ @@ -85,7 +68,6 @@ router.get('/', async (req , res) => { }catch (err){ return res.status(400).send({ error: 'Loading plants failed'}); } ->>>>>>> 816d47f (adding some changes to err treatment) }); // Procurando planta por id @@ -100,18 +82,6 @@ router.get('/:plantId', async (req, res) => { .send({ error: 'error when searching for this plant ' }); } }); -<<<<<<< HEAD - -// Deletando planta por id -router.delete('/:plantId', async (req, res) => { - try { - const deleted = await Plant.findByIdAndRemove(req.params.plantId); - - return res.send(deleted); - } catch (err) { - return res.status(400).send({ error: 'Error when Delete this plant' }); - } -======= //Detando planta por id router.delete('/:plantId', async (req , res) => { try{ @@ -121,7 +91,6 @@ router.delete('/:plantId', async (req , res) => { }catch (err){ return res.status(400).send({ error: 'Error when Delete this plant'}); } ->>>>>>> 816d47f (adding some changes to err treatment) }); // Dando upgrade planta por id From 2c80cc3c0de091a5c9702f28180e9f6efbfd3162 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Tue, 3 Nov 2020 17:21:14 -0300 Subject: [PATCH 080/147] Removes unused dependencies on package.json Co-authored-by: Marcos Filipe Co-authored-by: Antonio Ruan --- package-lock.json | 4119 ++++++++++++--------------------------------- package.json | 405 +---- 2 files changed, 1113 insertions(+), 3411 deletions(-) diff --git a/package-lock.json b/package-lock.json index d26bd23..afc7a4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,73 +8,22 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", - "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "requires": { - "@babel/types": "^7.11.0" + "@babel/highlight": "^7.10.4" } }, "@babel/helper-validator-identifier": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true }, "@babel/highlight": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", @@ -85,6 +34,7 @@ "version": "3.2.1", "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -93,6 +43,7 @@ "version": "2.4.2", "resolved": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz", "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -102,12 +53,14 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -118,6 +71,7 @@ "version": "1.9.3", "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -125,102 +79,27 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - } - } - }, - "@babel/parser": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", - "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==", - "dev": true - }, - "@babel/runtime": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", - "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", - "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", - "requires": { - "core-js-pure": "^3.0.0", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", - "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.1", - "@babel/types": "^7.12.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz", - "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", - "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true } } }, "@eslint/eslintrc": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", - "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", + "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -233,54 +112,13 @@ "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "@hapi/address": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", - "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", - "requires": { - "@hapi/hoek": "^9.0.0" } }, - "@hapi/formula": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", - "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" - }, "@hapi/hoek": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" }, - "@hapi/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" - }, "@hapi/topo": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", @@ -289,80 +127,56 @@ "@hapi/hoek": "^9.0.0" } }, - "@sindresorhus/is": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz", - "integrity": "sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==" - }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "@sideway/address": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.0.tgz", + "integrity": "sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA==", "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" + "@hapi/hoek": "^9.0.0" } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==" + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, "requires": { - "@types/node": "*" + "defer-to-connect": "^1.0.1" } }, - "@types/node": { - "version": "14.11.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", - "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "requires": { - "@types/node": "*" - } + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "accepts": { "version": "1.3.7", @@ -374,109 +188,59 @@ } }, "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==" + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true }, "acorn-jsx": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==" - }, - "add-filename-increment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-filename-increment/-/add-filename-increment-1.0.0.tgz", - "integrity": "sha512-pFV8VZX8jxuVMIycKvGZkWF/ihnUubu9lbQVnOnZWp7noVxbKQTNj7zG2y9fXdPcuZ6lAN3Drr517HaivGCjdQ==", - "requires": { - "strip-filename-increment": "^2.0.1" - } + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" - }, - "dependencies": { - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - } } }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" - }, - "dependencies": { - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - } } }, "ansi-align": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, "requires": { "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } } }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, "ansi-escapes": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, "requires": { "type-fest": "^0.11.0" }, @@ -484,19 +248,22 @@ "type-fest": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true } } }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -505,170 +272,66 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "sprintf-js": "~1.0.2" } }, "array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0", "is-string": "^1.0.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "array.prototype.flat": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "array.prototype.flatmap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", - "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" - }, "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "axe-core": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.0.2.tgz", - "integrity": "sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA==" - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "dev": true, + "axios": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz", + "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "follow-redirects": "^1.10.0" } }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "basic-auth": { "version": "2.0.1", @@ -676,34 +339,27 @@ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "requires": { "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", + "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "body-parser": { "version": "1.19.0", @@ -730,66 +386,10 @@ "ms": "2.0.0" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -797,6 +397,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, "requires": { "ansi-align": "^3.0.0", "camelcase": "^5.3.1", @@ -808,94 +409,64 @@ "widest-line": "^3.1.0" }, "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, "requires": { - "has-flag": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, "brace-expansion": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.0.tgz", - "integrity": "sha512-A4GHY1GpcTnp+Elcwp1CbKHY6ZQwwVR7QdjZk4fPetEh7oNBfICu+eLvvVvTEMHgC+SGn+XiLAgGo0MnPPBGOg==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } }, "bson": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.2.0.tgz", - "integrity": "sha512-c3MlJqdROnCRvDr/+MLfaDvQ7CvGI4p1hKX45/fvgzSwKRdOjsfRug1NJJ8ty5mXCNtUdjJEWzoZWcBQxV4TyA==", - "requires": { - "buffer": "^5.6.0" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", + "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" }, "buffer-equal-constant-time": { "version": "1.0.1", @@ -907,83 +478,75 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "cacheable-lookup": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", - "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==" - }, "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", + "keyv": "^3.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^4.1.0", - "responselike": "^2.0.0" + "responselike": "^1.0.2" }, "dependencies": { "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "requires": { "pump": "^3.0.0" } }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true } } }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "camelcase": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", - "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, - "chardet": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-1.3.0.tgz", - "integrity": "sha512-cyTQGGptIjIT+CMGT5J/0l9c6Fb+565GCFjjeUTKxUO7w3oR+FcNCMEKTn5xtVKaLFmladN7QF68IiQsv5Fbdw==" - }, "chokidar": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", @@ -998,25 +561,26 @@ "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "clean-stack": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.0.tgz", - "integrity": "sha512-RHxtgFvXsRQ+1AM7dlozLDY7ssmvUUh0XEnfnyhYgJTO6beNZHBogiaCwGM9Q3rFrUkYxOtsZRC0zAturg5bjg==", - "requires": { - "escape-string-regexp": "4.0.0" - } + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -1025,78 +589,68 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } } } }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, "requires": { "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -1104,27 +658,32 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "commander": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.1.0.tgz", - "integrity": "sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA==" + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", + "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", + "dev": true }, "compare-versions": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, "requires": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -1132,41 +691,19 @@ "unique-string": "^2.0.0", "write-file-atomic": "^3.0.0", "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - } } }, "confusing-browser-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", - "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", + "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", + "dev": true }, "contains-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-1.0.0.tgz", - "integrity": "sha1-NFizMhhWA+ju0Y9RjUoQiIo6vJE=", - "requires": { - "normalize-path": "^2.1.1", - "path-starts-with": "^1.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true }, "content-disposition": { "version": "0.5.3", @@ -1174,13 +711,6 @@ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "content-type": { @@ -1189,19 +719,14 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" }, "cookie-signature": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.1.0.tgz", - "integrity": "sha512-Alvs19Vgq07eunykd3Xy2jF0/qSNv2u7KDbAek9H5liV1UMijbqFs5cycZvv5dVsvseT/U4H8/7/w8Koh35C4A==" - }, - "core-js-pure": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", - "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-util-is": { "version": "1.0.2", @@ -1212,6 +737,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -1224,6 +750,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -1234,7 +761,8 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true } } }, @@ -1242,6 +770,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1249,65 +778,58 @@ } }, "crypto-random-string": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-3.3.0.tgz", - "integrity": "sha512-teWAwfMb1d6brahYyKqcBEb5Yp8PJPvPOdOonXDnvaKOTmKDFNVE8E3Y2XQuzjNV/3XMwHbrX9fHWvrhRKt4Gg==", - "requires": { - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } - } - }, - "damerau-levenshtein": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", - "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true }, "debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, "requires": { "ms": "2.1.2" } }, "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "requires": { - "mimic-response": "^3.1.0" + "mimic-response": "^1.0.0" } }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -1318,9 +840,9 @@ "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" }, "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "destroy": { "version": "1.0.4", @@ -1331,14 +853,16 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "requires": { "esutils": "^2.0.2" } }, "dot-prop": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.0.tgz", - "integrity": "sha512-xCbB8IN3IT+tdgoEPOnJmYTNJDrygGFOmiQEiVa5eAD+JEB1vTgMNhVGRnN5Eex/6amck7cdcrixb1qN9Go+GQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, "requires": { "is-obj": "^2.0.0" } @@ -1351,7 +875,8 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "ecdsa-sig-formatter": { "version": "1.0.11", @@ -1359,13 +884,6 @@ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "requires": { "safe-buffer": "^5.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } } }, "ee-first": { @@ -1374,9 +892,10 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "emoji-regex": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.1.1.tgz", - "integrity": "sha512-AaWyDiNO9rbtMIcGl7tdxMcNu8SOLaDLxmQEFT5JhgKufOJzPPkYmgN2QwqTgw4doWMZZQttC6sUWVQjb+1VdA==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, "encodeurl": { "version": "1.0.2", @@ -1387,6 +906,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -1395,6 +915,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "requires": { "ansi-colors": "^4.1.1" } @@ -1403,6 +924,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" }, @@ -1410,7 +932,8 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true } } }, @@ -1418,6 +941,7 @@ "version": "1.17.7", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -1436,6 +960,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -1443,9 +968,10 @@ } }, "escape-goat": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", - "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -1453,18 +979,19 @@ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "eslint": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz", - "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz", + "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.1.3", + "@eslint/eslintrc": "^0.2.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1500,133 +1027,6 @@ "table": "^5.2.3", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "eslint-config-airbnb": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz", - "integrity": "sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^14.2.0", - "object.assign": "^4.1.0", - "object.entries": "^1.1.2" } }, "eslint-config-airbnb-base": { @@ -1640,15 +1040,6 @@ "object.entries": "^1.1.2" } }, - "eslint-config-prettier": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.13.0.tgz", - "integrity": "sha512-LcT0i0LSmnzqK2t764pyIt7kKH2AuuqKRTtJTdddWxOiUja9HdG5GXBVF2gmCTvVYWVsTu8J2MhJLVGRh+pj8w==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, "eslint-import-resolver-node": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", @@ -1681,366 +1072,76 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } - } - } - } - }, - "eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz", - "integrity": "sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "aria-query": "^4.2.2", - "array-includes": "^3.1.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^3.5.4", - "axobject-query": "^2.1.2", - "damerau-levenshtein": "^1.0.6", - "emoji-regex": "^9.0.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1", - "language-tags": "^1.0.5" + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" }, "dependencies": { - "axe-core": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-3.5.5.tgz", - "integrity": "sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q==", - "dev": true - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" + "ms": "2.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "eslint-plugin-prettier": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", - "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", - "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", "dev": true, "requires": { "array-includes": "^3.1.1", - "array.prototype.flatmap": "^1.2.3", - "doctrine": "^2.1.0", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", + "minimatch": "^3.0.4", "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.18.1", - "string.prototype.matchall": "^4.0.2" + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "^2.0.2" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "eslint-plugin-react-hooks": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.2.tgz", - "integrity": "sha512-ykUeqkGyUGgwTtk78C0o8UG2fzwmgJ0qxBGPp2WqRKsTwcLuVf01kTDRAtOsd4u6whX2XOC8749n2vPydP82fg==", - "dev": true - }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -2049,14 +1150,6 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } } }, "eslint-utils": { @@ -2086,33 +1179,32 @@ "version": "7.3.0", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, "requires": { "acorn": "^7.4.0", "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.3.0" }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true } } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esquery": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, "requires": { "estraverse": "^5.1.0" }, @@ -2120,7 +1212,8 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true } } }, @@ -2128,6 +1221,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, "requires": { "estraverse": "^5.2.0" }, @@ -2135,19 +1229,22 @@ "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true } } }, "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true }, "etag": { "version": "1.8.1", @@ -2155,9 +1252,10 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "execa": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", - "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -2174,14 +1272,10 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "requires": { "pump": "^3.0.0" } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" } } }, @@ -2222,21 +1316,6 @@ "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2245,124 +1324,45 @@ "ms": "2.0.0" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } } } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", - "requires": { - "fastest-levenshtein": "^1.0.7" - } - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==" + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "requires": { "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } } }, "file-entry-cache": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, "requires": { "flat-cache": "^2.0.1" } @@ -2371,6 +1371,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -2401,27 +1402,23 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "locate-path": "^2.0.0" } }, "find-versions": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, "requires": { "semver-regex": "^2.0.0" }, @@ -2429,7 +1426,8 @@ "semver-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==" + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "dev": true } } }, @@ -2437,47 +1435,23 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, "requires": { "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" - }, - "dependencies": { - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } - } } }, "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" }, "forwarded": { "version": "0.1.2", @@ -2492,44 +1466,59 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-intrinsic": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", + "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2543,6 +1532,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -2551,52 +1541,50 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "dev": true, "requires": { "ini": "^1.3.5" } }, "globals": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.2.0.tgz", - "integrity": "sha512-OjvFbGDlR7aIsLqFrraxoqIP3bb+wgp+Aarel5S56lwS3se4uUrwKkChnv1MqsMIv/Opexbmu7qCfHL9T0mBEg==", + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, "requires": { "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } } }, "got": { - "version": "11.7.0", - "resolved": "https://registry.npmjs.org/got/-/got-11.7.0.tgz", - "integrity": "sha512-7en2XwH2MEqOsrK0xaKhbWibBoZqy+f1RSUoIeF1BLcnf+pyQdDsljWMfmOh+QKJwuvDIiKx38GtPh5wFdGGjg==", - "requires": { - "@sindresorhus/is": "^3.1.1", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@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": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -2604,68 +1592,57 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true }, "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true }, "http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" }, "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" } } }, - "http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true }, "husky": { "version": "4.3.0", @@ -2795,32 +1772,30 @@ } }, "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true }, "ignore-by-default": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.0.0.tgz", - "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2830,6 +1805,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "requires": { "callsites": "^3.0.0" } @@ -2837,29 +1813,34 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true } } }, "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2873,72 +1854,19 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM= sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", - "requires": { - "es-abstract": "^1.17.0-next.1", - "has": "^1.0.3", - "side-channel": "^1.0.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "ipaddr.js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz", - "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==" - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -2946,12 +1874,14 @@ "is-callable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "requires": { "ci-info": "^2.0.0" } @@ -2960,6 +1890,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -2967,22 +1898,26 @@ "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -2991,6 +1926,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, "requires": { "global-dirs": "^2.0.1", "is-path-inside": "^3.0.1" @@ -2999,55 +1935,65 @@ "is-negative-zero": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true }, "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true }, "is-path-inside": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true }, "is-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, "requires": { "has-symbols": "^1.0.1" } }, "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true }, "is-string": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, "requires": { "has-symbols": "^1.0.1" } @@ -3055,95 +2001,79 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true }, "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "joi": { - "version": "17.2.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.2.1.tgz", - "integrity": "sha512-YT3/4Ln+5YRpacdmfEfrrKh50/kkgX3LgBltjqnlMPIYiZ4hxXZuVJcxmsvxsdeHg9soZfE3qXxHC2tMpCCBOA==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.3.0.tgz", + "integrity": "sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg==", "requires": { - "@hapi/address": "^4.1.0", - "@hapi/formula": "^2.0.0", "@hapi/hoek": "^9.0.0", - "@hapi/pinpoint": "^2.0.0", - "@hapi/topo": "^5.0.0" + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.0", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" } }, - "js-tokens": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-6.0.0.tgz", - "integrity": "sha512-QJUTLeNZNFl/w4MmhHztb1I1UzV42KV/L/zNwNVGlCNc+zl8g01Nve0hPDGU+j2N7ctFZdLot49lUSi78L7WGg==" - }, "js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - } } }, - "jsesc": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.1.tgz", - "integrity": "sha512-w+MMxnByppM4jwskitZotEtvtO3a2C7WOz31NxJToGisHuysCAQQU7umb/pA/6soPFe8LGjXFEFbuPuLEPm7Ag==" - }, "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "json-schema-traverse": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.5.0.tgz", - "integrity": "sha512-x+TRJIQFskrNnFKE2Viz9FCSjK1vIh+H/uaBiOYszh/IcZmAFneQ35H4osWDJp1NPXccuV2I0RMXmi2ZS6Kqcg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.0" } }, "jsonwebtoken": { @@ -3163,30 +2093,6 @@ "semver": "^5.6.0" }, "dependencies": { - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -3194,19 +2100,10 @@ } } }, - "jsx-ast-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", - "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.1" - } - }, "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "requires": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -3214,11 +2111,11 @@ } }, "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "requires": { - "jwa": "^2.0.0", + "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, @@ -3228,30 +2125,19 @@ "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" }, "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", - "requires": { - "json-buffer": "3.0.1" - } - }, - "language-subtag-registry": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", - "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==" - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "requires": { - "language-subtag-registry": "~0.3.2" + "json-buffer": "3.0.0" } }, "latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, "requires": { "package-json": "^6.3.0" } @@ -3260,6 +2146,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -3268,117 +2155,37 @@ "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true }, "lint-staged": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.4.2.tgz", - "integrity": "sha512-OLCA9K1hS+Sl179SO6kX0JtnsaKj/MZalEhUj5yAgXsb63qPI/Gfn6Ua1KuZdbfkZNEu3/n5C/obYCu70IMt9g==", + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.1.tgz", + "integrity": "sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw==", "dev": true, "requires": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", - "commander": "^6.0.0", + "commander": "^6.2.0", "cosmiconfig": "^7.0.0", - "debug": "^4.1.1", + "debug": "^4.2.0", "dedent": "^0.7.0", "enquirer": "^2.3.6", - "execa": "^4.0.3", - "listr2": "^2.6.0", + "execa": "^4.1.0", + "listr2": "^3.2.2", "log-symbols": "^4.0.0", "micromatch": "^4.0.2", "normalize-path": "^3.0.0", "please-upgrade-node": "^3.2.0", "string-argv": "0.3.1", "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "listr2": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-2.6.2.tgz", - "integrity": "sha512-6x6pKEMs8DSIpA/tixiYY2m/GcbgMplMVmhQAaLFxEtNSKLeWTGjtmU57xvv6QCm2XcqzyNXL/cTSVf4IChCRA==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.2", - "through": "^2.3.8" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "listr2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.1.1.tgz", - "integrity": "sha512-5HjYFP0FpG2dOuSAth2vQ172rWqI78746itLIvgg0KjHMAyW8CVNc9wzBzEo4/5UYfNbmT28u0J29NoA3W0z+Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.2.tgz", + "integrity": "sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg==", + "dev": true, "requires": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", @@ -3391,35 +2198,32 @@ } }, "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - } + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { - "p-locate": "^5.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true }, "lodash.includes": { "version": "4.3.0", @@ -3460,59 +2264,16 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, "requires": { "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "log-update": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, "requires": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -3520,91 +2281,42 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" } } }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { "semver": "^6.0.0" }, @@ -3612,19 +2324,21 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true }, "merge-descriptors": { "version": "1.0.1", @@ -3634,7 +2348,8 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "methods": { "version": "1.1.2", @@ -3645,20 +2360,21 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.0.5" } }, "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { "version": "2.1.27", @@ -3666,53 +2382,43 @@ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { "mime-db": "1.44.0" - }, - "dependencies": { - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - } } }, "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - } } }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } }, "mongodb": { "version": "3.6.2", @@ -3725,74 +2431,12 @@ "require_optional": "^1.0.1", "safe-buffer": "^5.1.2", "saslprep": "^1.0.0" - }, - "dependencies": { - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY= sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - } } }, "mongoose": { - "version": "5.10.9", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.9.tgz", - "integrity": "sha512-7dkr1d6Uyk87hELzoc6B7Zo7kkPTx8rKummk51Y0je2V2Ttsw0KFPwTp1G8JIbBta7Wpw8j15PJi0d33Ode2nw==", + "version": "5.10.11", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.11.tgz", + "integrity": "sha512-R5BFitKW94/S/Z48w+X+qi/eto66jWBcVEVA8nYVkBoBAPFGq7JSYP/0uso+ZHs+7XjSzTuui+SUllzxIrf9yA==", "requires": { "bson": "^1.1.4", "kareem": "2.3.1", @@ -3807,15 +2451,10 @@ "sliced": "1.0.1" }, "dependencies": { - "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" - }, - "sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -3873,11 +2512,6 @@ "sliced": "1.0.1" }, "dependencies": { - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3888,13 +2522,8 @@ }, "ms": { "version": "2.0.0", - "resolved": "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, @@ -3903,15 +2532,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true }, "negotiator": { "version": "0.6.2", @@ -3936,33 +2561,6 @@ "update-notifier": "^4.1.0" }, "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -3978,24 +2576,6 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -4010,204 +2590,104 @@ "requires": { "has-flag": "^3.0.0" } - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } } } }, "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, "requires": { "abbrev": "1" } }, "normalize-package-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.0.tgz", - "integrity": "sha512-6lUjEI0d3v6kFrtgA/lOx4zHCWULXsFNIjHolnZCKCTLA6m/G625cdn3O7eNmT0iD3jfo6HZ9cdImGZwf21prw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "requires": { - "hosted-git-info": "^3.0.6", - "resolve": "^1.17.0", - "semver": "^7.3.2", + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-url": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-5.3.0.tgz", - "integrity": "sha512-9/nOVLYYe/dO/eJeQUNaGUF4m4Z5E7cb9oNTKabH+bNf19mqj60txTcveQxL0GlcWLXCxkOu2/LwL8oW0idIDA==" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "requires": { "path-key": "^3.0.0" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "object.entries": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "object.fromentries": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "object.values": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } } }, "on-finished": { @@ -4227,6 +2707,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -4235,26 +2716,22 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "requires": { "mimic-fn": "^2.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - } } }, "opencollective-postinstall": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", + "dev": true }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, "requires": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -4262,229 +2739,74 @@ "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.3" - }, - "dependencies": { - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - } } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true }, "p-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", - "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "^1.0.0" } }, "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { - "p-limit": "^3.0.2" + "p-limit": "^1.1.0" } }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "requires": { "aggregate-error": "^3.0.0" } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, "requires": { "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "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" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@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" - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, - "parent-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", - "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", - "requires": { - "callsites": "^3.1.0" - } - }, "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "error-ex": "^1.2.0" } }, "parseurl": { @@ -4493,75 +2815,69 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-starts-with": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-starts-with/-/path-starts-with-1.0.0.tgz", - "integrity": "sha1-soJDAV6LE43lcmgqxS2kLmRq2E4=", - "requires": { - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true }, "path-to-regexp": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", - "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true }, "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true }, "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, "requires": { - "find-up": "^5.0.0" + "find-up": "^2.1.0" } }, "please-upgrade-node": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, "requires": { "semver-compare": "^1.0.0" } @@ -4569,28 +2885,15 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true }, "prepend-http": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-3.0.1.tgz", - "integrity": "sha512-BLxfZh+m6UiAiCPZFJ4+vYoL7NrRs5XgCTRrjseATAggXhdZKKxn+JUNmuVYWY23bDHgaEHodxw8mnmtVEDtHw==" - }, - "prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -4599,17 +2902,8 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true }, "proxy-addr": { "version": "2.0.6", @@ -4618,24 +2912,19 @@ "requires": { "forwarded": "~0.1.2", "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } } }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -4644,32 +2933,22 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "pupa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", - "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, "requires": { "escape-goat": "^2.0.0" - }, - "dependencies": { - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - } } }, "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, "range-parser": { "version": "1.2.1", @@ -4677,57 +2956,21 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz", - "integrity": "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "requires": { "bytes": "3.1.0", - "http-errors": "1.7.3", + "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - } } }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -4737,171 +2980,72 @@ "dependencies": { "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true } } }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - } + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, "requires": { "picomatch": "^2.2.1" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, "regexp-clone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true }, "registry-auth-token": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "dev": true, "requires": { "rc": "^1.2.8" } @@ -4910,15 +3054,11 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, "requires": { "rc": "^1.2.8" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -4928,11 +3068,6 @@ "semver": "^5.1.0" }, "dependencies": { - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -4944,70 +3079,58 @@ "version": "1.18.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "dev": true, "requires": { "is-core-module": "^2.0.0", "path-parse": "^1.0.6" } }, - "resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==" - }, "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, "requires": { - "lowercase-keys": "^2.0.0" + "lowercase-keys": "^1.0.0" } }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { "glob": "^7.1.3" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, "rxjs": { "version": "6.6.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, "requires": { "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } } }, "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", @@ -5018,6 +3141,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, "requires": { "sparse-bitfield": "^3.0.3" } @@ -5025,17 +3149,20 @@ "semver": { "version": "7.3.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true }, "semver-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, "requires": { "semver": "^6.3.0" }, @@ -5043,15 +3170,11 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, - "semver-regex": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.1.tgz", - "integrity": "sha512-3dPcmFqxblWB/cppQ2qXWqlp9b6GLgAS032+Ec5E0waDVHTkwYIL+7BFI9UqEe0tkoHle2f3pBgvT/Xl95+Dig==" - }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -5087,44 +3210,10 @@ } } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY= sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -5140,76 +3229,77 @@ } }, "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "side-channel": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", - "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", - "requires": { - "es-abstract": "^1.18.0-next.0", - "object-inspect": "^1.8.0" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg= sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" } }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "sift": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/sift/-/sift-13.3.5.tgz", - "integrity": "sha512-apSwBXO0Xpl7zGb26xwq7KGre9/WwyzMxUv0zmI6mLpDJQGOX+CynBgKDaSrn+AXuAuiS4orQo1ty6bU+OEN/Q==" + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } } }, "sliced": { @@ -5217,15 +3307,11 @@ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - }, "sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, "requires": { "memory-pager": "^1.0.2" } @@ -5234,6 +3320,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -5242,12 +3329,14 @@ "spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -5256,110 +3345,76 @@ "spdx-license-ids": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==" + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", + "dev": true }, "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "statuses": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.0.tgz", - "integrity": "sha512-w9jNUUQdpuVoYqXxnyOakhckBbOxRaoYqJscyIBYCS5ixyCnO7nQn7zBZvP9zf5QOPZcz2DLUpE3KsNPbJBOFA==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "ansi-regex": "^4.1.0" } } } }, "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", + "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "es-abstract": "^1.18.0-next.1" }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", @@ -5371,24 +3426,27 @@ } }, "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", + "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "es-abstract": "^1.18.0-next.1" }, "dependencies": { "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", "is-regex": "^1.1.1", "object-inspect": "^1.8.0", "object-keys": "^1.1.1", @@ -5400,17 +3458,18 @@ } }, "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, "requires": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -5420,12 +3479,8 @@ "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true } } }, @@ -5433,86 +3488,79 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } }, "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" - }, - "strip-filename-increment": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-filename-increment/-/strip-filename-increment-2.0.1.tgz", - "integrity": "sha512-+v5xsiTTsdYqkPj7qz1zlngIsjZedhHDi3xp/9bMurV8kXe9DAr732gNVqtt4X8sI3hOqS3nlFfps5gyVcux6w==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } }, "table": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.3.tgz", - "integrity": "sha512-8321ZMcf1B9HvVX/btKv8mMZahCjn2aYrDlpqHaBFCfnox64edeH9kEid0vTLTRR8gWR2A20aDgeuTTea4sVtw==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, "requires": { - "ajv": "^6.12.4", - "lodash": "^4.17.20", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" } }, "term-size": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", - "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-3.0.1.tgz", - "integrity": "sha512-/wtNi1tW1F3nf0OL6AqVxGw9Tr1ET70InMhJuVxPwFdGqparF0nQ4UWGLf2DsoI2bFDtthlBnALncZpUzOnsUw==" + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, "to-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -5526,63 +3574,43 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, "requires": { "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "requires": { - "abbrev": "1" - } - } } }, "tsconfig-paths": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", + "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", "minimist": "^1.2.0", "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } } }, "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "requires": { "prelude-ls": "^1.2.1" } }, "type-fest": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.0.tgz", - "integrity": "sha512-fbDukFPnJBdn2eZ3RR+5mK2slHLFd6gYHY7jna1KWWy4Yr4XysHuCdXRzy+RiG/HwG4WJat00vdC2UHky5eKiQ==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true }, "type-is": { "version": "1.6.18", @@ -5591,19 +3619,13 @@ "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" - }, - "dependencies": { - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - } } }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "requires": { "is-typedarray": "^1.0.0" } @@ -5612,6 +3634,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, "requires": { "debug": "^2.2.0" }, @@ -5620,6 +3643,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -5627,7 +3651,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -5635,15 +3660,9 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, "requires": { "crypto-random-string": "^2.0.0" - }, - "dependencies": { - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - } } }, "unpipe": { @@ -5652,30 +3671,35 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "update-notifier": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", - "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, "requires": { "boxen": "^4.2.0", - "chalk": "^4.1.0", + "chalk": "^3.0.0", "configstore": "^5.0.1", "has-yarn": "^2.1.0", "import-lazy": "^2.1.0", "is-ci": "^2.0.0", "is-installed-globally": "^0.3.1", - "is-npm": "^5.0.0", + "is-npm": "^4.0.0", "is-yarn-global": "^0.3.0", "latest-version": "^5.0.0", "pupa": "^2.0.1", - "semver": "^7.3.2", "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, "dependencies": { - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } } } }, @@ -5683,16 +3707,18 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, "requires": { "punycode": "^2.1.0" } }, "url-parse-lax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-4.0.0.tgz", - "integrity": "sha512-CazaJJZUPr1EWmHjcntgS1F1q6YOpQROD6Z+aTb9obxgOFsRydnqYkRCh5xDJ3LhqTID46JrWaT7PsF7Oms0PA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, "requires": { - "prepend-http": "^3.0.1" + "prepend-http": "^2.0.0" } }, "util-deprecate": { @@ -5706,14 +3732,16 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -5728,6 +3756,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -5735,48 +3764,105 @@ "which-pm-runs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true }, "widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, "requires": { "string-width": "^4.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } } }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/write/-/write-2.0.0.tgz", - "integrity": "sha512-yam9TAqN8sAZokECAejo9HpT2j2s39OgK8i8yxadrFBVo+iSWLfnipRVFulfAw1d2dz5vSuGmlMHYRKG4fysOA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, "requires": { - "add-filename-increment": "^1.0.0" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -5787,17 +3873,14 @@ "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true }, "yaml": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true } } } diff --git a/package.json b/package.json index 4dcaec5..71c2b06 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,11 @@ "lint:js:fix": "npm run lint:js -- --fix" }, "lint-staged": { - "src/**/*.{js,jsx}": [ - "npx eslint . --fix", "git add" + "src/**/\\*.js": [ + "eslint --fix" ], - "src/*.{js,jsx}": [ - "npx eslint . --fix", "git add" + "!(src/**/\\*.js)": [ + "git add" ] }, "husky": { @@ -34,401 +34,20 @@ }, "homepage": "https://github.com/fga-eps-mds/2020.1-GaiaDex-backend#readme", "dependencies": { - "abbrev": "^1.1.1", - "accepts": "^1.3.7", - "acorn": "^8.0.4", - "acorn-jsx": "^5.3.1", - "aggregate-error": "^3.1.0", - "ajv": "^6.12.6", - "ansi-align": "^3.0.0", - "ansi-colors": "^4.1.1", - "ansi-escapes": "^4.3.1", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.3.0", - "anymatch": "^3.1.1", - "argparse": "^2.0.1", - "aria-query": "^4.2.2", - "array-flatten": "^3.0.0", - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "array.prototype.flatmap": "^1.2.3", - "ast-types-flow": "^0.0.7", - "astral-regex": "^2.0.0", - "axe-core": "^4.0.2", - "axobject-query": "^2.2.0", - "balanced-match": "^1.0.0", - "basic-auth": "^2.0.1", - "binary-extensions": "^2.1.0", - "bl": "^4.0.3", - "bluebird": "^3.7.2", - "body-parser": "^1.19.0", - "boxen": "^4.2.0", - "brace-expansion": "^2.0.0", - "braces": "^3.0.2", - "bson": "^4.2.0", - "buffer-equal-constant-time": "^1.0.1", - "bytes": "^3.1.0", - "cacheable-request": "^7.0.1", - "callsites": "^3.1.0", - "camelcase": "^6.1.0", - "chalk": "^4.1.0", - "chardet": "^1.3.0", - "chokidar": "^3.4.3", - "ci-info": "^2.0.0", - "clean-stack": "^3.0.0", - "cli-boxes": "^2.2.1", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "cli-width": "^3.0.0", - "clone-response": "^1.0.2", - "color-convert": "^2.0.1", - "color-name": "^1.1.4", - "commander": "^6.1.0", - "compare-versions": "^3.6.0", - "concat-map": "^0.0.1", - "configstore": "^5.0.1", - "confusing-browser-globals": "^1.0.9", - "contains-path": "^1.0.0", - "content-disposition": "^0.5.3", - "content-type": "^1.0.4", - "cookie": "^0.4.1", - "cookie-signature": "^1.1.0", - "core-js-pure": "^3.6.5", - "cosmiconfig": "^7.0.0", - "core-util-is": "^1.0.2", - "cross-spawn": "^7.0.3", - "crypto-random-string": "^3.3.0", - "damerau-levenshtein": "^1.0.6", - "debug": "^4.2.0", - "decompress-response": "^6.0.0", - "dedent": "^0.7.0", - "deep-extend": "^0.6.0", - "deep-is": "^0.1.3", - "defer-to-connect": "^2.0.0", - "define-properties": "^1.1.3", - "denque": "^1.4.1", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "doctrine": "^3.0.0", - "dot-prop": "^6.0.0", + "axios": "^0.21.0", "dotenv": "^8.2.0", - "duplexer3": "^0.1.4", - "ecdsa-sig-formatter": "^1.0.11", - "ee-first": "^1.1.1", - "emoji-regex": "^9.1.1", - "encodeurl": "^1.0.2", - "end-of-stream": "^1.4.4", - "enquirer": "^2.3.6", - "error-ex": "^1.3.2", - "es-abstract": "^1.17.7", - "es-to-primitive": "^1.2.1", - "escape-goat": "^3.0.0", - "escape-html": "^1.0.3", - "escape-string-regexp": "^4.0.0", - "espree": "^7.3.0", - "esprima": "^4.0.1", - "esquery": "^1.3.1", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0", - "esutils": "^2.0.3", - "etag": "^1.8.1", - "execa": "^4.0.3", "express": "^4.17.1", - "external-editor": "^3.1.0", - "fast-deep-equal": "^3.1.3", - "fast-json-stable-stringify": "^2.1.0", - "fast-levenshtein": "^3.0.0", - "figures": "^3.2.0", - "file-entry-cache": "^5.0.1", - "fill-range": "^7.0.1", - "finalhandler": "^1.1.2", - "find-up": "^5.0.0", - "find-versions": "^3.2.0", - "flat-cache": "^2.0.1", - "flatted": "^3.1.0", - "forwarded": "^0.1.2", - "fresh": "^0.5.2", - "fs.realpath": "^1.0.0", - "function-bind": "^1.1.1", - "functional-red-black-tree": "^1.0.1", - "get-own-enumerable-property-symbols": "^3.0.2", - "get-stream": "^6.0.0", - "glob": "^7.1.6", - "glob-parent": "^5.1.1", - "global-dirs": "^2.0.1", - "globals": "^13.2.0", - "got": "^11.7.0", - "graceful-fs": "^4.2.4", - "has": "^1.0.3", - "has-flag": "^4.0.0", - "has-yarn": "^2.1.0", - "has-symbols": "^1.0.1", - "hosted-git-info": "^3.0.7", - "http-cache-semantics": "^4.1.0", - "http-errors": "^1.8.0", - "human-signals": "^2.1.0", - "iconv-lite": "^0.6.2", - "ignore": "^5.1.8", - "ignore-by-default": "^2.0.0", - "import-fresh": "^3.2.1", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "indent-string": "^4.0.0", - "inflight": "^1.0.6", - "inherits": "^2.0.4", - "ini": "^1.3.5", - "inquirer": "^7.3.3", - "internal-slot": "^1.0.2", - "ipaddr.js": "^2.0.0", - "is-arrayish": "^0.3.2", - "is-binary-path": "^2.1.0", - "is-callable": "^1.2.2", - "is-ci": "^2.0.0", - "is-core-module": "^2.0.0", - "is-date-object": "^1.0.2", - "is-extglob": "^2.1.1", - "is-fullwidth-code-point": "^3.0.0", - "is-glob": "^4.0.1", - "is-installed-globally": "^0.3.2", - "is-negative-zero": "^2.0.0", - "is-npm": "^5.0.0", - "is-number": "^7.0.0", - "is-obj": "^2.0.0", - "is-path-inside": "^3.0.2", - "is-regex": "^1.1.1", - "is-regexp": "^2.1.0", - "is-stream": "^2.0.0", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3", - "is-typedarray": "^1.0.0", - "is-yarn-global": "^0.3.0", - "isarray": "^2.0.5", - "isexe": "^2.0.0", - "joi": "^17.2.1", - "js-tokens": "^6.0.0", - "js-yaml": "^3.14.0", - "jsesc": "^3.0.1", - "json-buffer": "^3.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-schema-traverse": "^0.5.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "json5": "^2.1.3", + "joi": "^17.3.0", "jsonwebtoken": "^8.5.1", - "jsx-ast-utils": "^3.1.0", - "jwa": "^2.0.0", - "jws": "^4.0.0", - "kareem": "^2.3.1", - "keyv": "^4.0.3", - "language-subtag-registry": "^0.3.20", - "language-tags": "^1.0.5", - "latest-version": "^5.1.0", - "levn": "^0.4.1", - "lines-and-columns": "^1.1.6", - "listr2": "^3.1.1", - "load-json-file": "^6.2.0", - "locate-path": "^6.0.0", - "lodash": "^4.17.20", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.1.1", - "log-update": "^4.0.0", - "loose-envify": "^1.4.0", - "log-symbols": "^4.0.0", - "lowercase-keys": "^2.0.0", - "make-dir": "^3.1.0", - "media-typer": "^1.1.0", - "memory-pager": "^1.5.0", - "merge-descriptors": "^1.0.1", - "merge-stream": "^2.0.0", - "methods": "^1.1.2", - "micromatch": "^4.0.2", - "mime": "^2.4.6", - "mime-db": "^1.45.0", - "mime-types": "^2.1.27", - "mimic-fn": "^3.1.0", - "mimic-response": "^3.1.0", - "minimatch": "^3.0.4", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "mongodb": "^3.6.2", - "morgan": "^1.10.0", - "mongoose": "^5.10.9", - "mongoose-legacy-pluralize": "^1.0.2", - "mpath": "^0.7.0", - "mquery": "^3.2.2", - "ms": "^2.1.2", - "mute-stream": "^0.0.8", - "natural-compare": "^1.4.0", - "negotiator": "^0.6.2", - "nopt": "^5.0.0", - "normalize-package-data": "^3.0.0", - "normalize-path": "^3.0.0", - "normalize-url": "^5.3.0", - "npm-run-path": "^4.0.1", - "object-assign": "^4.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "object.entries": "^1.1.2", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "on-finished": "^2.3.0", - "on-headers": "^1.0.2", - "once": "^1.4.0", - "onetime": "^5.1.2", - "opencollective-postinstall": "^2.0.3", - "optionator": "^0.9.1", - "os-tmpdir": "^1.0.2", - "p-cancelable": "^2.0.0", - "p-limit": "^3.0.2", - "p-locate": "^5.0.0", - "p-map": "^4.0.0", - "p-try": "^2.2.0", - "package-json": "^6.5.0", - "parent-module": "^2.0.0", - "parse-json": "^5.1.0", - "parseurl": "^1.3.3", - "path-exists": "^4.0.0", - "path-is-absolute": "^1.0.1", - "path-key": "^3.1.1", - "path-parse": "^1.0.6", - "path-to-regexp": "^6.2.0", - "path-type": "^4.0.0", - "picomatch": "^2.2.2", - "pify": "^5.0.0", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "prelude-ls": "^1.2.1", - "prepend-http": "^3.0.1", - "process-nextick-args": "^2.0.1", - "progress": "^2.0.3", - "prop-types": "^15.7.2", - "proxy-addr": "^2.0.6", - "pstree.remy": "^1.1.8", - "pump": "^3.0.0", - "punycode": "^2.1.1", - "pupa": "^2.0.1", - "qs": "^6.9.4", - "range-parser": "^1.2.1", - "raw-body": "^2.4.1", - "rc": "^1.2.8", - "react-is": "^16.13.1", - "read-pkg": "^5.2.0", - "read-pkg-up": "^7.0.1", - "readable-stream": "^3.6.0", - "readdirp": "^3.5.0", - "regenerator-runtime": "^0.13.7", - "regexp-clone": "^1.0.0", - "regexp.prototype.flags": "^1.3.0", - "regexpp": "^3.1.0", - "registry-auth-token": "^4.2.0", - "registry-url": "^5.1.0", - "require_optional": "^1.0.1", - "resolve": "^1.18.1", - "resolve-from": "^5.0.0", - "responselike": "^2.0.0", - "restore-cursor": "^3.1.0", - "rimraf": "^3.0.2", - "run-async": "^2.4.1", - "rxjs": "^6.6.3", - "safe-buffer": "^5.2.1", - "safer-buffer": "^2.1.2", - "saslprep": "^1.0.3", - "semver": "^7.3.2", - "semver-compare": "^1.0.0", - "semver-diff": "^3.1.1", - "semver-regex": "^3.1.1", - "send": "^0.17.1", - "serve-static": "^1.14.1", - "setprototypeof": "^1.2.0", - "shebang-command": "^2.0.0", - "shebang-regex": "^3.0.0", - "side-channel": "^1.0.3", - "sift": "^13.3.5", - "signal-exit": "^3.0.3", - "slash": "^3.0.0", - "slice-ansi": "^4.0.0", - "sliced": "^1.0.1", - "source-map": "^0.7.3", - "sparse-bitfield": "^3.0.3", - "spdx-correct": "^3.1.1", - "spdx-exceptions": "^2.3.0", - "spdx-expression-parse": "^3.0.1", - "spdx-license-ids": "^3.0.6", - "sprintf-js": "^1.1.2", - "statuses": "^2.0.0", - "string-argv": "^0.3.1", - "string-width": "^4.2.0", - "string.prototype.matchall": "^4.0.2", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1", - "string_decoder": "^1.3.0", - "stringify-object": "^3.3.0", - "strip-ansi": "^6.0.0", - "strip-bom": "^4.0.0", - "strip-final-newline": "^2.0.0", - "strip-json-comments": "^3.1.1", - "supports-color": "^7.2.0", - "table": "^6.0.3", - "term-size": "^2.2.0", - "text-table": "^0.2.0", - "through": "^2.3.8", - "tmp": "^0.2.1", - "to-fast-properties": "^3.0.1", - "to-readable-stream": "^2.1.0", - "to-regex-range": "^5.0.1", - "toidentifier": "^1.0.0", - "touch": "^3.1.0", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.0.3", - "type-check": "^0.4.0", - "type-fest": "^0.18.0", - "type-is": "^1.6.18", - "typedarray-to-buffer": "^3.1.5", - "undefsafe": "^2.0.3", - "unique-string": "^2.0.0", - "unpipe": "^1.0.0", - "update-notifier": "^5.0.0", - "uri-js": "^4.4.0", - "url-parse-lax": "^4.0.0", - "util-deprecate": "^1.0.2", - "utils-merge": "^1.0.1", - "v8-compile-cache": "^2.1.1", - "validate-npm-package-license": "^3.0.4", - "vary": "^1.1.2", - "which": "^2.0.2", - "which-pm-runs": "^1.0.0", - "widest-line": "^3.1.0", - "word-wrap": "^1.2.3", - "wrap-ansi": "^7.0.0", - "wrappy": "^1.0.2", - "write": "^2.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^4.0.0", - "yaml": "^1.10.0" + "mongoose": "^5.10.11", + "morgan": "^1.10.0" }, "devDependencies": { - "babel-eslint": "^10.1.0", - "eslint": "^7.11.0", - "eslint-config-airbnb": "^18.2.0", - "eslint-config-prettier": "^6.13.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", + "eslint": "^7.12.1", + "eslint-config-airbnb-base": "^14.2.0", "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.3.1", - "eslint-plugin-prettier": "^3.1.4", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4.1.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", "husky": "^4.3.0", - "lint-staged": "^10.4.2", - "nodemon": "^2.0.6", - "prettier": "^2.1.2" + "lint-staged": "^10.5.1", + "nodemon": "^2.0.6" } } From 18f2b1ac5ea49830014a3a372c6aacffecf808a4 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Tue, 3 Nov 2020 17:22:21 -0300 Subject: [PATCH 081/147] Renew eslint Co-authored-by: Marcos Filipe Co-authored-by: Antonio Ruan --- .eslintrc.json | 61 +++++++++++++++++++++++++------------------------- package.json | 3 ++- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 5d9f147..539135f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,33 +1,34 @@ { - "extends": [ - "airbnb", - "plugin:prettier/recommended", - "prettier/react" - ], - "parser": "babel-eslint", - "env": { - "browser": true, - "commonjs": true, - "es6": true, - "jest": true, - "node": true - }, - "rules": { - "no-console": "off", - "no-underscore-dangle": "off", - "max-len": [ - "warn", - { - "code": 80, - "tabWidth": 2, - "comments": 80, - "ignoreComments": false, - "ignoreTrailingComments": true, - "ignoreUrls": true, - "ignoreStrings": true, - "ignoreTemplateLiterals": true, - "ignoreRegExpLiterals": true + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": [ + "airbnb-base", + "plugin:prettier/recommended" + ], + "parserOptions": { + "ecmaVersion": 12 + }, + "rules": { + "no-console": "off", + "no-underscore-dangle": "off", + "max-len": [ + "warn", + { + "code": 80, + "tabWidth": 2, + "comments": 80, + "ignoreComments": false, + "ignoreTrailingComments": true, + "ignoreUrls": true, + "ignoreStrings": true, + "ignoreTemplateLiterals": true, + "ignoreRegExpLiterals": true + } + ] } - ] - } } diff --git a/package.json b/package.json index 71c2b06..586445c 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ }, "lint-staged": { "src/**/\\*.js": [ - "eslint --fix" + "npx eslint . --fix", + "git add" ], "!(src/**/\\*.js)": [ "git add" From f8cf96b5b32d13d267ded14d52313d5ae2e28784 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Tue, 3 Nov 2020 17:22:39 -0300 Subject: [PATCH 082/147] Fix ES-lint errors Co-authored-by: Marcos Filipe Co-authored-by: Antonio Ruan --- src/routes/authRoutes.js | 3 ++- src/routes/commentRoutes.js | 10 ++++------ src/routes/plantRoutes.js | 4 ++-- src/routes/topicRoutes.js | 10 ++++++---- src/schemas/userSchema.js | 3 ++- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index c29b72c..3ba1303 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -39,10 +39,11 @@ router.post('/signup', async (req, res) => { await User.findOne({ username: newUserData.username }); - if (result.error) + if (result.error) { return res .status(400) .send({ error: `Error while signing up. ${result.error}` }); + } const user = new User(newUserData); await user.save(); diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index f3bfcc2..bc6c881 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -7,8 +7,7 @@ const Comment = require('../models/Comment'); router.post('/create/:topicId/:userId', async (req, res) => { try { - if (!req.body.text) - return res.status(400).send({ error: 'Comment should not be empty' }); + if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); const comment = await Comment.create({ ...req.body, @@ -33,8 +32,7 @@ router.put('/update/:commentId', async (req, res) => { await Comment.findById(req.params.commentId); const newData = req.body; - if (!newData.text) - return res.status(400).send({ error: 'Comment should not be empty' }); + if (!newData.text) return res.status(400).send({ error: 'Comment should not be empty' }); await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { useFindAndModify: false, @@ -75,7 +73,7 @@ router.post('/like/:commentId', async (req, res) => { await Comment.findOneAndUpdate( { _id: req.params.commentId }, { $inc: { likes: 1 } }, - { useFindAndModify: false } + { useFindAndModify: false }, ); return res.send({ message: 'Liked!' }); } catch (err) { @@ -88,7 +86,7 @@ router.post('/dislike/:commentId', async (req, res) => { await Comment.findOneAndUpdate( { _id: req.params.commentId }, { $inc: { dislikes: 1 } }, - { useFindAndModify: false } + { useFindAndModify: false }, ); return res.send({ message: 'Disliked!' }); } catch (err) { diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 3985c29..4b3e297 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -124,7 +124,7 @@ router.put('/:plantId', async (req, res) => { gbifID, stateProvince, }, - { new: true } + { new: true }, ); plant.topics = []; @@ -137,7 +137,7 @@ router.put('/:plantId', async (req, res) => { await plantTopic.save(); plant.topics.push(plantTopic); - }) + }), ); await plant.save(); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 878f1dd..4f2c570 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -14,10 +14,11 @@ router.post('/create/:plantId/:userId', async (req, res) => { const result = topicSchema.validate(req.body); - if (result.error) + if (result.error) { return res .status(400) .send({ error: `Error while creating topic. ${result.error}` }); + } const topic = await Topic.create({ ...req.body, @@ -49,10 +50,11 @@ router.put('/update/:topicId', async (req, res) => { if (!newData.description) newData.description = topic.description; const result = topicSchema.validate(newData); - if (result.error) + if (result.error) { return res .status(400) .send({ error: `Error while creating topic. ${result.error}` }); + } await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { useFindAndModify: false, @@ -109,7 +111,7 @@ router.post('/like/:topicId', async (req, res) => { await Topic.findOneAndUpdate( { _id: req.params.topicId }, { $inc: { likes: 1 } }, - { useFindAndModify: false } + { useFindAndModify: false }, ); return res.send({ message: 'Liked!' }); } catch (err) { @@ -122,7 +124,7 @@ router.post('/dislike/:topicId', async (req, res) => { await Topic.findOneAndUpdate( { _id: req.params.topicId }, { $inc: { dislikes: 1 } }, - { useFindAndModify: false } + { useFindAndModify: false }, ); return res.send({ message: 'Disliked!' }); } catch (err) { diff --git a/src/schemas/userSchema.js b/src/schemas/userSchema.js index 20101d6..49f72f3 100644 --- a/src/schemas/userSchema.js +++ b/src/schemas/userSchema.js @@ -1,7 +1,8 @@ const Joi = require('joi'); const userSchema = Joi.object({ - username: Joi.string().alphanum().min(4).max(30).required(), + username: Joi.string().alphanum().min(4).max(30) + .required(), password: Joi.string().min(8).required(), passwordConfirmation: Joi.string() .min(8) From cdb336bac807485c0bce6f21a7aaec3bd4a5f0c7 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Tue, 3 Nov 2020 17:30:05 -0300 Subject: [PATCH 083/147] Change husky script call Co-authored-by: Marcos Filipe Co-authored-by: Antonio Ruan --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 586445c..abdfbd3 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,12 @@ "lint:js:fix": "npm run lint:js -- --fix" }, "lint-staged": { - "src/**/\\*.js": [ + "src/**/*.js": [ "npx eslint . --fix", "git add" ], - "!(src/**/\\*.js)": [ + "src/*.js": [ + "npx eslint . --fix", "git add" ] }, From 30b77d64fbc6bf56ee9c40221e1655643f0be895 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Tue, 3 Nov 2020 17:37:23 -0300 Subject: [PATCH 084/147] Add prettier module to package.json Co-authored-by: Marcos Filipe Co-authored-by: Antonio Ruan --- package-lock.json | 42 ++++++++++++++++++++++++++++++++++++++++++ package.json | 5 ++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index afc7a4d..266fd0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1040,6 +1040,15 @@ "object.entries": "^1.1.2" } }, + "eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, "eslint-import-resolver-node": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", @@ -1142,6 +1151,14 @@ } } }, + "eslint-plugin-prettier": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", + "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -1337,6 +1354,11 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1505,6 +1527,12 @@ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -2894,6 +2922,20 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "dev": true }, + "prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "requires": { + "fast-diff": "^1.1.2" + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", diff --git a/package.json b/package.json index abdfbd3..6da81b9 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "dependencies": { "axios": "^0.21.0", "dotenv": "^8.2.0", + "eslint-plugin-prettier": "^3.1.4", "express": "^4.17.1", "joi": "^17.3.0", "jsonwebtoken": "^8.5.1", @@ -47,9 +48,11 @@ "devDependencies": { "eslint": "^7.12.1", "eslint-config-airbnb-base": "^14.2.0", + "eslint-config-prettier": "^6.15.0", "eslint-plugin-import": "^2.22.1", "husky": "^4.3.0", "lint-staged": "^10.5.1", - "nodemon": "^2.0.6" + "nodemon": "^2.0.6", + "prettier": "^2.1.2" } } From b7d6c626f145fe231ee420e030a612faf3a0ee9f Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Tue, 3 Nov 2020 18:40:12 -0300 Subject: [PATCH 085/147] Fix eslint errors Co-authored-by: Marcos Filipe Co-authored-by: Antonio Ruan --- src/routes/commentRoutes.js | 10 ++++++---- src/routes/plantRoutes.js | 4 ++-- src/routes/topicRoutes.js | 4 ++-- src/schemas/userSchema.js | 3 +-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index bc6c881..f3bfcc2 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -7,7 +7,8 @@ const Comment = require('../models/Comment'); router.post('/create/:topicId/:userId', async (req, res) => { try { - if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); + if (!req.body.text) + return res.status(400).send({ error: 'Comment should not be empty' }); const comment = await Comment.create({ ...req.body, @@ -32,7 +33,8 @@ router.put('/update/:commentId', async (req, res) => { await Comment.findById(req.params.commentId); const newData = req.body; - if (!newData.text) return res.status(400).send({ error: 'Comment should not be empty' }); + if (!newData.text) + return res.status(400).send({ error: 'Comment should not be empty' }); await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { useFindAndModify: false, @@ -73,7 +75,7 @@ router.post('/like/:commentId', async (req, res) => { await Comment.findOneAndUpdate( { _id: req.params.commentId }, { $inc: { likes: 1 } }, - { useFindAndModify: false }, + { useFindAndModify: false } ); return res.send({ message: 'Liked!' }); } catch (err) { @@ -86,7 +88,7 @@ router.post('/dislike/:commentId', async (req, res) => { await Comment.findOneAndUpdate( { _id: req.params.commentId }, { $inc: { dislikes: 1 } }, - { useFindAndModify: false }, + { useFindAndModify: false } ); return res.send({ message: 'Disliked!' }); } catch (err) { diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 4b3e297..3985c29 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -124,7 +124,7 @@ router.put('/:plantId', async (req, res) => { gbifID, stateProvince, }, - { new: true }, + { new: true } ); plant.topics = []; @@ -137,7 +137,7 @@ router.put('/:plantId', async (req, res) => { await plantTopic.save(); plant.topics.push(plantTopic); - }), + }) ); await plant.save(); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 4f2c570..d03c9c6 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -111,7 +111,7 @@ router.post('/like/:topicId', async (req, res) => { await Topic.findOneAndUpdate( { _id: req.params.topicId }, { $inc: { likes: 1 } }, - { useFindAndModify: false }, + { useFindAndModify: false } ); return res.send({ message: 'Liked!' }); } catch (err) { @@ -124,7 +124,7 @@ router.post('/dislike/:topicId', async (req, res) => { await Topic.findOneAndUpdate( { _id: req.params.topicId }, { $inc: { dislikes: 1 } }, - { useFindAndModify: false }, + { useFindAndModify: false } ); return res.send({ message: 'Disliked!' }); } catch (err) { diff --git a/src/schemas/userSchema.js b/src/schemas/userSchema.js index 49f72f3..20101d6 100644 --- a/src/schemas/userSchema.js +++ b/src/schemas/userSchema.js @@ -1,8 +1,7 @@ const Joi = require('joi'); const userSchema = Joi.object({ - username: Joi.string().alphanum().min(4).max(30) - .required(), + username: Joi.string().alphanum().min(4).max(30).required(), password: Joi.string().min(8).required(), passwordConfirmation: Joi.string() .min(8) From 9b293a4e267921d4329e7f48e2206ae849098d67 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Fri, 6 Nov 2020 15:19:40 -0300 Subject: [PATCH 086/147] change the response of routes to be a topic, to upgrade the refresh page Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/routes/commentRoutes.js | 4 ++-- src/routes/scanner.js | 2 +- src/routes/topicRoutes.js | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index f3bfcc2..05fb60b 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -15,14 +15,14 @@ router.post('/create/:topicId/:userId', async (req, res) => { user: req.params.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId); + const topic = await Topic.findById(req.params.topicId).populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]);; await comment.save(); topic.comments.push(comment); await topic.save(); - return res.send({ message: 'Comment successfully registered.' }); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/scanner.js b/src/routes/scanner.js index a8deaf5..d855945 100644 --- a/src/routes/scanner.js +++ b/src/routes/scanner.js @@ -37,7 +37,7 @@ router.post('/',async(req,res,next) => { const response = await axios.post(`https://my-api.plantnet.org/v2/identify/all?api-key=${apiKey}`,form, {headers: form.getHeaders()}); fs.unlinkSync(filePath); - res.send(response.data.results); + res.send(response.data); }catch(err){ if(Array.isArray(err)) res.status(400).send({errors : err}); next(err); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 8b988fe..e584fcd 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -107,8 +107,8 @@ router.get('/list', async (req, res) => { router.get('/find/:topicId', async (req, res) => { try { - const topic = await Topic.findById(req.params.topicId).populate(['user']); - + const topic = await Topic.findById(req.params.topicId) + .populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]); return res.send({ topic }); } catch (err) { @@ -120,6 +120,7 @@ router.post('/like/:topicId', async (req, res) => { try { const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + .populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]); res.send(topic) } catch (err) { @@ -131,6 +132,7 @@ router.post('/dislike/:topicId', async (req, res) => { try { const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + .populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]); res.send(topic) From 9ee9b96e35532d15391c5b4c829b6e813fed9c66 Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Mon, 9 Nov 2020 18:14:00 -0300 Subject: [PATCH 087/147] Fix dev dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: João Vítor Morandi --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6da81b9..bee26a5 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "dependencies": { "axios": "^0.21.0", "dotenv": "^8.2.0", - "eslint-plugin-prettier": "^3.1.4", "express": "^4.17.1", "joi": "^17.3.0", "jsonwebtoken": "^8.5.1", @@ -50,6 +49,7 @@ "eslint-config-airbnb-base": "^14.2.0", "eslint-config-prettier": "^6.15.0", "eslint-plugin-import": "^2.22.1", + "eslint-plugin-prettier": "^3.1.4", "husky": "^4.3.0", "lint-staged": "^10.5.1", "nodemon": "^2.0.6", From 0b991fd9e6102874bf5d2b3f8c3019403140c3f6 Mon Sep 17 00:00:00 2001 From: Antonio Ruan Moura Barreto Date: Tue, 10 Nov 2020 19:22:24 -0300 Subject: [PATCH 088/147] Modified response of Comment create, and add topic find by id router Co-authored-by: Marcos Filipe --- package.json | 6 ++++-- src/index.js | 2 +- src/routes/commentRoutes.js | 14 +++++++++++--- src/routes/topicRoutes.js | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 4dcaec5..c6b3acf 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,12 @@ }, "lint-staged": { "src/**/*.{js,jsx}": [ - "npx eslint . --fix", "git add" + "npx eslint . --fix", + "git add" ], "src/*.{js,jsx}": [ - "npx eslint . --fix", "git add" + "npx eslint . --fix", + "git add" ] }, "husky": { diff --git a/src/index.js b/src/index.js index d4d2616..19cf9c0 100644 --- a/src/index.js +++ b/src/index.js @@ -13,7 +13,7 @@ const commentRoutes = require('./routes/commentRoutes'); // mongodb://localhost:27017/noderest => meu banco de dados local polupado // mongodb://mongo:27017/backend => banco de dados da develop mongoose - .connect('mongodb://localhost:27017/noderest', { useNewUrlParser: true }) + .connect('mongodb://mongo:27017/backend', { useNewUrlParser: true }) .then(() => console.log('MongoDB Connected')) .catch((err) => console.log(err)); diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index f3bfcc2..79f12dd 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -15,14 +15,22 @@ router.post('/create/:topicId/:userId', async (req, res) => { user: req.params.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId); + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); await comment.save(); topic.comments.push(comment); await topic.save(); - - return res.send({ message: 'Comment successfully registered.' }); + const topicCorrect = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); + return res.send(topicCorrect); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 878f1dd..a1e9acb 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -132,4 +132,18 @@ router.post('/dislike/:topicId', async (req, res) => { } }); +router.get('/find/:topicId', async (req, res) => { + try { + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); + + return res.send({ topic }); + } catch (err) { + return res.status(400).send({ error: `Error while find topic id.${err}` }); + } +}); + module.exports = router; From 552a5846644b3ee5b32a51915f6269eb3141d13c Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 00:14:44 -0300 Subject: [PATCH 089/147] Adding Likes's model and commentLike route and this route check if the user liked the post previously --- src/models/Comment.js | 12 +++---- src/models/Likes.js | 25 +++++++++++++++ src/models/Topic.js | 12 +++---- src/routes/auth.js | 2 +- src/routes/commentRoutes.js | 64 +++++++++++++++++++++++++------------ src/routes/topicRoutes.js | 6 ++-- 6 files changed, 81 insertions(+), 40 deletions(-) create mode 100644 src/models/Likes.js diff --git a/src/models/Comment.js b/src/models/Comment.js index 79ff587..f6afa51 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -17,14 +17,10 @@ const CommentSchema = new mongoose.Schema({ ref: 'Topic', require: true, }, - likes: { - type: Number, - default: 0, - }, - dislikes: { - type: Number, - default: 0, - }, + likes: [{ + type: Schema.Types.ObjectId, + ref: 'Like', + }], }); const Comment = mongoose.model('Comment', CommentSchema); diff --git a/src/models/Likes.js b/src/models/Likes.js new file mode 100644 index 0000000..b8ed582 --- /dev/null +++ b/src/models/Likes.js @@ -0,0 +1,25 @@ +const mongoose = require('mongoose'); + +const { Schema } = mongoose; + +const likeSchema = new Schema({ + user: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topic', + + }, + comment: { + type: Schema.Types.ObjectId, + ref: 'Comment', + + }, +}); + +const Like = mongoose.model('Like', likeSchema); + +module.exports = Like; diff --git a/src/models/Topic.js b/src/models/Topic.js index 9b41e3c..f8f541a 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -20,14 +20,10 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, - likes: { - type: Number, - default: 0, - }, - dislikes: { - type: Number, - default: 0, - }, + likes: [{ + type: Schema.Types.ObjectId, + ref: 'Like', + }], comments: [ { type: Schema.Types.ObjectId, diff --git a/src/routes/auth.js b/src/routes/auth.js index 2b6ba85..6811563 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - secret: process.env.SECRET, + secret: 'd41d8cd98f00b204e9800998ecf8427e', }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 79f12dd..1cd1f0c 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,11 +1,13 @@ const express = require('express'); const router = express.Router(); - +const User = require('../models/User'); +const Like = require('../models/Likes'); const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); +const { auth, authConfig } = require('./auth'); -router.post('/create/:topicId/:userId', async (req, res) => { +router.post('/create/:topicId/:userId',auth, async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); @@ -78,32 +80,52 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId', async (req, res) => { +router.post('/like/:commentId/:userId', async (req, res) => { try { - await Comment.findOneAndUpdate( - { _id: req.params.commentId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Liked!' }); + const user = await User.findById(req.params.userId); + const comment = await Comment.findById(req.params.commentId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + const isLiked = await Like.findOne({user:req.params.userId}) + console.log(isLiked == null) + if(isLiked == null){ + const like = await Like.create({ + user: user, + comment: comment, + }); + await like.save(); + comment.likes.push(like); + await comment.save(); + const commenttrue = await Comment.findById(req.params.commentId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(commenttrue); + } + else{ + return res.send(comment); + } } catch (err) { - return res.status(400).send({ error: `Error while liking comment.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:commentId', async (req, res) => { +router.post('/dislike/:commentId/:userId', async (req, res) => { try { - await Comment.findOneAndUpdate( - { _id: req.params.commentId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Disliked!' }); + const like = Like.findOne({user:req.params.userId}) + // await Like.findByIdAndRemove({user:req.params.userId}); + const commenttrue = await Comment.findById(req.params.commentId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(like); + } catch (err) { - return res - .status(400) - .send({ error: `Error while linking comment.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); - module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index a1e9acb..43effc9 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -96,8 +96,10 @@ router.delete('/delete/:topicId', async (req, res) => { router.get('/list', async (req, res) => { try { - const topic = await Topic.find().populate(['user']); - + const topic = await Topic.find().populate([ + { path: 'likes'}, + { path: 'comments' }, + ]); return res.send({ topic }); } catch (err) { return res.status(400).send({ error: `Error while listing topics.${err}` }); From 2afa3cccc95dfbb93a4f0caf5040099a7832258d Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 01:44:11 -0300 Subject: [PATCH 090/147] Adding topicLike route and this route check if the user is auth --- src/routes/auth.js | 2 +- src/routes/commentRoutes.js | 5 ++--- src/routes/topicRoutes.js | 39 +++++++++++++++++++++++++++---------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/routes/auth.js b/src/routes/auth.js index 6811563..b0951f8 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -26,7 +26,7 @@ function auth(req, res, next) { try { const { userId } = jwt.verify(token, authConfig.secret); - req.userId = userId; + res.userId = userId; return next(); } catch (err) { req.redirect('/login_page'); diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 1cd1f0c..bbd9cdb 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -80,7 +80,7 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId/:userId', async (req, res) => { +router.post('/like/:commentId/:userId',auth, async (req, res) => { try { const user = await User.findById(req.params.userId); const comment = await Comment.findById(req.params.commentId).populate([ @@ -88,8 +88,7 @@ router.post('/like/:commentId/:userId', async (req, res) => { { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.params.userId}) - console.log(isLiked == null) + const isLiked = await Like.findOne({user:req.params.userId,comment:req.params.commentId}) if(isLiked == null){ const like = await Like.create({ user: user, diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 43effc9..62a6ef0 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -1,12 +1,12 @@ const express = require('express'); const router = express.Router(); - +const Like = require('../models/Likes'); const Topic = require('../models/Topic'); const User = require('../models/User'); const Plant = require('../models/Plant'); const topicSchema = require('../schemas/topicSchema'); - +const { auth, authConfig } = require('./auth'); router.post('/create/:plantId/:userId', async (req, res) => { try { const user = await User.findById(req.params.userId); @@ -106,16 +106,35 @@ router.get('/list', async (req, res) => { } }); -router.post('/like/:topicId', async (req, res) => { +router.post('/like/:topicId/:userId',auth, async (req, res) => { try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Liked!' }); + const user = await User.findById(req.params.userId); + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + const isLiked = await Like.findOne({user:req.params.userId,topic:req.params.topicId}) + if(isLiked == null){ + const like = await Like.create({ + user: user, + topic: topic, + }); + await like.save(); + topic.likes.push(like); + await topic.save(); + const topictrue = await Topic.findById(req.params.topicId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(topictrue); + } + else{ + return res.send(topic); + } } catch (err) { - return res.status(400).send({ error: `Error while liking topic.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); From 0faa6d26050862ff3d107ed6dd34f84e3e83bf3b Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 13:43:16 -0300 Subject: [PATCH 091/147] Adding dislike toppic and comment routes Co-authored-by: Antonio Ruan --- src/routes/commentRoutes.js | 23 +++++++++++++---------- src/routes/topicRoutes.js | 22 +++++++++++----------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index bbd9cdb..8e2c338 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -112,19 +112,22 @@ router.post('/like/:commentId/:userId',auth, async (req, res) => { } }); -router.post('/dislike/:commentId/:userId', async (req, res) => { +router.post('/dislike/:commentId/:userId',auth, async (req, res) => { try { - const like = Like.findOne({user:req.params.userId}) - // await Like.findByIdAndRemove({user:req.params.userId}); - const commenttrue = await Comment.findById(req.params.commentId).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'toppic' }, - ]); - return res.send(like); - + const comment = await Comment.findById(req.params.commentId); + const like = await Like.findOne({user:req.params.userId,comment:req.params.commentId}); + const index = comment.likes.indexOf(like._id); + if (index > -1) { + comment.likes.splice(index, 1); + } + + comment.save(); + + await Like.findByIdAndRemove(like._id).populate('user'); + return res.send(comment); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); + module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 62a6ef0..6d39415 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -138,21 +138,21 @@ router.post('/like/:topicId/:userId',auth, async (req, res) => { } }); -router.post('/dislike/:topicId', async (req, res) => { +router.post('/dislike/:topicId/:userId',auth, async (req, res) => { try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Disliked!' }); + const topic = await Topic.findById(req.params.topicId); + const like = await Like.findOne({user:req.params.userId,topic:req.params.topicId}); + const index = topic.likes.indexOf(like._id); + if (index > -1) { + topic.likes.splice(index, 1); + } + topic.save(); + await Like.findByIdAndRemove(like._id).populate('user'); + return res.send(topic); } catch (err) { - return res - .status(400) - .send({ error: `Error while dislikinng topic.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); - router.get('/find/:topicId', async (req, res) => { try { const topic = await Topic.findById(req.params.topicId).populate([ From 1d40bb7bdd76e3e90f1f2dcfaf930680494db8b8 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 16:21:19 -0300 Subject: [PATCH 092/147] userId now came from authtoken, not url more Co-authored-by: Antonio Ruan --- src/routes/auth.js | 15 ++++++++++----- src/routes/commentRoutes.js | 36 +++++++++++++++++++++++++----------- src/routes/topicRoutes.js | 7 +++++-- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/routes/auth.js b/src/routes/auth.js index b0951f8..1017bf9 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -24,13 +24,18 @@ function auth(req, res, next) { return res.status(401).send({ Error: 'Token malformated' }); } + + jwt.verify(token, authConfig.secret, function(err ,decoded){ try { - const { userId } = jwt.verify(token, authConfig.secret); - res.userId = userId; - return next(); - } catch (err) { - req.redirect('/login_page'); + req.userId = decoded.id; + console.log(decoded.id) + next(); + } + catch (err) { return res.status(400); } + }); + + } module.exports = { authConfig, auth }; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 8e2c338..30395a4 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,5 +1,5 @@ const express = require('express'); - +const jwt = require('jsonwebtoken'); const router = express.Router(); const User = require('../models/User'); const Like = require('../models/Likes'); @@ -80,15 +80,20 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId/:userId',auth, async (req, res) => { +router.post('/like/:commentId',auth, async (req, res) => { try { - const user = await User.findById(req.params.userId); + const user = await User.findById(req.userId); const comment = await Comment.findById(req.params.commentId).populate([ { path: 'likes'}, { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.params.userId,comment:req.params.commentId}) + const topic = await Topic.findById(comment.topic).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + const isLiked = await Like.findOne({user:req.userId,comment:req.params.commentId}) if(isLiked == null){ const like = await Like.create({ user: user, @@ -97,25 +102,27 @@ router.post('/like/:commentId/:userId',auth, async (req, res) => { await like.save(); comment.likes.push(like); await comment.save(); - const commenttrue = await Comment.findById(req.params.commentId).populate([ + const topicTrue = await Topic.findById(comment.topic).populate([ { path: 'likes'}, { path: 'user' }, - { path: 'toppic' }, + { path: 'comments' }, ]); - return res.send(commenttrue); + return res.send(topicTrue); } else{ - return res.send(comment); + return res.send(topic); } } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:commentId/:userId',auth, async (req, res) => { +router.post('/dislike/:commentId',auth, async (req, res) => { try { const comment = await Comment.findById(req.params.commentId); - const like = await Like.findOne({user:req.params.userId,comment:req.params.commentId}); + const topic = await Topic.findById(comment.topic); + const like = await Like.findOne({user:req.userId,comment:req.params.commentId}); + if(like != null){ const index = comment.likes.indexOf(like._id); if (index > -1) { comment.likes.splice(index, 1); @@ -124,7 +131,14 @@ router.post('/dislike/:commentId/:userId',auth, async (req, res) => { comment.save(); await Like.findByIdAndRemove(like._id).populate('user'); - return res.send(comment); + const topicTrue = await Topic.findById(comment.topic).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'comments' }, + ]); + return res.send(topicTrue); + } + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 6d39415..3c4ef47 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -118,7 +118,7 @@ router.post('/like/:topicId/:userId',auth, async (req, res) => { if(isLiked == null){ const like = await Like.create({ user: user, - topic: topic, + topic: topic }); await like.save(); topic.likes.push(like); @@ -128,9 +128,11 @@ router.post('/like/:topicId/:userId',auth, async (req, res) => { { path: 'user' }, { path: 'toppic' }, ]); + console.log(topictrue.likes.length) return res.send(topictrue); } else{ + console.log(topic.likes.length) return res.send(topic); } } catch (err) { @@ -146,6 +148,7 @@ router.post('/dislike/:topicId/:userId',auth, async (req, res) => { if (index > -1) { topic.likes.splice(index, 1); } + console.log(topic.likes.length) topic.save(); await Like.findByIdAndRemove(like._id).populate('user'); return res.send(topic); @@ -161,7 +164,7 @@ router.get('/find/:topicId', async (req, res) => { { path: 'plant' }, ]); - return res.send({ topic }); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while find topic id.${err}` }); } From 1f0e2e3372422286ddffe43f40f7f1cacd9bba00 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 18:23:57 -0300 Subject: [PATCH 093/147] adding eslint on my pages Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/models/Comment.js | 10 +++-- src/models/Likes.js | 28 ++++++------ src/models/Topic.js | 10 +++-- src/routes/auth.js | 17 +++----- src/routes/commentRoutes.js | 85 +++++++++++++++++++------------------ src/routes/topicRoutes.js | 60 ++++++++++++++------------ 6 files changed, 107 insertions(+), 103 deletions(-) diff --git a/src/models/Comment.js b/src/models/Comment.js index f6afa51..4388c13 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -17,10 +17,12 @@ const CommentSchema = new mongoose.Schema({ ref: 'Topic', require: true, }, - likes: [{ - type: Schema.Types.ObjectId, - ref: 'Like', - }], + likes: [ + { + type: Schema.Types.ObjectId, + ref: 'Like', + }, + ], }); const Comment = mongoose.model('Comment', CommentSchema); diff --git a/src/models/Likes.js b/src/models/Likes.js index b8ed582..b1527f3 100644 --- a/src/models/Likes.js +++ b/src/models/Likes.js @@ -3,21 +3,19 @@ const mongoose = require('mongoose'); const { Schema } = mongoose; const likeSchema = new Schema({ - user: { - type: mongoose.Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - topic: { - type: Schema.Types.ObjectId, - ref: 'Topic', - - }, - comment: { - type: Schema.Types.ObjectId, - ref: 'Comment', - - }, + user: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topic', + }, + comment: { + type: Schema.Types.ObjectId, + ref: 'Comment', + }, }); const Like = mongoose.model('Like', likeSchema); diff --git a/src/models/Topic.js b/src/models/Topic.js index f8f541a..68daa6c 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -20,10 +20,12 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, - likes: [{ - type: Schema.Types.ObjectId, - ref: 'Like', - }], + likes: [ + { + type: Schema.Types.ObjectId, + ref: 'Like', + }, + ], comments: [ { type: Schema.Types.ObjectId, diff --git a/src/routes/auth.js b/src/routes/auth.js index 1017bf9..4d7e317 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - secret: 'd41d8cd98f00b204e9800998ecf8427e', + secret: process.env.SECRET, }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; @@ -24,18 +24,13 @@ function auth(req, res, next) { return res.status(401).send({ Error: 'Token malformated' }); } - - jwt.verify(token, authConfig.secret, function(err ,decoded){ try { - req.userId = decoded.id; - console.log(decoded.id) - next(); - } - catch (err) { + jwt.verify(token, authConfig.secret, (err, decoded) => { + req.userId = decoded.id; + }); + return next(); + } catch (err) { return res.status(400); } - }); - - } module.exports = { authConfig, auth }; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 30395a4..538a1ca 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,13 +1,13 @@ const express = require('express'); -const jwt = require('jsonwebtoken'); + const router = express.Router(); const User = require('../models/User'); const Like = require('../models/Likes'); const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); -const { auth, authConfig } = require('./auth'); +const { auth } = require('./auth'); -router.post('/create/:topicId/:userId',auth, async (req, res) => { +router.post('/create/:topicId/:userId', auth, async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); @@ -80,65 +80,68 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId',auth, async (req, res) => { +router.post('/like/:commentId', auth, async (req, res) => { try { const user = await User.findById(req.userId); const comment = await Comment.findById(req.params.commentId).populate([ - { path: 'likes'}, + { path: 'likes' }, { path: 'user' }, { path: 'toppic' }, ]); const topic = await Topic.findById(comment.topic).populate([ - { path: 'likes'}, + { path: 'likes' }, { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.userId,comment:req.params.commentId}) - if(isLiked == null){ - const like = await Like.create({ - user: user, - comment: comment, + const isLiked = await Like.findOne({ + user: req.userId, + comment: req.params.commentId, }); - await like.save(); - comment.likes.push(like); - await comment.save(); - const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'comments' }, - ]); - return res.send(topicTrue); - } - else{ + if (isLiked == null) { + const like = await Like.create({ + user, + comment, + }); + await like.save(); + comment.likes.push(like); + await comment.save(); + const topicTrue = await Topic.findById(comment.topic).populate([ + { path: 'likes' }, + { path: 'user' }, + { path: 'comments' }, + ]); + return res.send(topicTrue); + } return res.send(topic); - } } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:commentId',auth, async (req, res) => { +router.post('/dislike/:commentId', auth, async (req, res) => { try { const comment = await Comment.findById(req.params.commentId); const topic = await Topic.findById(comment.topic); - const like = await Like.findOne({user:req.userId,comment:req.params.commentId}); - if(like != null){ - const index = comment.likes.indexOf(like._id); - if (index > -1) { - comment.likes.splice(index, 1); - } - - comment.save(); - - await Like.findByIdAndRemove(like._id).populate('user'); - const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'comments' }, - ]); - return res.send(topicTrue); + const like = await Like.findOne({ + user: req.userId, + comment: req.params.commentId, + }); + if (like != null) { + const index = comment.likes.indexOf(like._id); + if (index > -1) { + comment.likes.splice(index, 1); + } + + comment.save(); + await Like.findByIdAndRemove(like._id).populate('user'); + const topicTrue = await Topic.findById(comment.topic).populate([ + { path: 'likes' }, + { path: 'user' }, + { path: 'comments' }, + ]); + return res.send(topicTrue); } - return res.send(topic); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 3c4ef47..e0bf057 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -6,7 +6,8 @@ const Topic = require('../models/Topic'); const User = require('../models/User'); const Plant = require('../models/Plant'); const topicSchema = require('../schemas/topicSchema'); -const { auth, authConfig } = require('./auth'); +const { auth } = require('./auth'); + router.post('/create/:plantId/:userId', async (req, res) => { try { const user = await User.findById(req.params.userId); @@ -97,8 +98,9 @@ router.delete('/delete/:topicId', async (req, res) => { router.get('/list', async (req, res) => { try { const topic = await Topic.find().populate([ - { path: 'likes'}, - { path: 'comments' }, + { path: 'likes' }, + { path: 'comments', populate: { path: 'likes' } }, + { path: 'user' }, ]); return res.send({ topic }); } catch (err) { @@ -106,49 +108,51 @@ router.get('/list', async (req, res) => { } }); -router.post('/like/:topicId/:userId',auth, async (req, res) => { +router.post('/like/:topicId', auth, async (req, res) => { try { - const user = await User.findById(req.params.userId); + const user = await User.findById(req.userId); const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'likes'}, + { path: 'likes' }, { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.params.userId,topic:req.params.topicId}) - if(isLiked == null){ - const like = await Like.create({ - user: user, - topic: topic + const isLiked = await Like.findOne({ + user: req.params.userId, + topic: req.params.topicId, }); - await like.save(); - topic.likes.push(like); - await topic.save(); - const topictrue = await Topic.findById(req.params.topicId).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'toppic' }, - ]); - console.log(topictrue.likes.length) - return res.send(topictrue); - } - else{ - console.log(topic.likes.length) + if (isLiked == null) { + const like = await Like.create({ + user, + topic, + }); + await like.save(); + topic.likes.push(like); + await topic.save(); + const topictrue = await Topic.findById(req.params.topicId).populate([ + { path: 'likes' }, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(topictrue); + } + console.log(topic.likes.length); return res.send(topic); - } } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:topicId/:userId',auth, async (req, res) => { +router.post('/dislike/:topicId', auth, async (req, res) => { try { const topic = await Topic.findById(req.params.topicId); - const like = await Like.findOne({user:req.params.userId,topic:req.params.topicId}); + const like = await Like.findOne({ + user: req.userId, + topic: req.params.topicId, + }); const index = topic.likes.indexOf(like._id); if (index > -1) { topic.likes.splice(index, 1); } - console.log(topic.likes.length) topic.save(); await Like.findByIdAndRemove(like._id).populate('user'); return res.send(topic); From 3b530e4155616ea2f60804382551d03e78dbd1e3 Mon Sep 17 00:00:00 2001 From: senaarth Date: Fri, 16 Oct 2020 16:32:17 -0300 Subject: [PATCH 094/147] Create myPlant model, router and schema. Co-authored-by: Victor Santos --- src/index.js | 11 ++++ src/models/MyPlant.js | 28 +++++++++ src/models/User.js | 5 ++ src/routes/myPlantRoutes.js | 109 +++++++++++++++++++++++++++++++++++ src/schemas/myPlantSchema.js | 7 +++ 5 files changed, 160 insertions(+) create mode 100644 src/models/MyPlant.js create mode 100644 src/routes/myPlantRoutes.js create mode 100644 src/schemas/myPlantSchema.js diff --git a/src/index.js b/src/index.js index 19cf9c0..318b569 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,9 @@ const authRoutes = require('./routes/authRoutes'); const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); +const authRoutes = require('./routes/authRoutes'); +const myPlantRoutes = require('./routes/myPlantRoutes'); +// MongoDB connection // MongoDB connection // mongodb://localhost:27017/noderest => meu banco de dados local polupado @@ -23,11 +26,19 @@ app.use(express.urlencoded({ extended: false })); app.use(express.json()); // routes +<<<<<<< b56a03cde05eb469a13aa434806770292356f8cd app.use('/auth', authRoutes); app.use('/plant', plantRoutes); app.use('/topic', topicRoutes); app.use('/comment', commentRoutes); +======= +app.use('/plant',plantRoutes); +app.use('/topic',topicRoutes); +app.use('/comment',commentRoutes); +app.use('/auth',authRoutes); +app.use('/myplants',myPlantRoutes); +>>>>>>> Create myPlant model, router and schema. // starting the server app.set('port', process.env.PORT || 3000); diff --git a/src/models/MyPlant.js b/src/models/MyPlant.js new file mode 100644 index 0000000..5d50ecf --- /dev/null +++ b/src/models/MyPlant.js @@ -0,0 +1,28 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const myPlantSchema = new mongoose.Schema({ + nickname: { + type: String, + required: true + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + plant:{ + type:mongoose.Schema.Types.ObjectId, + ref:'Plant', + require:true + }, + createdAt: { + type: Date, + default: Date.now, + } +}); + + +const myPlant = mongoose.model('MyPlants', myPlantSchema); + +module.exports = myPlant; diff --git a/src/models/User.js b/src/models/User.js index a88a9a2..5b0cb16 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -24,6 +24,11 @@ const userSchema = new Schema({ require: true, }, ], + myPlants: [{ + type: mongoose.Schema.Types.ObjectId, + ref: 'MyPlants', + require: true, + }] }); const User = mongoose.model('User', userSchema); diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js new file mode 100644 index 0000000..edea84f --- /dev/null +++ b/src/routes/myPlantRoutes.js @@ -0,0 +1,109 @@ +const express = require('express'); +const router = express.Router(); + +const User = require('../models/User'); +const Plant = require('../models/Plant'); +const MyPlant = require('../models/MyPlant'); + +const myPlantSchema = require('../schemas/myPlantSchema'); + +router.get('/', async (req, res) => { + res.send({ message: 'User Backyard.'}); +}); + +router.post('/add/:userId/:plantId', async (req, res) => { + + try { + + const user = await User.findById(req.params.userId); + const plant = await Plant.findById(req.params.plantId); + + const result = myPlantSchema.validate({ nickname: req.body.nickname}); + if ( result.error ) return res.status(400).send({ error: 'Error while adding plant to backyard. ' + result.error}); + + const myPlant = await MyPlant.create({user: user, nickname: req.body.nickname, plant: plant}); + + await user.myPlants.push(myPlant); + await user.save() + .then( () => { + return res.send(user); + }); + + } catch(err) { + console.log(err); + return res.status(400).send({ error: 'Error while adding plant to backyard.' + err}); + } + +}); + +router.get('/:userId/:myPlantId', async (req, res) => { + + try { + + const user = await User.findById(req.params.userId); + const index = user.myPlants.indexOf(req.params.myPlantId); + + if (index > -1) { + const myPlant = await MyPlant.findById(req.params.myPlantId); + return res.send({ + nickname: myPlant.nickname, + plant: myPlant.plant, + creation: myPlant.createdAt + }); + } else { + return res.send({ + message: "Backyard plant not found." + }); + } + + } catch(err) { + console.log(err); + return res.status(400).send({ error: 'Error while searching for plant.' + err}); + } +}); + +router.put('/edit/:myPlantId', async (req, res) => { + + try { + + const newNick = req.body; + + const result = myPlantSchema.validate(newNick); + if ( result.error ) return res.status(400).send({ error: 'Error while editing plant. ' + result.error}); + + await MyPlant.findOneAndUpdate({_id: req.params.myPlantId}, newNick, { useFindAndModify: false}); + + return res.send({ message: 'Backyard plant updated successfully.'}); + + } catch (err) { + return res.status(400).send({ error: 'Error while updating backyard plant.' + err }); + } +}); + +router.delete('/delete/:myPlantId', async (req, res) => { + + try { + + const myPlant = await MyPlant.findById(req.params.myPlantId); + const user = await User.findById(myPlant.user); + + const index = user.myPlants.indexOf(req.params.myPlantId); + + if (index > -1) { + user.myPlants.splice(index, 1); + } + + await user.save(); + + await MyPlant.findByIdAndRemove(req.params.myPlantId, { useFindAndModify: false }); + + return res.send({ + message: 'Plant successfully removed from backyard.' + }); + + } catch(err) { + return res.status(400).send({ error: 'Error while deleting plant from backyard.' + err }); + } +}); + +module.exports = router; diff --git a/src/schemas/myPlantSchema.js b/src/schemas/myPlantSchema.js new file mode 100644 index 0000000..77645ed --- /dev/null +++ b/src/schemas/myPlantSchema.js @@ -0,0 +1,7 @@ +const Joi = require('joi'); + +const myPlantSchema = Joi.object({ + nickname: Joi.string().alphanum().min(2).max(20).required(), +}); + +module.exports = myPlantSchema; From 252f72180cb878c1784452bcd4d7b07e3cf24ab9 Mon Sep 17 00:00:00 2001 From: senaarth Date: Tue, 27 Oct 2020 20:49:43 -0300 Subject: [PATCH 095/147] Update PR to follow codacy patterns --- src/index.js | 45 ++++++--- src/models/Comment.js | 52 +++++------ src/models/MyPlant.js | 8 +- src/models/Plant.js | 113 ++++++++++++----------- src/models/Topic.js | 73 +++++++-------- src/models/User.js | 17 ++-- src/routes/auth.js | 57 +++++++----- src/routes/authRoutes.js | 92 +++++++++---------- src/routes/commentRoutes.js | 144 ++++++++++++++--------------- src/routes/myPlantRoutes.js | 52 ++++++----- src/routes/plantRoutes.js | 172 +++++++++++++---------------------- src/routes/topicRoutes.js | 154 +++++++++++++++---------------- src/schemas/myPlantSchema.js | 2 +- src/schemas/topicSchema.js | 2 +- src/schemas/userSchema.js | 2 +- 15 files changed, 476 insertions(+), 509 deletions(-) diff --git a/src/index.js b/src/index.js index 318b569..4ba936e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,33 +1,38 @@ const express = require('express'); const app = express(); -const morgan = require('morgan'); -const mongoose = require('mongoose'); - -const authRoutes = require('./routes/authRoutes'); -const plantRoutes = require('./routes/plantRoutes'); -const topicRoutes = require('./routes/topicRoutes'); -const commentRoutes = require('./routes/commentRoutes'); -const authRoutes = require('./routes/authRoutes'); -const myPlantRoutes = require('./routes/myPlantRoutes'); +const morgan = require("morgan"); +const mongoose = require("mongoose"); + + +const authRoutes = require("./routes/authRoutes"); +const plantRoutes = require("./routes/plantRoutes"); +const topicRoutes = require("./routes/topicRoutes"); +const commentRoutes = require("./routes/commentRoutes"); +const myPlantRoutes = require("./routes/myPlantRoutes"); // MongoDB connection // MongoDB connection // mongodb://localhost:27017/noderest => meu banco de dados local polupado // mongodb://mongo:27017/backend => banco de dados da develop mongoose - .connect('mongodb://mongo:27017/backend', { useNewUrlParser: true }) - .then(() => console.log('MongoDB Connected')) - .catch((err) => console.log(err)); + .connect( + "mongodb://mongo:27017/backend", + { useNewUrlParser: true } + ) + .then(() => console.log("MongoDB Connected")) + .catch(err => console.log(err)); + // middlewares -app.use(morgan('dev')); -app.use(express.urlencoded({ extended: false })); +app.use(morgan("dev")); +app.use(express.urlencoded({extended: false})); app.use(express.json()); // routes <<<<<<< b56a03cde05eb469a13aa434806770292356f8cd +<<<<<<< 3b530e4155616ea2f60804382551d03e78dbd1e3 app.use('/auth', authRoutes); app.use('/plant', plantRoutes); app.use('/topic', topicRoutes); @@ -44,4 +49,16 @@ app.use('/myplants',myPlantRoutes); app.set('port', process.env.PORT || 3000); app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); +======= +app.use("/auth",authRoutes); +app.use("/plant",plantRoutes); +app.use("/topic",topicRoutes); +app.use("/comment",commentRoutes); +app.use("/myplants",myPlantRoutes); + +// starting the server +app.set("port", process.env.PORT || 3000); +app.listen(app.get("port"), () => { + console.log(`Server on port ${app.get("port")}`); +>>>>>>> Update PR to follow codacy patterns }); diff --git a/src/models/Comment.js b/src/models/Comment.js index 79ff587..1546fef 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -1,32 +1,32 @@ -const mongoose = require('mongoose'); - -const { Schema } = mongoose; +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; const CommentSchema = new mongoose.Schema({ - text: { - type: String, - require: true, - }, - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - topic: { - type: Schema.Types.ObjectId, - ref: 'Topic', - require: true, - }, - likes: { - type: Number, - default: 0, - }, - dislikes: { - type: Number, - default: 0, - }, + text: { + type: String, + require: true, + }, + user: { + type: Schema.Types.ObjectId, + ref: "User", + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: "Topic", + require: true, + }, + likes: { + type: Number, + default: 0 + }, + dislikes: { + type: Number, + default: 0 + }, }); -const Comment = mongoose.model('Comment', CommentSchema); + +const Comment = mongoose.model("Comment",CommentSchema); module.exports = Comment; diff --git a/src/models/MyPlant.js b/src/models/MyPlant.js index 5d50ecf..9a31369 100644 --- a/src/models/MyPlant.js +++ b/src/models/MyPlant.js @@ -1,4 +1,4 @@ -const mongoose = require('mongoose'); +const mongoose = require("mongoose"); const Schema = mongoose.Schema; const myPlantSchema = new mongoose.Schema({ @@ -8,12 +8,12 @@ const myPlantSchema = new mongoose.Schema({ }, user: { type: Schema.Types.ObjectId, - ref: 'User', + ref: "User", require: true, }, plant:{ type:mongoose.Schema.Types.ObjectId, - ref:'Plant', + ref:"Plant", require:true }, createdAt: { @@ -23,6 +23,6 @@ const myPlantSchema = new mongoose.Schema({ }); -const myPlant = mongoose.model('MyPlants', myPlantSchema); +const myPlant = mongoose.model("MyPlants", myPlantSchema); module.exports = myPlant; diff --git a/src/models/Plant.js b/src/models/Plant.js index 3294204..72a8d20 100644 --- a/src/models/Plant.js +++ b/src/models/Plant.js @@ -1,63 +1,62 @@ -const mongoose = require('mongoose'); +const mongoose = require("mongoose"); const PlantSchema = new mongoose.Schema({ - scientificName: { - type: String, - require: true, - unique: true, - }, - family_name: { - type: String, - require: true, - }, - gender_name: { - type: String, - require: true, - }, - specie_name: { - type: String, - require: true, - }, - common_name: { - type: String, - require: true, - }, - usage: { - type: String, - require: true, - }, - first_User: { - type: String, - require: true, - }, - collection_count: { - type: Number, - require: true, - }, - extinction: { - type: Boolean, - require: true, - }, - profile_picture: { - type: String, - require: true, - }, - gbifID: { - type: Number, - require: true, - }, - stateProvince: { - type: String, - require: true, - }, - topics: [ - { - type: mongoose.Schema.Types.ObjectId, - ref: 'Topic', - }, - ], + scientificName: { + type: String, + require: true, + unique: true + }, + family_name: { + type: String, + require: true + }, + gender_name: { + type: String, + require: true + }, + specie_name: { + type: String, + require: true + }, + common_name: { + type: String, + require: true + }, + usage: { + type: String, + require: true + }, + first_User: { + type: String, + require: true + }, + collection_count: { + type: Number, + require: true + }, + extinction: { + type: Boolean, + require: true + }, + profile_picture: { + type: String, + require : true + }, + gbifID: { + type: Number, + require: true, + }, + stateProvince: { + type: String, + require : true + }, + topics: [{ + type: mongoose.Schema.Types.ObjectId, + ref: "Topic", + }], }); -const Plant = mongoose.model('Plant', PlantSchema); + +const Plant = mongoose.model("Plant",PlantSchema); module.exports = Plant; diff --git a/src/models/Topic.js b/src/models/Topic.js index 9b41e3c..c995914 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -1,45 +1,42 @@ -const mongoose = require('mongoose'); - -const { Schema } = mongoose; +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; const topicSchema = new Schema({ - title: { - type: String, - require: true, - }, - description: { - type: String, - }, - plant: { - type: mongoose.Schema.Types.ObjectId, - ref: 'Plant', - require: true, - }, - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - likes: { - type: Number, - default: 0, - }, - dislikes: { - type: Number, - default: 0, - }, - comments: [ - { - type: Schema.Types.ObjectId, - ref: 'Comment', + title: { + type: String, + require: true, + }, + description: { + type: String, + }, + plant:{ + type:mongoose.Schema.Types.ObjectId, + ref:"Plant", + require:true + }, + user: { + type: Schema.Types.ObjectId, + ref: "User", + require: true, + }, + likes: { + type: Number, + default: 0 + }, + dislikes: { + type: Number, + default: 0 + }, + comments: [{ + type: Schema.Types.ObjectId, + ref: "Comment" + }], + createdAt: { + type: Date, + default: Date.now, }, - ], - createdAt: { - type: Date, - default: Date.now, - }, }); -const Topic = mongoose.model('Topic', topicSchema); +const Topic = mongoose.model("Topic", topicSchema); module.exports = Topic; diff --git a/src/models/User.js b/src/models/User.js index 5b0cb16..6558f8f 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -1,6 +1,5 @@ -const mongoose = require('mongoose'); - -const { Schema } = mongoose; +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; const userSchema = new Schema({ username: { @@ -24,13 +23,13 @@ const userSchema = new Schema({ require: true, }, ], - myPlants: [{ - type: mongoose.Schema.Types.ObjectId, - ref: 'MyPlants', - require: true, - }] + myPlants: [{ + type: mongoose.Schema.Types.ObjectId, + ref: "MyPlants", + require: true, + }] }); -const User = mongoose.model('User', userSchema); +const User = mongoose.model("User", userSchema); module.exports = User; diff --git a/src/routes/auth.js b/src/routes/auth.js index 2b6ba85..b480137 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,36 +1,47 @@ -// confere se o token é valido -require('dotenv').config(); -const jwt = require('jsonwebtoken'); + +//confere se o token é valido +require("dotenv").config(); +const jsonwebtoken = require("jsonwebtoken"); const authConfig = { secret: process.env.SECRET, }; function auth(req, res, next) { - const sessiontoken = req.headers.authtoken; + const sessiontoken = req.headers.authtoken; - if (!sessiontoken) { - return res.status(401).send({ Error: 'Token not provided' }); - } + if (!sessiontoken) { + return res.status(401).send({ Error: 'Token not provided' }); + } - const parts = sessiontoken.split(' '); + const parts = sessiontoken.split(' '); - if (!parts.length === 2) { - return res.status(401).send({ Error: 'Token error' }); - } + if (!parts.length === 2) { + return res.status(401).send({ Error: 'Token error' }); + } - const [scheme, token] = parts; + if(!sessiontoken){ + return res.status(401).send({Error: "Token not provided"}); + } + + const parts = sessiontoken.split(" "); - if (!/^Bearer$/i.test(scheme)) { - return res.status(401).send({ Error: 'Token malformated' }); - } + if (!parts.length === 2){ + return res.status(401).send({Error: "Token error"}); + } + + const [scheme, token] = parts; + + if(!/^Bearer$/i.test(scheme)){ + return res.status(401).send({Error: "Token malformated"}); + } - try { - const { userId } = jwt.verify(token, authConfig.secret); - req.userId = userId; - return next(); - } catch (err) { - req.redirect('/login_page'); - return res.status(400); - } + jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { + if(err){ + return res.status(401).send({Error: "Token invalid"}); + } + req.userId = decoded.id; + return next() + + }); } module.exports = { authConfig, auth }; diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 3ba1303..bca008b 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -1,63 +1,58 @@ -const express = require('express'); - +const express = require("express"); const router = express.Router(); -const jsonwebtoken = require('jsonwebtoken'); -const User = require('../models/User'); -const userSchema = require('../schemas/userSchema'); -const { auth, authConfig } = require('./auth'); +const jsonwebtoken = require("jsonwebtoken"); +const User = require("../models/User"); +const userSchema = require("../schemas/userSchema"); +const {auth,authConfig} = require("./auth"); -router.post('/login', async (req, res, next) => { - try { - const { email, password } = req.body; + +router.post("/login", async(req, res ,next) => { + try{ + const {email, password} = req.body; const user = await User.findOne({ email, password }); - if (!user) { - return res.status(400).send({ Error: 'User not found' }); + if(!user){ + return res.status(400).send({Error: "User not found"}); } - if (password !== user.password) { - return res.status(400).send({ Error: 'Incorrect password' }); + if(password != user.password){ + return res.status(400).send({ Error: "Incorrect password"}); } user.password = undefined; const token = jsonwebtoken.sign({ id: user.id }, authConfig.secret, { expiresIn: 86400, }); - const aToken = `Bearer ${token}`; - res.header('authtoken', aToken); - return res - .json({ - message: 'Auth token generated', - }) - .redirect('/main'); - } catch (err) { - return next(err); + const aToken = "Bearer "+token; + res.header("authtoken", aToken); + res.json({ + message: "Auth token generated" + }).redirect("/main"); + }catch(err){ + next(err); } }); -router.post('/signup', async (req, res) => { +router.post("/signup", async(req, res) => { try { const newUserData = req.body; const result = userSchema.validate(req.body); await User.findOne({ username: newUserData.username }); - if (result.error) { - return res - .status(400) - .send({ error: `Error while signing up. ${result.error}` }); - } + if ( result.error ) return res.status(400).send({ error: "Error while signing up. " + result.error}); const user = new User(newUserData); await user.save(); - return res.send(user); - } catch (err) { - return res.status(400).send({ error: `Error while signing up.${err}` }); + return res.send(user); + + } catch(err) { + return res.status(400).send({ error: "Error while signing up." + err }); } }); -router.put('/update/:id', auth, async (req, res) => { - try { - const user = await User.findById(req.params.id); - const newData = req.body; +router.put("/update/:id",auth, async(req, res) => { + try { + const user = await User.findById(req.params.id); + const newData = req.body; if (!newData.username) newData.username = user.username; if (!newData.password) newData.password = user.password; @@ -67,23 +62,22 @@ router.put('/update/:id', auth, async (req, res) => { if (result.error) return res.status(400).send(result.error); - await User.findOneAndUpdate({ _id: req.params.id }, req.body, { - useFindAndModify: false, - }); + await User.findOneAndUpdate({_id: req.params.id}, req.body, { useFindAndModify: false}) + + res.send({ message: "User updated successfully."}); - return res.send({ message: 'User updated successfully.' }); - } catch (err) { - return res.status(400).send({ error: `Error while updating user.${err}` }); - } + } catch(err) { + return res.status(400).send({ error: "Error while updating user." + err}); + } }); -router.delete('/delete/:id', auth, async (req, res) => { - try { - await User.findByIdAndDelete(req.params.id); - return res.send({ message: 'User successfully deleted.' }); - } catch (err) { - return res.status(400).send({ error: `Error while deleting user. ${err}` }); - } +router.delete("/delete/:id",auth, async(req, res) => { + try { + await User.findByIdAndDelete(req.params.id); + return res.send({ message: "User successfully deleted." }); + } catch(err) { + return res.status(400).send({ error: "Error while deleting user. " + err }); + } }); module.exports = router; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index f3bfcc2..3a1a670 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,101 +1,91 @@ -const express = require('express'); - +const express = require("express"); const router = express.Router(); -const Topic = require('../models/Topic'); -const Comment = require('../models/Comment'); +const Topic = require("../models/Topic"); +const User = require("../models/User"); +const Comment = require("../models/Comment"); -router.post('/create/:topicId/:userId', async (req, res) => { - try { - if (!req.body.text) - return res.status(400).send({ error: 'Comment should not be empty' }); +router.post("/create/:topicId/:userId", async (req, res) => { + try { + + if ( !req.body.text ) return res.status(400).send({ error: "Comment should not be empty"}); - const comment = await Comment.create({ - ...req.body, - user: req.params.userId, - topic: req.params.topicId, - }); - const topic = await Topic.findById(req.params.topicId); + const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); + const topic = await Topic.findById(req.params.topicId); - await comment.save(); + await comment.save(); - topic.comments.push(comment); - await topic.save(); + topic.comments.push(comment); + await topic.save(); + + return res.send({ message: "Comment successfully registered." }); - return res.send({ message: 'Comment successfully registered.' }); - } catch (err) { - return res.status(400).send({ error: `Error while commenting.${err}` }); - } + } catch (err) { + return res.status(400).send({ error: "Error while commenting." + err}); + } }); -router.put('/update/:commentId', async (req, res) => { - try { - await Comment.findById(req.params.commentId); - const newData = req.body; - - if (!newData.text) - return res.status(400).send({ error: 'Comment should not be empty' }); - - await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { - useFindAndModify: false, - }); - return res.send({ message: 'Comment updated successfully.' }); - } catch (err) { - return res - .status(400) - .send({ error: `Error while updating comment.${err}` }); - } +router.put("/update/:commentId", async (req, res) => { + + try { + + await Comment.findById(req.params.commentId); + const newData = req.body; + + if ( !newData.text ) return res.status(400).send({ error: "Comment should not be empty"}); + + await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) + .then( () => { + res.send({ message: "Comment updated successfully."}); + }); + + } catch (err) { + return res.status(400).send({ error: "Error while updating comment." + err }); + } + }); -router.delete('/delete/:commentId', async (req, res) => { +router.delete("/delete/:commentId", async (req, res) => { try { - const comment = await Comment.findById(req.params.commentId); - const topic = await Topic.findById(comment.topic); - const index = topic.comments.indexOf(req.params.commentId); - if (index > -1) { - topic.comments.splice(index, 1); - } + topic.save(); - topic.save(); + await Comment.findByIdAndRemove(req.params.commentId).populate("user"); - await Comment.findByIdAndRemove(req.params.commentId).populate('user'); + return res.send({ + message: "Comment successfully removed." + }); - return res.send({ - message: 'Comment successfully removed.', - }); - } catch (err) { - return res.status(400).send({ error: `Error while deleting topic.${err}` }); - } + } catch (err) { + return res.status(400).send({ error: "Error while deleting topic." + err }); + } }); -router.post('/like/:commentId', async (req, res) => { - try { - await Comment.findOneAndUpdate( - { _id: req.params.commentId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Liked!' }); - } catch (err) { - return res.status(400).send({ error: `Error while liking comment.${err}` }); - } +router.post("/like/:commentId", async (req, res) => { + try { + + await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: "Liked!"}); + }); + + } catch (err) { + return res.status(400).send({ error: "Error while liking comment." + err }); + } }); -router.post('/dislike/:commentId', async (req, res) => { - try { - await Comment.findOneAndUpdate( - { _id: req.params.commentId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Disliked!' }); - } catch (err) { - return res - .status(400) - .send({ error: `Error while linking comment.${err}` }); - } +router.post("/dislike/:commentId", async (req, res) => { + try { + + await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: "Disliked!"}); + }); + + } catch (err) { + return res.status(400).send({ error: "Error while linking comment." + err }); + } }); module.exports = router; diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js index edea84f..fd5ef3a 100644 --- a/src/routes/myPlantRoutes.js +++ b/src/routes/myPlantRoutes.js @@ -1,17 +1,17 @@ -const express = require('express'); +const express = require("express"); const router = express.Router(); -const User = require('../models/User'); -const Plant = require('../models/Plant'); -const MyPlant = require('../models/MyPlant'); +const User = require("../models/User"); +const Plant = require("../models/Plant"); +const MyPlant = require("../models/MyPlant"); -const myPlantSchema = require('../schemas/myPlantSchema'); +const myPlantSchema = require("../schemas/myPlantSchema"); -router.get('/', async (req, res) => { - res.send({ message: 'User Backyard.'}); +router.get("/", async (req, res) => { + res.send({ message: "User Backyard."}); }); -router.post('/add/:userId/:plantId', async (req, res) => { +router.post("/add/:userId/:plantId", async (req, res) => { try { @@ -19,9 +19,17 @@ router.post('/add/:userId/:plantId', async (req, res) => { const plant = await Plant.findById(req.params.plantId); const result = myPlantSchema.validate({ nickname: req.body.nickname}); - if ( result.error ) return res.status(400).send({ error: 'Error while adding plant to backyard. ' + result.error}); + if ( result.error ) { + return res.status(400).send({ error: "Error while adding plant to backyard. " + result.error}); + } + + const myPlant = { + user: user, + nickname: req.body.nickname, + plant: plant + }; - const myPlant = await MyPlant.create({user: user, nickname: req.body.nickname, plant: plant}); + await MyPlant.create(myPlant); await user.myPlants.push(myPlant); await user.save() @@ -30,13 +38,12 @@ router.post('/add/:userId/:plantId', async (req, res) => { }); } catch(err) { - console.log(err); - return res.status(400).send({ error: 'Error while adding plant to backyard.' + err}); + return res.status(400).send({ error: "Error while adding plant to backyard." + err}); } }); -router.get('/:userId/:myPlantId', async (req, res) => { +router.get("/:userId/:myPlantId", async (req, res) => { try { @@ -57,30 +64,31 @@ router.get('/:userId/:myPlantId', async (req, res) => { } } catch(err) { - console.log(err); - return res.status(400).send({ error: 'Error while searching for plant.' + err}); + return res.status(400).send({ error: "Error while searching for plant." + err}); } }); -router.put('/edit/:myPlantId', async (req, res) => { +router.put("/edit/:myPlantId", async (req, res) => { try { const newNick = req.body; const result = myPlantSchema.validate(newNick); - if ( result.error ) return res.status(400).send({ error: 'Error while editing plant. ' + result.error}); + if ( result.error ) { + return res.status(400).send({ error: "Error while editing plant. " + result.error}); + } await MyPlant.findOneAndUpdate({_id: req.params.myPlantId}, newNick, { useFindAndModify: false}); - return res.send({ message: 'Backyard plant updated successfully.'}); + return res.send({ message: "Backyard plant updated successfully."}); } catch (err) { - return res.status(400).send({ error: 'Error while updating backyard plant.' + err }); + return res.status(400).send({ error: "Error while updating backyard plant." + err }); } }); -router.delete('/delete/:myPlantId', async (req, res) => { +router.delete("/delete/:myPlantId", async (req, res) => { try { @@ -98,11 +106,11 @@ router.delete('/delete/:myPlantId', async (req, res) => { await MyPlant.findByIdAndRemove(req.params.myPlantId, { useFindAndModify: false }); return res.send({ - message: 'Plant successfully removed from backyard.' + message: "Plant successfully removed from backyard." }); } catch(err) { - return res.status(400).send({ error: 'Error while deleting plant from backyard.' + err }); + return res.status(400).send({ error: "Error while deleting plant from backyard." + err }); } }); diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 3985c29..3eefa95 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -1,27 +1,14 @@ -const express = require('express'); +const express = require("express"); -const Plant = require('../models/Plant'); -const Topic = require('../models/Topic'); +const Plant = require("../models/Plant"); +const Topic = require("../models/Topic"); const router = express.Router(); -// registro de uma nova planta -router.post('/register', async (req, res) => { - try { - const { - scientificName, - familyName, - genderName, - specieName, - commonName, - usage, - firstUser, - collectionCount, - extinction, - profilePicture, - gbifID, - stateProvince, - } = req.body; +//registro de uma nova planta +router.post("/register", async (req , res) => { + try{ + const { scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince,topicos} = req.body; const plant = await Plant.create({ scientificName, @@ -53,99 +40,64 @@ router.post('/register', async (req, res) => { return res.send(err); } }); - -// Listagem de Todas as plantas -router.get('/', async (req, res) => { - try { - const plants = await Plant.find().populate('topics'); - - return res.send({ plants }); - } catch (err) { - return res.status(400).send({ error: 'Loading plants failed' }); - } +//Listagem de Todas as plantas +router.get("/", async (req , res) => { + try{ + const plants = await Plant.find().populate("topics"); + + return res.send({ plants }); + }catch (err){ + return res.status(400).send({ error: "Loading plants failed"}); + } }); - -// Procurando planta por id -router.get('/:plantId', async (req, res) => { - try { - const plant = await Plant.findById(req.params.plantId).populate('topics'); - - return res.send({ plant }); - } catch (err) { - return res - .status(400) - .send({ error: 'error when searching for this plant ' }); - } +//Procurando planta por id +router.get("/:plantId", async (req , res) => { + try{ + const plant = await Plant.findById(req.params.plantId).populate("topics"); + + return res.send({ plant }); + }catch (err){ + return res.status(400).send({ error: "error when searching for this plant "}); + } }); - -// Deletando planta por id -router.delete('/:plantId', async (req, res) => { - try { - const deleted = await Plant.findByIdAndRemove(req.params.plantId); - - return res.send(deleted); - } catch (err) { - return res.status(400).send({ error: 'Error when Delete this plant' }); - } +//Deletando planta por id +router.delete("/:plantId", async (req , res) => { + try{ + const deleted = await Plant.findByIdAndRemove(req.params.plantId); + + return res.send(deleted); + }catch (err){ + return res.status(400).send({ error: "Error when Delete this plant"}); + } }); - -// Dando upgrade planta por id -router.put('/:plantId', async (req, res) => { - try { - const { - scientificName, - familyName, - genderName, - specieName, - commonName, - usage, - firstUser, - collectionCount, - extinction, - profilePicture, - gbifID, - stateProvince, - topics, - } = req.body; - - const plant = await Plant.findByIdAndUpdate( - req.params.plantId, - { - scientificName, - familyName, - genderName, - specieName, - commonName, - usage, - firstUser, - collectionCount, - extinction, - profilePicture, - gbifID, - stateProvince, - }, - { new: true } - ); - - plant.topics = []; - await Topic.remove({ plant: plant._id }); - - await Promise.all( - topics.map(async (topic) => { - const plantTopic = new Topic({ ...topic, plant: plant._id }); - - await plantTopic.save(); - - plant.topics.push(plantTopic); - }) - ); - - await plant.save(); - - return res.send({ plant }); - } catch (err) { - return res.status(400).send({ error: 'Registration failed' }); - } +//Dando upgrade planta por id +router.put("/:plantId", async (req , res) => { + + try{ + const { scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince,topicos} = req.body; + + const plant = await Plant.findByIdAndUpdate(req.params.plantId, + {scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince},{ new: true}); + + plant.topics = []; + await Topic.remove({plant: plant._id}); + + await Promise.all(topics.map(async topic =>{ + const plantTopic = new Topic({...topic,plant : plant._id}); + + await plantTopic.save(); + + plant.topics.push(plantTopic); + })); + + await plant.save(); + + + return res.send({ plant }); + }catch (err){ + return res.status(400).send({ error: "Registration failed"}); + } + }); module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index d03c9c6..54b44f8 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -1,18 +1,21 @@ -const express = require('express'); - +const express = require("express"); const router = express.Router(); -const Topic = require('../models/Topic'); -const User = require('../models/User'); -const Plant = require('../models/Plant'); -const topicSchema = require('../schemas/topicSchema'); +const Topic = require("../models/Topic"); +const User = require("../models/User"); +const Plant = require("../models/Plant"); +const topicSchema = require("../schemas/topicSchema"); -router.post('/create/:plantId/:userId', async (req, res) => { - try { - const user = await User.findById(req.params.userId); - const plant = await Plant.findById(req.params.plantId); +router.post("/create/:plantId/:userId", async (req, res) => { + + try { + + const user = await User.findById(req.params.userId); + const plant = await Plant.findById(req.params.plantId); + + const result = topicSchema.validate(req.body); - const result = topicSchema.validate(req.body); + if ( result.error ) return res.status(400).send({ error: "Error while creating topic. " + result.error}); if (result.error) { return res @@ -31,45 +34,45 @@ router.post('/create/:plantId/:userId', async (req, res) => { user.topics.push(topic); await user.save(); - plant.topics.push(topic); - await plant.save(); + } catch (err) { + return res.status(400).send({ error: "Error while creating topic." + err }); + } return res.send({ topic }); - } catch (err) { - return res.status(400).send({ error: `Error while creating topic.${err}` }); - } }); -router.put('/update/:topicId', async (req, res) => { - try { - const topic = await Topic.findById(req.params.topicId); +router.put("/update/:topicId", async (req, res) => { + try { const newData = req.body; if (!newData.title) newData.title = topic.title; if (!newData.description) newData.description = topic.description; - const result = topicSchema.validate(newData); - if (result.error) { - return res - .status(400) - .send({ error: `Error while creating topic. ${result.error}` }); - } + const newData = req.body; - await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { - useFindAndModify: false, - }); - return res.send({ message: 'Topic updated successfully.' }); - } catch (err) { - return res.status(400).send({ error: `Error while updating topic.${err}` }); - } + if (!newData.title) newData.title = topic.title; + if (!newData.description) newData.description = topic.description; + + const result = topicSchema.validate(newData); + if ( result.error ) return res.status(400).send({ error: "Error while creating topic. " + result.error}); + + await Topic.findOneAndUpdate({_id: req.params.topicId}, newData, { useFindAndModify: false}) + .then( () => { + res.send({ message: "Topic updated successfully."}); + }); + + } catch (err) { + return res.status(400).send({ error: "Error while updating topic." + err }); + } }); -router.delete('/delete/:topicId', async (req, res) => { - try { - const topic = await Topic.findById(req.params.topicId); - const user = await User.findById(topic.user); - const plant = await Plant.findById(topic.plant); +router.delete("/delete/:topicId", async (req, res) => { + try { + + const topic = await Topic.findById(req.params.topicId); + const user = await User.findById(topic.user); + const plant = await Plant.findById(topic.plant); const indexAtUser = user.topics.indexOf(req.params.topicId); const indexAtPlant = plant.topics.indexOf(req.params.topicId); @@ -84,54 +87,51 @@ router.delete('/delete/:topicId', async (req, res) => { user.save(); plant.save(); - await Topic.findByIdAndRemove(req.params.topicId, { - useFindAndModify: false, - }); + return res.send({ + message: "Topic successfully removed." + }); - return res.send({ - message: 'Topic successfully removed.', - }); - } catch (err) { - return res.status(400).send({ error: `Error while deleting topic.${err}` }); - } + } catch (err) { + return res.status(400).send({ error: "Error while deleting topic." + err }); + } }); -router.get('/list', async (req, res) => { - try { - const topic = await Topic.find().populate(['user']); +router.get("/list", async (req, res) => { + try { - return res.send({ topic }); - } catch (err) { - return res.status(400).send({ error: `Error while listing topics.${err}` }); - } + const topic = await Topic.find().populate(["user"]); + + return res.send({ topic }); + + } catch (err) { + return res.status(400).send({ error: "Error while listing topics." + err }); + } }); -router.post('/like/:topicId', async (req, res) => { - try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Liked!' }); - } catch (err) { - return res.status(400).send({ error: `Error while liking topic.${err}` }); - } +router.post("/like/:topicId", async (req, res) => { + try { + + await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: "Liked!"}); + }); + + } catch (err) { + return res.status(400).send({ error: "Error while liking topic." + err }); + } }); -router.post('/dislike/:topicId', async (req, res) => { - try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Disliked!' }); - } catch (err) { - return res - .status(400) - .send({ error: `Error while dislikinng topic.${err}` }); - } +router.post("/dislike/:topicId", async (req, res) => { + try { + + await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + .then( () => { + res.send({ message: "Disliked!"}); + }); + + } catch (err) { + return res.status(400).send({ error: "Error while dislikinng topic." + err }); + } }); module.exports = router; diff --git a/src/schemas/myPlantSchema.js b/src/schemas/myPlantSchema.js index 77645ed..484265d 100644 --- a/src/schemas/myPlantSchema.js +++ b/src/schemas/myPlantSchema.js @@ -1,4 +1,4 @@ -const Joi = require('joi'); +const Joi = require("joi"); const myPlantSchema = Joi.object({ nickname: Joi.string().alphanum().min(2).max(20).required(), diff --git a/src/schemas/topicSchema.js b/src/schemas/topicSchema.js index 9a0379e..e4cd441 100644 --- a/src/schemas/topicSchema.js +++ b/src/schemas/topicSchema.js @@ -1,4 +1,4 @@ -const Joi = require('joi'); +const Joi = require("joi"); const topicSchema = Joi.object({ title: Joi.string().min(4).max(30).required(), diff --git a/src/schemas/userSchema.js b/src/schemas/userSchema.js index 20101d6..0e4620e 100644 --- a/src/schemas/userSchema.js +++ b/src/schemas/userSchema.js @@ -1,4 +1,4 @@ -const Joi = require('joi'); +const Joi = require("joi"); const userSchema = Joi.object({ username: Joi.string().alphanum().min(4).max(30).required(), From b81344db108ef6c101199916a09409909e9970c5 Mon Sep 17 00:00:00 2001 From: senaarth Date: Fri, 16 Oct 2020 16:32:17 -0300 Subject: [PATCH 096/147] Create myPlant model, router and schema. Co-authored-by: Victor Santos --- src/index.js | 17 ++++++++++------ src/models/MyPlant.js | 8 ++++---- src/models/User.js | 13 ++++++------ src/routes/myPlantRoutes.js | 39 ++++++++++++++++++------------------ src/schemas/myPlantSchema.js | 2 +- 5 files changed, 41 insertions(+), 38 deletions(-) diff --git a/src/index.js b/src/index.js index 4ba936e..9bd96cd 100644 --- a/src/index.js +++ b/src/index.js @@ -4,12 +4,11 @@ const app = express(); const morgan = require("morgan"); const mongoose = require("mongoose"); - -const authRoutes = require("./routes/authRoutes"); -const plantRoutes = require("./routes/plantRoutes"); -const topicRoutes = require("./routes/topicRoutes"); -const commentRoutes = require("./routes/commentRoutes"); -const myPlantRoutes = require("./routes/myPlantRoutes"); +const authRoutes = require('./routes/authRoutes'); +const plantRoutes = require('./routes/plantRoutes'); +const topicRoutes = require('./routes/topicRoutes'); +const commentRoutes = require('./routes/commentRoutes'); +const myPlantRoutes = require('./routes/myPlantRoutes'); // MongoDB connection // MongoDB connection @@ -30,6 +29,7 @@ app.use(express.urlencoded({extended: false})); app.use(express.json()); // routes +<<<<<<< 252f72180cb878c1784452bcd4d7b07e3cf24ab9 <<<<<<< b56a03cde05eb469a13aa434806770292356f8cd <<<<<<< 3b530e4155616ea2f60804382551d03e78dbd1e3 @@ -38,11 +38,16 @@ app.use('/plant', plantRoutes); app.use('/topic', topicRoutes); app.use('/comment', commentRoutes); ======= +======= +>>>>>>> Create myPlant model, router and schema. app.use('/plant',plantRoutes); app.use('/topic',topicRoutes); app.use('/comment',commentRoutes); app.use('/auth',authRoutes); app.use('/myplants',myPlantRoutes); +<<<<<<< 252f72180cb878c1784452bcd4d7b07e3cf24ab9 +>>>>>>> Create myPlant model, router and schema. +======= >>>>>>> Create myPlant model, router and schema. // starting the server diff --git a/src/models/MyPlant.js b/src/models/MyPlant.js index 9a31369..5d50ecf 100644 --- a/src/models/MyPlant.js +++ b/src/models/MyPlant.js @@ -1,4 +1,4 @@ -const mongoose = require("mongoose"); +const mongoose = require('mongoose'); const Schema = mongoose.Schema; const myPlantSchema = new mongoose.Schema({ @@ -8,12 +8,12 @@ const myPlantSchema = new mongoose.Schema({ }, user: { type: Schema.Types.ObjectId, - ref: "User", + ref: 'User', require: true, }, plant:{ type:mongoose.Schema.Types.ObjectId, - ref:"Plant", + ref:'Plant', require:true }, createdAt: { @@ -23,6 +23,6 @@ const myPlantSchema = new mongoose.Schema({ }); -const myPlant = mongoose.model("MyPlants", myPlantSchema); +const myPlant = mongoose.model('MyPlants', myPlantSchema); module.exports = myPlant; diff --git a/src/models/User.js b/src/models/User.js index 6558f8f..142c8f1 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -21,13 +21,12 @@ const userSchema = new Schema({ type: mongoose.Schema.Types.ObjectId, ref: 'Topics', require: true, - }, - ], - myPlants: [{ - type: mongoose.Schema.Types.ObjectId, - ref: "MyPlants", - require: true, - }] + }], + myPlants: [{ + type: mongoose.Schema.Types.ObjectId, + ref: 'MyPlants', + require: true, + }] }); const User = mongoose.model("User", userSchema); diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js index fd5ef3a..24302c3 100644 --- a/src/routes/myPlantRoutes.js +++ b/src/routes/myPlantRoutes.js @@ -1,17 +1,17 @@ -const express = require("express"); +const express = require('express'); const router = express.Router(); -const User = require("../models/User"); -const Plant = require("../models/Plant"); -const MyPlant = require("../models/MyPlant"); +const User = require('../models/User'); +const Plant = require('../models/Plant'); +const MyPlant = require('../models/MyPlant'); -const myPlantSchema = require("../schemas/myPlantSchema"); +const myPlantSchema = require('../schemas/myPlantSchema'); -router.get("/", async (req, res) => { - res.send({ message: "User Backyard."}); +router.get('/', async (req, res) => { + res.send({ message: 'User Backyard.'}); }); -router.post("/add/:userId/:plantId", async (req, res) => { +router.post('/add/:userId/:plantId', async (req, res) => { try { @@ -38,12 +38,12 @@ router.post("/add/:userId/:plantId", async (req, res) => { }); } catch(err) { - return res.status(400).send({ error: "Error while adding plant to backyard." + err}); + return res.status(400).send({ error: 'Error while adding plant to backyard.' + err}); } }); -router.get("/:userId/:myPlantId", async (req, res) => { +router.get('/:userId/:myPlantId', async (req, res) => { try { @@ -64,31 +64,30 @@ router.get("/:userId/:myPlantId", async (req, res) => { } } catch(err) { - return res.status(400).send({ error: "Error while searching for plant." + err}); + console.log(err); + return res.status(400).send({ error: 'Error while searching for plant.' + err}); } }); -router.put("/edit/:myPlantId", async (req, res) => { +router.put('/edit/:myPlantId', async (req, res) => { try { const newNick = req.body; const result = myPlantSchema.validate(newNick); - if ( result.error ) { - return res.status(400).send({ error: "Error while editing plant. " + result.error}); - } + if ( result.error ) return res.status(400).send({ error: 'Error while editing plant. ' + result.error}); await MyPlant.findOneAndUpdate({_id: req.params.myPlantId}, newNick, { useFindAndModify: false}); - return res.send({ message: "Backyard plant updated successfully."}); + return res.send({ message: 'Backyard plant updated successfully.'}); } catch (err) { - return res.status(400).send({ error: "Error while updating backyard plant." + err }); + return res.status(400).send({ error: 'Error while updating backyard plant.' + err }); } }); -router.delete("/delete/:myPlantId", async (req, res) => { +router.delete('/delete/:myPlantId', async (req, res) => { try { @@ -106,11 +105,11 @@ router.delete("/delete/:myPlantId", async (req, res) => { await MyPlant.findByIdAndRemove(req.params.myPlantId, { useFindAndModify: false }); return res.send({ - message: "Plant successfully removed from backyard." + message: 'Plant successfully removed from backyard.' }); } catch(err) { - return res.status(400).send({ error: "Error while deleting plant from backyard." + err }); + return res.status(400).send({ error: 'Error while deleting plant from backyard.' + err }); } }); diff --git a/src/schemas/myPlantSchema.js b/src/schemas/myPlantSchema.js index 484265d..77645ed 100644 --- a/src/schemas/myPlantSchema.js +++ b/src/schemas/myPlantSchema.js @@ -1,4 +1,4 @@ -const Joi = require("joi"); +const Joi = require('joi'); const myPlantSchema = Joi.object({ nickname: Joi.string().alphanum().min(2).max(20).required(), From 2b16aefe6ce455af4ae543577ab3d03ceacd602d Mon Sep 17 00:00:00 2001 From: senaarth Date: Tue, 27 Oct 2020 20:49:43 -0300 Subject: [PATCH 097/147] Update PR to follow codacy patterns --- src/index.js | 40 ++------- src/models/MyPlant.js | 8 +- src/models/Topic.js | 66 +++++++------- src/models/User.js | 47 +++++----- src/routes/auth.js | 32 +++---- src/routes/myPlantRoutes.js | 37 ++++---- src/routes/plantRoutes.js | 166 ++++++++++++++++++++++------------- src/routes/topicRoutes.js | 95 +++++++++++--------- src/schemas/myPlantSchema.js | 2 +- src/schemas/userSchema.js | 4 +- 10 files changed, 260 insertions(+), 237 deletions(-) diff --git a/src/index.js b/src/index.js index 9bd96cd..6e52e25 100644 --- a/src/index.js +++ b/src/index.js @@ -1,14 +1,13 @@ -const express = require('express'); - +const express = require("express"); const app = express(); const morgan = require("morgan"); const mongoose = require("mongoose"); -const authRoutes = require('./routes/authRoutes'); -const plantRoutes = require('./routes/plantRoutes'); -const topicRoutes = require('./routes/topicRoutes'); -const commentRoutes = require('./routes/commentRoutes'); -const myPlantRoutes = require('./routes/myPlantRoutes'); +const authRoutes = require("./routes/authRoutes"); +const plantRoutes = require("./routes/plantRoutes"); +const topicRoutes = require("./routes/topicRoutes"); +const commentRoutes = require("./routes/commentRoutes"); +const myPlantRoutes = require("./routes/myPlantRoutes"); // MongoDB connection // MongoDB connection @@ -29,41 +28,14 @@ app.use(express.urlencoded({extended: false})); app.use(express.json()); // routes -<<<<<<< 252f72180cb878c1784452bcd4d7b07e3cf24ab9 -<<<<<<< b56a03cde05eb469a13aa434806770292356f8cd - -<<<<<<< 3b530e4155616ea2f60804382551d03e78dbd1e3 -app.use('/auth', authRoutes); -app.use('/plant', plantRoutes); -app.use('/topic', topicRoutes); -app.use('/comment', commentRoutes); -======= -======= ->>>>>>> Create myPlant model, router and schema. app.use('/plant',plantRoutes); app.use('/topic',topicRoutes); app.use('/comment',commentRoutes); app.use('/auth',authRoutes); app.use('/myplants',myPlantRoutes); -<<<<<<< 252f72180cb878c1784452bcd4d7b07e3cf24ab9 ->>>>>>> Create myPlant model, router and schema. -======= ->>>>>>> Create myPlant model, router and schema. // starting the server app.set('port', process.env.PORT || 3000); app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); -======= -app.use("/auth",authRoutes); -app.use("/plant",plantRoutes); -app.use("/topic",topicRoutes); -app.use("/comment",commentRoutes); -app.use("/myplants",myPlantRoutes); - -// starting the server -app.set("port", process.env.PORT || 3000); -app.listen(app.get("port"), () => { - console.log(`Server on port ${app.get("port")}`); ->>>>>>> Update PR to follow codacy patterns }); diff --git a/src/models/MyPlant.js b/src/models/MyPlant.js index 5d50ecf..9a31369 100644 --- a/src/models/MyPlant.js +++ b/src/models/MyPlant.js @@ -1,4 +1,4 @@ -const mongoose = require('mongoose'); +const mongoose = require("mongoose"); const Schema = mongoose.Schema; const myPlantSchema = new mongoose.Schema({ @@ -8,12 +8,12 @@ const myPlantSchema = new mongoose.Schema({ }, user: { type: Schema.Types.ObjectId, - ref: 'User', + ref: "User", require: true, }, plant:{ type:mongoose.Schema.Types.ObjectId, - ref:'Plant', + ref:"Plant", require:true }, createdAt: { @@ -23,6 +23,6 @@ const myPlantSchema = new mongoose.Schema({ }); -const myPlant = mongoose.model('MyPlants', myPlantSchema); +const myPlant = mongoose.model("MyPlants", myPlantSchema); module.exports = myPlant; diff --git a/src/models/Topic.js b/src/models/Topic.js index c995914..7c20f95 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -2,39 +2,39 @@ const mongoose = require("mongoose"); const Schema = mongoose.Schema; const topicSchema = new Schema({ - title: { - type: String, - require: true, - }, - description: { - type: String, - }, - plant:{ - type:mongoose.Schema.Types.ObjectId, - ref:"Plant", - require:true - }, - user: { - type: Schema.Types.ObjectId, - ref: "User", - require: true, - }, - likes: { - type: Number, - default: 0 - }, - dislikes: { - type: Number, - default: 0 - }, - comments: [{ - type: Schema.Types.ObjectId, - ref: "Comment" - }], - createdAt: { - type: Date, - default: Date.now, - }, + title: { + type: String, + require: true, + }, + description: { + type: String, + }, + plant:{ + type:mongoose.Schema.Types.ObjectId, + ref:"Plant", + require:true + }, + user: { + type: Schema.Types.ObjectId, + ref: "User", + require: true, + }, + likes: { + type: Number, + default: 0 + }, + dislikes: { + type: Number, + default: 0 + }, + comments: [{ + type: Schema.Types.ObjectId, + ref: "Comment" + }], + createdAt: { + type: Date, + default: Date.now, + }, }); const Topic = mongoose.model("Topic", topicSchema); diff --git a/src/models/User.js b/src/models/User.js index 142c8f1..cedff95 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -2,31 +2,30 @@ const mongoose = require("mongoose"); const Schema = mongoose.Schema; const userSchema = new Schema({ - username: { - type: String, - required: true, - unique: true, - }, - password: { - type: String, - required: true, - }, - email: { - type: String, - required: true, - unique: true, - }, - topics: [ - { - type: mongoose.Schema.Types.ObjectId, - ref: 'Topics', - require: true, + username: { + type: String, + required: true, + unique:true + }, + password: { + type: String, + required: true + }, + email: { + type: String, + required: true, + unique:true + }, + topics: [{ + type: mongoose.Schema.Types.ObjectId, + ref: "Topics", + require: true, }], - myPlants: [{ - type: mongoose.Schema.Types.ObjectId, - ref: 'MyPlants', - require: true, - }] + myPlants: [{ + type: mongoose.Schema.Types.ObjectId, + ref: "MyPlants", + require: true, + }] }); const User = mongoose.model("User", userSchema); diff --git a/src/routes/auth.js b/src/routes/auth.js index b480137..a1b49a8 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,7 +1,7 @@ //confere se o token é valido require("dotenv").config(); -const jsonwebtoken = require("jsonwebtoken"); +const jwt = require("jsonwebtoken"); const authConfig = { secret: process.env.SECRET, @@ -25,23 +25,17 @@ function auth(req, res, next) { const parts = sessiontoken.split(" "); - if (!parts.length === 2){ - return res.status(401).send({Error: "Token error"}); - } - - const [scheme, token] = parts; - - if(!/^Bearer$/i.test(scheme)){ - return res.status(401).send({Error: "Token malformated"}); - } - - jsonwebtoken.verify(token, authConfig.secret, (err, decoded) => { - if(err){ - return res.status(401).send({Error: "Token invalid"}); - } - req.userId = decoded.id; - return next() - - }); + if (!/^Bearer$/i.test(scheme)) { + return res.status(401).send({ Error: "Token malformated" }); + } + + try { + const { userId } = jwt.verify(token, authConfig.secret); + req.userId = userId; + return next(); + } catch (err) { + req.redirect("/login_page"); + return res.status(400); + } } module.exports = { authConfig, auth }; diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js index 24302c3..27b22bf 100644 --- a/src/routes/myPlantRoutes.js +++ b/src/routes/myPlantRoutes.js @@ -1,17 +1,17 @@ -const express = require('express'); +const express = require("express"); const router = express.Router(); -const User = require('../models/User'); -const Plant = require('../models/Plant'); -const MyPlant = require('../models/MyPlant'); +const User = require("../models/User"); +const Plant = require("../models/Plant"); +const MyPlant = require("../models/MyPlant"); -const myPlantSchema = require('../schemas/myPlantSchema'); +const myPlantSchema = require("../schemas/myPlantSchema"); -router.get('/', async (req, res) => { - res.send({ message: 'User Backyard.'}); +router.get("/", async (req, res) => { + res.send({ message: "User Backyard."}); }); -router.post('/add/:userId/:plantId', async (req, res) => { +router.post("/add/:userId/:plantId", async (req, res) => { try { @@ -43,7 +43,7 @@ router.post('/add/:userId/:plantId', async (req, res) => { }); -router.get('/:userId/:myPlantId', async (req, res) => { +router.get("/:userId/:myPlantId", async (req, res) => { try { @@ -64,30 +64,31 @@ router.get('/:userId/:myPlantId', async (req, res) => { } } catch(err) { - console.log(err); - return res.status(400).send({ error: 'Error while searching for plant.' + err}); + return res.status(400).send({ error: "Error while searching for plant." + err}); } }); -router.put('/edit/:myPlantId', async (req, res) => { +router.put("/edit/:myPlantId", async (req, res) => { try { const newNick = req.body; const result = myPlantSchema.validate(newNick); - if ( result.error ) return res.status(400).send({ error: 'Error while editing plant. ' + result.error}); + if ( result.error ) { + return res.status(400).send({ error: "Error while editing plant. " + result.error}); + } await MyPlant.findOneAndUpdate({_id: req.params.myPlantId}, newNick, { useFindAndModify: false}); - return res.send({ message: 'Backyard plant updated successfully.'}); + return res.send({ message: "Backyard plant updated successfully."}); } catch (err) { - return res.status(400).send({ error: 'Error while updating backyard plant.' + err }); + return res.status(400).send({ error: "Error while updating backyard plant." + err }); } }); -router.delete('/delete/:myPlantId', async (req, res) => { +router.delete("/delete/:myPlantId", async (req, res) => { try { @@ -105,11 +106,11 @@ router.delete('/delete/:myPlantId', async (req, res) => { await MyPlant.findByIdAndRemove(req.params.myPlantId, { useFindAndModify: false }); return res.send({ - message: 'Plant successfully removed from backyard.' + message: "Plant successfully removed from backyard." }); } catch(err) { - return res.status(400).send({ error: 'Error while deleting plant from backyard.' + err }); + return res.status(400).send({ error: "Error while deleting plant from backyard." + err }); } }); diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 3eefa95..e830628 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -5,10 +5,23 @@ const Topic = require("../models/Topic"); const router = express.Router(); -//registro de uma nova planta -router.post("/register", async (req , res) => { - try{ - const { scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince,topicos} = req.body; +// registro de uma nova planta +router.post("/register", async (req, res) => { + try { + const { + scientificName, + familyName, + genderName, + specieName, + commonName, + usage, + firstUser, + collectionCount, + extinction, + profilePicture, + gbifID, + stateProvince, + } = req.body; const plant = await Plant.create({ scientificName, @@ -40,64 +53,99 @@ router.post("/register", async (req , res) => { return res.send(err); } }); -//Listagem de Todas as plantas -router.get("/", async (req , res) => { - try{ - const plants = await Plant.find().populate("topics"); - - return res.send({ plants }); - }catch (err){ - return res.status(400).send({ error: "Loading plants failed"}); - } + +// Listagem de Todas as plantas +router.get("/", async (req, res) => { + try { + const plants = await Plant.find().populate("topics"); + + return res.send({ plants }); + } catch (err) { + return res.status(400).send({ error: "Loading plants failed" }); + } }); -//Procurando planta por id -router.get("/:plantId", async (req , res) => { - try{ - const plant = await Plant.findById(req.params.plantId).populate("topics"); - - return res.send({ plant }); - }catch (err){ - return res.status(400).send({ error: "error when searching for this plant "}); - } + +// Procurando planta por id +router.get("/:plantId", async (req, res) => { + try { + const plant = await Plant.findById(req.params.plantId).populate("topics"); + + return res.send({ plant }); + } catch (err) { + return res + .status(400) + .send({ error: "error when searching for this plant " }); + } }); -//Deletando planta por id -router.delete("/:plantId", async (req , res) => { - try{ - const deleted = await Plant.findByIdAndRemove(req.params.plantId); - - return res.send(deleted); - }catch (err){ - return res.status(400).send({ error: "Error when Delete this plant"}); - } + +// Deletando planta por id +router.delete("/:plantId", async (req, res) => { + try { + const deleted = await Plant.findByIdAndRemove(req.params.plantId); + + return res.send(deleted); + } catch (err) { + return res.status(400).send({ error: "Error when Delete this plant" }); + } }); -//Dando upgrade planta por id -router.put("/:plantId", async (req , res) => { - - try{ - const { scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince,topicos} = req.body; - - const plant = await Plant.findByIdAndUpdate(req.params.plantId, - {scientificName,family_name,gender_name,specie_name,common_name,usage,first_User,collection_count,extinction,profile_picture, gbifID,stateProvince},{ new: true}); - - plant.topics = []; - await Topic.remove({plant: plant._id}); - - await Promise.all(topics.map(async topic =>{ - const plantTopic = new Topic({...topic,plant : plant._id}); - - await plantTopic.save(); - - plant.topics.push(plantTopic); - })); - - await plant.save(); - - - return res.send({ plant }); - }catch (err){ - return res.status(400).send({ error: "Registration failed"}); - } - + +// Dando upgrade planta por id +router.put("/:plantId", async (req, res) => { + try { + const { + scientificName, + familyName, + genderName, + specieName, + commonName, + usage, + firstUser, + collectionCount, + extinction, + profilePicture, + gbifID, + stateProvince, + topics, + } = req.body; + + const plant = await Plant.findByIdAndUpdate( + req.params.plantId, + { + scientificName, + familyName, + genderName, + specieName, + commonName, + usage, + firstUser, + collectionCount, + extinction, + profilePicture, + gbifID, + stateProvince, + }, + { new: true } + ); + + plant.topics = []; + await Topic.remove({ plant: plant._id }); + + await Promise.all( + topics.map(async (topic) => { + const plantTopic = new Topic({ ...topic, plant: plant._id }); + + await plantTopic.save(); + + plant.topics.push(plantTopic); + }) + ); + + await plant.save(); + + return res.send({ plant }); + } catch (err) { + return res.status(400).send({ error: "Registration failed" }); + } }); module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 54b44f8..c4466bc 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -7,6 +7,7 @@ const Plant = require("../models/Plant"); const topicSchema = require("../schemas/topicSchema"); router.post("/create/:plantId/:userId", async (req, res) => { +<<<<<<< b81344db108ef6c101199916a09409909e9970c5 try { @@ -14,6 +15,11 @@ router.post("/create/:plantId/:userId", async (req, res) => { const plant = await Plant.findById(req.params.plantId); const result = topicSchema.validate(req.body); +======= + try { + const user = await User.findById(req.params.userId); + const plant = await Plant.findById(req.params.plantId); +>>>>>>> Update PR to follow codacy patterns if ( result.error ) return res.status(400).send({ error: "Error while creating topic. " + result.error}); @@ -42,6 +48,11 @@ router.post("/create/:plantId/:userId", async (req, res) => { }); router.put("/update/:topicId", async (req, res) => { +<<<<<<< b81344db108ef6c101199916a09409909e9970c5 +======= + try { + const topic = await Topic.findById(req.params.topicId); +>>>>>>> Update PR to follow codacy patterns try { const newData = req.body; @@ -51,28 +62,20 @@ router.put("/update/:topicId", async (req, res) => { const newData = req.body; - if (!newData.title) newData.title = topic.title; - if (!newData.description) newData.description = topic.description; - - const result = topicSchema.validate(newData); - if ( result.error ) return res.status(400).send({ error: "Error while creating topic. " + result.error}); - - await Topic.findOneAndUpdate({_id: req.params.topicId}, newData, { useFindAndModify: false}) - .then( () => { - res.send({ message: "Topic updated successfully."}); - }); - - } catch (err) { - return res.status(400).send({ error: "Error while updating topic." + err }); - } + await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { + useFindAndModify: false, + }); + return res.send({ message: "Topic updated successfully." }); + } catch (err) { + return res.status(400).send({ error: `Error while updating topic.${err}` }); + } }); router.delete("/delete/:topicId", async (req, res) => { - try { - - const topic = await Topic.findById(req.params.topicId); - const user = await User.findById(topic.user); - const plant = await Plant.findById(topic.plant); + try { + const topic = await Topic.findById(req.params.topicId); + const user = await User.findById(topic.user); + const plant = await Plant.findById(topic.plant); const indexAtUser = user.topics.indexOf(req.params.topicId); const indexAtPlant = plant.topics.indexOf(req.params.topicId); @@ -91,13 +94,17 @@ router.delete("/delete/:topicId", async (req, res) => { message: "Topic successfully removed." }); - } catch (err) { - return res.status(400).send({ error: "Error while deleting topic." + err }); - } + return res.send({ + message: "Topic successfully removed.", + }); + } catch (err) { + return res.status(400).send({ error: `Error while deleting topic.${err}` }); + } }); router.get("/list", async (req, res) => { - try { + try { + const topic = await Topic.find().populate(["user"]); const topic = await Topic.find().populate(["user"]); @@ -109,29 +116,31 @@ router.get("/list", async (req, res) => { }); router.post("/like/:topicId", async (req, res) => { - try { - - await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: "Liked!"}); - }); - - } catch (err) { - return res.status(400).send({ error: "Error while liking topic." + err }); - } + try { + await Topic.findOneAndUpdate( + { _id: req.params.topicId }, + { $inc: { likes: 1 } }, + { useFindAndModify: false } + ); + return res.send({ message: "Liked!" }); + } catch (err) { + return res.status(400).send({ error: `Error while liking topic.${err}` }); + } }); router.post("/dislike/:topicId", async (req, res) => { - try { - - await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: "Disliked!"}); - }); - - } catch (err) { - return res.status(400).send({ error: "Error while dislikinng topic." + err }); - } + try { + await Topic.findOneAndUpdate( + { _id: req.params.topicId }, + { $inc: { dislikes: 1 } }, + { useFindAndModify: false } + ); + return res.send({ message: "Disliked!" }); + } catch (err) { + return res + .status(400) + .send({ error: `Error while dislikinng topic.${err}` }); + } }); module.exports = router; diff --git a/src/schemas/myPlantSchema.js b/src/schemas/myPlantSchema.js index 77645ed..484265d 100644 --- a/src/schemas/myPlantSchema.js +++ b/src/schemas/myPlantSchema.js @@ -1,4 +1,4 @@ -const Joi = require('joi'); +const Joi = require("joi"); const myPlantSchema = Joi.object({ nickname: Joi.string().alphanum().min(2).max(20).required(), diff --git a/src/schemas/userSchema.js b/src/schemas/userSchema.js index 0e4620e..f36f84d 100644 --- a/src/schemas/userSchema.js +++ b/src/schemas/userSchema.js @@ -6,8 +6,8 @@ const userSchema = Joi.object({ passwordConfirmation: Joi.string() .min(8) .required() - .valid(Joi.ref('password')) - .error(new Error('Password confirmation does not match.')), + .valid(Joi.ref("password")) + .error(new Error("Password confirmation does not match.")), email: Joi.string().email().required(), }); From a47fc113ff596fc5aafa25ce73f5ca26f358dcb3 Mon Sep 17 00:00:00 2001 From: senaarth Date: Tue, 3 Nov 2020 18:29:42 -0300 Subject: [PATCH 098/147] Fix lint errors --- src/index.js | 42 ++++----- src/models/Comment.js | 52 +++++------ src/models/MyPlant.js | 44 ++++----- src/models/Plant.js | 113 +++++++++++----------- src/models/Topic.js | 47 +++++----- src/models/User.js | 55 ++++++----- src/routes/auth.js | 33 +++---- src/routes/authRoutes.js | 91 +++++++++--------- src/routes/commentRoutes.js | 144 +++++++++++++++------------- src/routes/myPlantRoutes.js | 176 +++++++++++++++++------------------ src/routes/plantRoutes.js | 32 +++---- src/routes/topicRoutes.js | 83 ++++++++--------- src/schemas/myPlantSchema.js | 4 +- src/schemas/topicSchema.js | 2 +- src/schemas/userSchema.js | 6 +- 15 files changed, 463 insertions(+), 461 deletions(-) diff --git a/src/index.js b/src/index.js index 6e52e25..c979282 100644 --- a/src/index.js +++ b/src/index.js @@ -1,38 +1,36 @@ -const express = require("express"); +const express = require('express'); + const app = express(); -const morgan = require("morgan"); -const mongoose = require("mongoose"); +const morgan = require('morgan'); +const mongoose = require('mongoose'); -const authRoutes = require("./routes/authRoutes"); -const plantRoutes = require("./routes/plantRoutes"); -const topicRoutes = require("./routes/topicRoutes"); -const commentRoutes = require("./routes/commentRoutes"); -const myPlantRoutes = require("./routes/myPlantRoutes"); +const authRoutes = require('./routes/authRoutes'); +const plantRoutes = require('./routes/plantRoutes'); +const topicRoutes = require('./routes/topicRoutes'); +const commentRoutes = require('./routes/commentRoutes'); +const myPlantRoutes = require('./routes/myPlantRoutes'); // MongoDB connection // MongoDB connection // mongodb://localhost:27017/noderest => meu banco de dados local polupado // mongodb://mongo:27017/backend => banco de dados da develop mongoose - .connect( - "mongodb://mongo:27017/backend", - { useNewUrlParser: true } - ) - .then(() => console.log("MongoDB Connected")) - .catch(err => console.log(err)); - + .connect('mongodb://mongo:27017/backend', { useNewUrlParser: true }) + .then(() => console.log('MongoDB Connected')) + .catch((err) => console.log(err)); // middlewares -app.use(morgan("dev")); -app.use(express.urlencoded({extended: false})); +app.use(morgan('dev')); +app.use(express.urlencoded({ extended: false })); app.use(express.json()); // routes -app.use('/plant',plantRoutes); -app.use('/topic',topicRoutes); -app.use('/comment',commentRoutes); -app.use('/auth',authRoutes); -app.use('/myplants',myPlantRoutes); + +app.use('/auth', authRoutes); +app.use('/plant', plantRoutes); +app.use('/topic', topicRoutes); +app.use('/comment', commentRoutes); +app.use('/myplants', myPlantRoutes); // starting the server app.set('port', process.env.PORT || 3000); diff --git a/src/models/Comment.js b/src/models/Comment.js index 1546fef..79ff587 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -1,32 +1,32 @@ -const mongoose = require("mongoose"); -const Schema = mongoose.Schema; +const mongoose = require('mongoose'); + +const { Schema } = mongoose; const CommentSchema = new mongoose.Schema({ - text: { - type: String, - require: true, - }, - user: { - type: Schema.Types.ObjectId, - ref: "User", - require: true, - }, - topic: { - type: Schema.Types.ObjectId, - ref: "Topic", - require: true, - }, - likes: { - type: Number, - default: 0 - }, - dislikes: { - type: Number, - default: 0 - }, + text: { + type: String, + require: true, + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topic', + require: true, + }, + likes: { + type: Number, + default: 0, + }, + dislikes: { + type: Number, + default: 0, + }, }); - -const Comment = mongoose.model("Comment",CommentSchema); +const Comment = mongoose.model('Comment', CommentSchema); module.exports = Comment; diff --git a/src/models/MyPlant.js b/src/models/MyPlant.js index 9a31369..6d11ee7 100644 --- a/src/models/MyPlant.js +++ b/src/models/MyPlant.js @@ -1,28 +1,28 @@ -const mongoose = require("mongoose"); -const Schema = mongoose.Schema; +const mongoose = require('mongoose'); + +const { Schema } = mongoose; const myPlantSchema = new mongoose.Schema({ - nickname: { - type: String, - required: true - }, - user: { - type: Schema.Types.ObjectId, - ref: "User", - require: true, - }, - plant:{ - type:mongoose.Schema.Types.ObjectId, - ref:"Plant", - require:true - }, - createdAt: { - type: Date, - default: Date.now, - } + nickname: { + type: String, + required: true, + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + plant: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Plant', + require: true, + }, + createdAt: { + type: Date, + default: Date.now, + }, }); - -const myPlant = mongoose.model("MyPlants", myPlantSchema); +const myPlant = mongoose.model('MyPlants', myPlantSchema); module.exports = myPlant; diff --git a/src/models/Plant.js b/src/models/Plant.js index 72a8d20..3294204 100644 --- a/src/models/Plant.js +++ b/src/models/Plant.js @@ -1,62 +1,63 @@ -const mongoose = require("mongoose"); +const mongoose = require('mongoose'); const PlantSchema = new mongoose.Schema({ - scientificName: { - type: String, - require: true, - unique: true - }, - family_name: { - type: String, - require: true - }, - gender_name: { - type: String, - require: true - }, - specie_name: { - type: String, - require: true - }, - common_name: { - type: String, - require: true - }, - usage: { - type: String, - require: true - }, - first_User: { - type: String, - require: true - }, - collection_count: { - type: Number, - require: true - }, - extinction: { - type: Boolean, - require: true - }, - profile_picture: { - type: String, - require : true - }, - gbifID: { - type: Number, - require: true, - }, - stateProvince: { - type: String, - require : true - }, - topics: [{ - type: mongoose.Schema.Types.ObjectId, - ref: "Topic", - }], + scientificName: { + type: String, + require: true, + unique: true, + }, + family_name: { + type: String, + require: true, + }, + gender_name: { + type: String, + require: true, + }, + specie_name: { + type: String, + require: true, + }, + common_name: { + type: String, + require: true, + }, + usage: { + type: String, + require: true, + }, + first_User: { + type: String, + require: true, + }, + collection_count: { + type: Number, + require: true, + }, + extinction: { + type: Boolean, + require: true, + }, + profile_picture: { + type: String, + require: true, + }, + gbifID: { + type: Number, + require: true, + }, + stateProvince: { + type: String, + require: true, + }, + topics: [ + { + type: mongoose.Schema.Types.ObjectId, + ref: 'Topic', + }, + ], }); - -const Plant = mongoose.model("Plant",PlantSchema); +const Plant = mongoose.model('Plant', PlantSchema); module.exports = Plant; diff --git a/src/models/Topic.js b/src/models/Topic.js index 7c20f95..9b41e3c 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -1,42 +1,45 @@ -const mongoose = require("mongoose"); -const Schema = mongoose.Schema; +const mongoose = require('mongoose'); + +const { Schema } = mongoose; const topicSchema = new Schema({ title: { - type: String, - require: true, + type: String, + require: true, }, description: { - type: String, + type: String, }, - plant:{ - type:mongoose.Schema.Types.ObjectId, - ref:"Plant", - require:true + plant: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Plant', + require: true, }, user: { - type: Schema.Types.ObjectId, - ref: "User", - require: true, + type: Schema.Types.ObjectId, + ref: 'User', + require: true, }, likes: { - type: Number, - default: 0 + type: Number, + default: 0, }, dislikes: { - type: Number, - default: 0 + type: Number, + default: 0, }, - comments: [{ + comments: [ + { type: Schema.Types.ObjectId, - ref: "Comment" - }], + ref: 'Comment', + }, + ], createdAt: { - type: Date, - default: Date.now, + type: Date, + default: Date.now, }, }); -const Topic = mongoose.model("Topic", topicSchema); +const Topic = mongoose.model('Topic', topicSchema); module.exports = Topic; diff --git a/src/models/User.js b/src/models/User.js index cedff95..bbed348 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -1,33 +1,38 @@ -const mongoose = require("mongoose"); -const Schema = mongoose.Schema; +const mongoose = require('mongoose'); + +const { Schema } = mongoose; const userSchema = new Schema({ - username: { - type: String, - required: true, - unique:true - }, - password: { - type: String, - required: true + username: { + type: String, + required: true, + unique: true, + }, + password: { + type: String, + required: true, + }, + email: { + type: String, + required: true, + unique: true, + }, + topics: [ + { + type: mongoose.Schema.Types.ObjectId, + ref: 'Topics', + require: true, }, - email: { - type: String, - required: true, - unique:true + ], + myPlants: [ + { + type: mongoose.Schema.Types.ObjectId, + ref: 'MyPlants', + require: true, }, - topics: [{ - type: mongoose.Schema.Types.ObjectId, - ref: "Topics", - require: true, - }], - myPlants: [{ - type: mongoose.Schema.Types.ObjectId, - ref: "MyPlants", - require: true, - }] + ], }); -const User = mongoose.model("User", userSchema); +const User = mongoose.model('User', userSchema); module.exports = User; diff --git a/src/routes/auth.js b/src/routes/auth.js index a1b49a8..2b6ba85 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -1,32 +1,27 @@ - -//confere se o token é valido -require("dotenv").config(); -const jwt = require("jsonwebtoken"); +// confere se o token é valido +require('dotenv').config(); +const jwt = require('jsonwebtoken'); const authConfig = { secret: process.env.SECRET, }; function auth(req, res, next) { - const sessiontoken = req.headers.authtoken; + const sessiontoken = req.headers.authtoken; - if (!sessiontoken) { - return res.status(401).send({ Error: 'Token not provided' }); - } + if (!sessiontoken) { + return res.status(401).send({ Error: 'Token not provided' }); + } - const parts = sessiontoken.split(' '); + const parts = sessiontoken.split(' '); - if (!parts.length === 2) { - return res.status(401).send({ Error: 'Token error' }); - } + if (!parts.length === 2) { + return res.status(401).send({ Error: 'Token error' }); + } - if(!sessiontoken){ - return res.status(401).send({Error: "Token not provided"}); - } - - const parts = sessiontoken.split(" "); + const [scheme, token] = parts; if (!/^Bearer$/i.test(scheme)) { - return res.status(401).send({ Error: "Token malformated" }); + return res.status(401).send({ Error: 'Token malformated' }); } try { @@ -34,7 +29,7 @@ function auth(req, res, next) { req.userId = userId; return next(); } catch (err) { - req.redirect("/login_page"); + req.redirect('/login_page'); return res.status(400); } } diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index bca008b..c29b72c 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -1,58 +1,62 @@ -const express = require("express"); -const router = express.Router(); -const jsonwebtoken = require("jsonwebtoken"); -const User = require("../models/User"); -const userSchema = require("../schemas/userSchema"); -const {auth,authConfig} = require("./auth"); +const express = require('express'); +const router = express.Router(); +const jsonwebtoken = require('jsonwebtoken'); +const User = require('../models/User'); +const userSchema = require('../schemas/userSchema'); +const { auth, authConfig } = require('./auth'); -router.post("/login", async(req, res ,next) => { - try{ - const {email, password} = req.body; +router.post('/login', async (req, res, next) => { + try { + const { email, password } = req.body; const user = await User.findOne({ email, password }); - if(!user){ - return res.status(400).send({Error: "User not found"}); + if (!user) { + return res.status(400).send({ Error: 'User not found' }); } - if(password != user.password){ - return res.status(400).send({ Error: "Incorrect password"}); + if (password !== user.password) { + return res.status(400).send({ Error: 'Incorrect password' }); } user.password = undefined; const token = jsonwebtoken.sign({ id: user.id }, authConfig.secret, { expiresIn: 86400, }); - const aToken = "Bearer "+token; - res.header("authtoken", aToken); - res.json({ - message: "Auth token generated" - }).redirect("/main"); - }catch(err){ - next(err); + const aToken = `Bearer ${token}`; + res.header('authtoken', aToken); + return res + .json({ + message: 'Auth token generated', + }) + .redirect('/main'); + } catch (err) { + return next(err); } }); -router.post("/signup", async(req, res) => { +router.post('/signup', async (req, res) => { try { const newUserData = req.body; const result = userSchema.validate(req.body); await User.findOne({ username: newUserData.username }); - if ( result.error ) return res.status(400).send({ error: "Error while signing up. " + result.error}); + if (result.error) + return res + .status(400) + .send({ error: `Error while signing up. ${result.error}` }); const user = new User(newUserData); await user.save(); - return res.send(user); - - } catch(err) { - return res.status(400).send({ error: "Error while signing up." + err }); + return res.send(user); + } catch (err) { + return res.status(400).send({ error: `Error while signing up.${err}` }); } }); -router.put("/update/:id",auth, async(req, res) => { - try { - const user = await User.findById(req.params.id); - const newData = req.body; +router.put('/update/:id', auth, async (req, res) => { + try { + const user = await User.findById(req.params.id); + const newData = req.body; if (!newData.username) newData.username = user.username; if (!newData.password) newData.password = user.password; @@ -62,22 +66,23 @@ router.put("/update/:id",auth, async(req, res) => { if (result.error) return res.status(400).send(result.error); - await User.findOneAndUpdate({_id: req.params.id}, req.body, { useFindAndModify: false}) - - res.send({ message: "User updated successfully."}); + await User.findOneAndUpdate({ _id: req.params.id }, req.body, { + useFindAndModify: false, + }); - } catch(err) { - return res.status(400).send({ error: "Error while updating user." + err}); - } + return res.send({ message: 'User updated successfully.' }); + } catch (err) { + return res.status(400).send({ error: `Error while updating user.${err}` }); + } }); -router.delete("/delete/:id",auth, async(req, res) => { - try { - await User.findByIdAndDelete(req.params.id); - return res.send({ message: "User successfully deleted." }); - } catch(err) { - return res.status(400).send({ error: "Error while deleting user. " + err }); - } +router.delete('/delete/:id', auth, async (req, res) => { + try { + await User.findByIdAndDelete(req.params.id); + return res.send({ message: 'User successfully deleted.' }); + } catch (err) { + return res.status(400).send({ error: `Error while deleting user. ${err}` }); + } }); module.exports = router; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 3a1a670..b670585 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,91 +1,101 @@ -const express = require("express"); -const router = express.Router(); +const express = require('express'); -const Topic = require("../models/Topic"); -const User = require("../models/User"); -const Comment = require("../models/Comment"); +const router = express.Router(); -router.post("/create/:topicId/:userId", async (req, res) => { - try { +const Topic = require('../models/Topic'); +const Comment = require('../models/Comment'); - if ( !req.body.text ) return res.status(400).send({ error: "Comment should not be empty"}); +router.post('/create/:topicId/:userId', async (req, res) => { + try { + if (!req.body.text) + return res.status(400).send({ error: 'Comment should not be empty' }); - const comment = await Comment.create({...req.body, user: req.params.userId, topic: req.params.topicId}); - const topic = await Topic.findById(req.params.topicId); + const comment = await Comment.create({ + ...req.body, + user: req.params.userId, + topic: req.params.topicId, + }); + const topic = await Topic.findById(req.params.topicId); - await comment.save(); + await comment.save(); - topic.comments.push(comment); - await topic.save(); - - return res.send({ message: "Comment successfully registered." }); + topic.comments.push(comment); + await topic.save(); - } catch (err) { - return res.status(400).send({ error: "Error while commenting." + err}); - } + return res.send({ message: 'Comment successfully registered.' }); + } catch (err) { + return res.status(400).send({ error: `Error while commenting.${err}` }); + } }); -router.put("/update/:commentId", async (req, res) => { - - try { - - await Comment.findById(req.params.commentId); - const newData = req.body; - - if ( !newData.text ) return res.status(400).send({ error: "Comment should not be empty"}); - - await Comment.findOneAndUpdate({_id: req.params.commentId}, req.body, { useFindAndModify: false}) - .then( () => { - res.send({ message: "Comment updated successfully."}); - }); - - } catch (err) { - return res.status(400).send({ error: "Error while updating comment." + err }); - } - +router.put('/update/:commentId', async (req, res) => { + try { + await Comment.findById(req.params.commentId); + const newData = req.body; + + if (!newData.text) + return res.status(400).send({ error: 'Comment should not be empty' }); + + await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { + useFindAndModify: false, + }); + return res.send({ message: 'Comment updated successfully.' }); + } catch (err) { + return res + .status(400) + .send({ error: `Error while updating comment.${err}` }); + } }); -router.delete("/delete/:commentId", async (req, res) => { +router.delete('/delete/:commentId', async (req, res) => { try { + const topic = Topic.findById(req.body.topicId); const index = topic.comments.indexOf(req.params.commentId); - topic.save(); + if (index > -1) { + topic.comments.splice(index, 1); + } - await Comment.findByIdAndRemove(req.params.commentId).populate("user"); + topic.save(); - return res.send({ - message: "Comment successfully removed." - }); + await Comment.findByIdAndRemove(req.params.commentId).populate('user'); - } catch (err) { - return res.status(400).send({ error: "Error while deleting topic." + err }); - } + return res.send({ + message: 'Comment successfully removed.', + }); + } catch (err) { + return res.status(400).send({ error: `Error while deleting topic.${err}` }); + } }); -router.post("/like/:commentId", async (req, res) => { - try { - - await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: "Liked!"}); - }); - - } catch (err) { - return res.status(400).send({ error: "Error while liking comment." + err }); - } +router.post('/like/:commentId', async (req, res) => { + try { + await Comment.findOneAndUpdate( + { _id: req.params.commentId }, + { $inc: { likes: 1 } }, + { useFindAndModify: false } + ); + + return res.send({ message: 'Liked!' }); + } catch (err) { + return res.status(400).send({ error: `Error while liking comment.${err}` }); + } }); -router.post("/dislike/:commentId", async (req, res) => { - try { - - await Comment.findOneAndUpdate({_id: req.params.commentId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) - .then( () => { - res.send({ message: "Disliked!"}); - }); - - } catch (err) { - return res.status(400).send({ error: "Error while linking comment." + err }); - } +router.post('/dislike/:commentId', async (req, res) => { + try { + await Comment.findOneAndUpdate( + { _id: req.params.commentId }, + { $inc: { dislikes: 1 } }, + { useFindAndModify: false } + ); + + return res.send({ message: 'Disliked!' }); + } catch (err) { + return res + .status(400) + .send({ error: `Error while linking comment.${err}` }); + } }); module.exports = router; diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js index 27b22bf..18242fa 100644 --- a/src/routes/myPlantRoutes.js +++ b/src/routes/myPlantRoutes.js @@ -1,117 +1,115 @@ -const express = require("express"); +const express = require('express'); + const router = express.Router(); -const User = require("../models/User"); -const Plant = require("../models/Plant"); -const MyPlant = require("../models/MyPlant"); +const User = require('../models/User'); +const Plant = require('../models/Plant'); +const MyPlant = require('../models/MyPlant'); -const myPlantSchema = require("../schemas/myPlantSchema"); +const myPlantSchema = require('../schemas/myPlantSchema'); -router.get("/", async (req, res) => { - res.send({ message: "User Backyard."}); +router.get('/', async (req, res) => { + res.send({ message: 'User Backyard.' }); }); -router.post("/add/:userId/:plantId", async (req, res) => { - - try { - - const user = await User.findById(req.params.userId); - const plant = await Plant.findById(req.params.plantId); - - const result = myPlantSchema.validate({ nickname: req.body.nickname}); - if ( result.error ) { - return res.status(400).send({ error: "Error while adding plant to backyard. " + result.error}); - } - - const myPlant = { - user: user, - nickname: req.body.nickname, - plant: plant - }; - - await MyPlant.create(myPlant); - - await user.myPlants.push(myPlant); - await user.save() - .then( () => { - return res.send(user); - }); - - } catch(err) { - return res.status(400).send({ error: 'Error while adding plant to backyard.' + err}); - } +router.post('/add/:userId/:plantId', async (req, res) => { + try { + const user = await User.findById(req.params.userId); + const plant = await Plant.findById(req.params.plantId); -}); + const result = myPlantSchema.validate({ nickname: req.body.nickname }); + if (result.error) return res.status(400).send(result.error); -router.get("/:userId/:myPlantId", async (req, res) => { + const myPlant = { + user, + nickname: req.body.nickname, + plant, + }; - try { + await MyPlant.create(myPlant); - const user = await User.findById(req.params.userId); - const index = user.myPlants.indexOf(req.params.myPlantId); + await user.myPlants.push(myPlant); + await user.save(); - if (index > -1) { - const myPlant = await MyPlant.findById(req.params.myPlantId); - return res.send({ - nickname: myPlant.nickname, - plant: myPlant.plant, - creation: myPlant.createdAt - }); - } else { - return res.send({ - message: "Backyard plant not found." - }); - } + return res.send(user); + } catch (err) { + return res + .status(400) + .send({ error: `Error while adding plant to backyard.${err}` }); + } +}); - } catch(err) { - return res.status(400).send({ error: "Error while searching for plant." + err}); +router.get('/:userId/:myPlantId', async (req, res) => { + try { + const user = await User.findById(req.params.userId); + const index = user.myPlants.indexOf(req.params.myPlantId); + + if (index > -1) { + const myPlant = await MyPlant.findById(req.params.myPlantId); + return res.send({ + nickname: myPlant.nickname, + plant: myPlant.plant, + creation: myPlant.createdAt, + }); } + return res.send({ + message: 'Backyard plant not found.', + }); + } catch (err) { + return res + .status(400) + .send({ error: `Error while searching for plant.${err}` }); + } }); -router.put("/edit/:myPlantId", async (req, res) => { - - try { - - const newNick = req.body; - - const result = myPlantSchema.validate(newNick); - if ( result.error ) { - return res.status(400).send({ error: "Error while editing plant. " + result.error}); - } - - await MyPlant.findOneAndUpdate({_id: req.params.myPlantId}, newNick, { useFindAndModify: false}); +router.put('/edit/:myPlantId', async (req, res) => { + try { + const newNick = req.body; - return res.send({ message: "Backyard plant updated successfully."}); - - } catch (err) { - return res.status(400).send({ error: "Error while updating backyard plant." + err }); + const result = myPlantSchema.validate(newNick); + if (result.error) { + return res + .status(400) + .send({ error: `Error while editing plant. ${result.error}` }); } -}); - -router.delete("/delete/:myPlantId", async (req, res) => { - try { + await MyPlant.findOneAndUpdate({ _id: req.params.myPlantId }, newNick, { + useFindAndModify: false, + }); - const myPlant = await MyPlant.findById(req.params.myPlantId); - const user = await User.findById(myPlant.user); + return res.send({ message: 'Backyard plant updated successfully.' }); + } catch (err) { + return res + .status(400) + .send({ error: `Error while updating backyard plant.${err}` }); + } +}); - const index = user.myPlants.indexOf(req.params.myPlantId); +router.delete('/delete/:myPlantId', async (req, res) => { + try { + const myPlant = await MyPlant.findById(req.params.myPlantId); + const user = await User.findById(myPlant.user); - if (index > -1) { - user.myPlants.splice(index, 1); - } + const index = user.myPlants.indexOf(req.params.myPlantId); - await user.save(); + if (index > -1) { + user.myPlants.splice(index, 1); + } - await MyPlant.findByIdAndRemove(req.params.myPlantId, { useFindAndModify: false }); + await user.save(); - return res.send({ - message: "Plant successfully removed from backyard." - }); + await MyPlant.findByIdAndRemove(req.params.myPlantId, { + useFindAndModify: false, + }); - } catch(err) { - return res.status(400).send({ error: "Error while deleting plant from backyard." + err }); - } + return res.send({ + message: 'Plant successfully removed from backyard.', + }); + } catch (err) { + return res + .status(400) + .send({ error: `Error while deleting plant from backyard.${err}` }); + } }); module.exports = router; diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index e830628..86b8c00 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -1,12 +1,12 @@ -const express = require("express"); +const express = require('express'); -const Plant = require("../models/Plant"); -const Topic = require("../models/Topic"); +const Plant = require('../models/Plant'); +const Topic = require('../models/Topic'); const router = express.Router(); // registro de uma nova planta -router.post("/register", async (req, res) => { +router.post('/register', async (req, res) => { try { const { scientificName, @@ -53,44 +53,40 @@ router.post("/register", async (req, res) => { return res.send(err); } }); - // Listagem de Todas as plantas -router.get("/", async (req, res) => { +router.get('/', async (req, res) => { try { - const plants = await Plant.find().populate("topics"); + const plants = await Plant.find().populate('topics'); return res.send({ plants }); } catch (err) { - return res.status(400).send({ error: "Loading plants failed" }); + return res.status(400).send({ error: 'Loading plants failed' }); } }); - // Procurando planta por id -router.get("/:plantId", async (req, res) => { +router.get('/:plantId', async (req, res) => { try { - const plant = await Plant.findById(req.params.plantId).populate("topics"); + const plant = await Plant.findById(req.params.plantId).populate('topics'); return res.send({ plant }); } catch (err) { return res .status(400) - .send({ error: "error when searching for this plant " }); + .send({ error: 'error when searching for this plant ' }); } }); - // Deletando planta por id -router.delete("/:plantId", async (req, res) => { +router.delete('/:plantId', async (req, res) => { try { const deleted = await Plant.findByIdAndRemove(req.params.plantId); return res.send(deleted); } catch (err) { - return res.status(400).send({ error: "Error when Delete this plant" }); + return res.status(400).send({ error: 'Error when Delete this plant' }); } }); - // Dando upgrade planta por id -router.put("/:plantId", async (req, res) => { +router.put('/:plantId', async (req, res) => { try { const { scientificName, @@ -144,7 +140,7 @@ router.put("/:plantId", async (req, res) => { return res.send({ plant }); } catch (err) { - return res.status(400).send({ error: "Registration failed" }); + return res.status(400).send({ error: 'Registration failed' }); } }); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index c4466bc..24704da 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -1,27 +1,18 @@ -const express = require("express"); -const router = express.Router(); - -const Topic = require("../models/Topic"); -const User = require("../models/User"); -const Plant = require("../models/Plant"); -const topicSchema = require("../schemas/topicSchema"); +const express = require('express'); -router.post("/create/:plantId/:userId", async (req, res) => { -<<<<<<< b81344db108ef6c101199916a09409909e9970c5 - - try { +const router = express.Router(); - const user = await User.findById(req.params.userId); - const plant = await Plant.findById(req.params.plantId); +const Topic = require('../models/Topic'); +const User = require('../models/User'); +const Plant = require('../models/Plant'); +const topicSchema = require('../schemas/topicSchema'); - const result = topicSchema.validate(req.body); -======= +router.post('/create/:plantId/:userId', async (req, res) => { try { const user = await User.findById(req.params.userId); const plant = await Plant.findById(req.params.plantId); ->>>>>>> Update PR to follow codacy patterns - if ( result.error ) return res.status(400).send({ error: "Error while creating topic. " + result.error}); + const result = topicSchema.validate(req.body); if (result.error) { return res @@ -40,38 +31,41 @@ router.post("/create/:plantId/:userId", async (req, res) => { user.topics.push(topic); await user.save(); - } catch (err) { - return res.status(400).send({ error: "Error while creating topic." + err }); - } + plant.topics.push(topic); + await plant.save(); return res.send({ topic }); + } catch (err) { + return res.status(400).send({ error: `Error while creating topic.${err}` }); + } }); -router.put("/update/:topicId", async (req, res) => { -<<<<<<< b81344db108ef6c101199916a09409909e9970c5 -======= +router.put('/update/:topicId', async (req, res) => { try { const topic = await Topic.findById(req.params.topicId); ->>>>>>> Update PR to follow codacy patterns - try { const newData = req.body; if (!newData.title) newData.title = topic.title; if (!newData.description) newData.description = topic.description; - const newData = req.body; + const result = topicSchema.validate(newData); + if (result.error) { + return res + .status(400) + .send({ error: `Error while creating topic. ${result.error}` }); + } await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { useFindAndModify: false, }); - return res.send({ message: "Topic updated successfully." }); + return res.send({ message: 'Topic updated successfully.' }); } catch (err) { return res.status(400).send({ error: `Error while updating topic.${err}` }); } }); -router.delete("/delete/:topicId", async (req, res) => { +router.delete('/delete/:topicId', async (req, res) => { try { const topic = await Topic.findById(req.params.topicId); const user = await User.findById(topic.user); @@ -90,52 +84,49 @@ router.delete("/delete/:topicId", async (req, res) => { user.save(); plant.save(); - return res.send({ - message: "Topic successfully removed." - }); + await Topic.findByIdAndRemove(req.params.topicId, { + useFindAndModify: false, + }); return res.send({ - message: "Topic successfully removed.", + message: 'Topic successfully removed.', }); } catch (err) { return res.status(400).send({ error: `Error while deleting topic.${err}` }); } }); -router.get("/list", async (req, res) => { +router.get('/list', async (req, res) => { try { - const topic = await Topic.find().populate(["user"]); - - const topic = await Topic.find().populate(["user"]); + const topic = await Topic.find().populate(['user']); - return res.send({ topic }); - - } catch (err) { - return res.status(400).send({ error: "Error while listing topics." + err }); - } + return res.send({ topic }); + } catch (err) { + return res.status(400).send({ error: `Error while listing topics.${err}` }); + } }); -router.post("/like/:topicId", async (req, res) => { +router.post('/like/:topicId', async (req, res) => { try { await Topic.findOneAndUpdate( { _id: req.params.topicId }, { $inc: { likes: 1 } }, { useFindAndModify: false } ); - return res.send({ message: "Liked!" }); + return res.send({ message: 'Liked!' }); } catch (err) { return res.status(400).send({ error: `Error while liking topic.${err}` }); } }); -router.post("/dislike/:topicId", async (req, res) => { +router.post('/dislike/:topicId', async (req, res) => { try { await Topic.findOneAndUpdate( { _id: req.params.topicId }, { $inc: { dislikes: 1 } }, { useFindAndModify: false } ); - return res.send({ message: "Disliked!" }); + return res.send({ message: 'Disliked!' }); } catch (err) { return res .status(400) @@ -143,4 +134,4 @@ router.post("/dislike/:topicId", async (req, res) => { } }); -module.exports = router; +module.exports = router; \ No newline at end of file diff --git a/src/schemas/myPlantSchema.js b/src/schemas/myPlantSchema.js index 484265d..5a9553e 100644 --- a/src/schemas/myPlantSchema.js +++ b/src/schemas/myPlantSchema.js @@ -1,7 +1,7 @@ -const Joi = require("joi"); +const Joi = require('joi'); const myPlantSchema = Joi.object({ - nickname: Joi.string().alphanum().min(2).max(20).required(), + nickname: Joi.string().alphanum().min(2).max(20).required(), }); module.exports = myPlantSchema; diff --git a/src/schemas/topicSchema.js b/src/schemas/topicSchema.js index e4cd441..9a0379e 100644 --- a/src/schemas/topicSchema.js +++ b/src/schemas/topicSchema.js @@ -1,4 +1,4 @@ -const Joi = require("joi"); +const Joi = require('joi'); const topicSchema = Joi.object({ title: Joi.string().min(4).max(30).required(), diff --git a/src/schemas/userSchema.js b/src/schemas/userSchema.js index f36f84d..20101d6 100644 --- a/src/schemas/userSchema.js +++ b/src/schemas/userSchema.js @@ -1,4 +1,4 @@ -const Joi = require("joi"); +const Joi = require('joi'); const userSchema = Joi.object({ username: Joi.string().alphanum().min(4).max(30).required(), @@ -6,8 +6,8 @@ const userSchema = Joi.object({ passwordConfirmation: Joi.string() .min(8) .required() - .valid(Joi.ref("password")) - .error(new Error("Password confirmation does not match.")), + .valid(Joi.ref('password')) + .error(new Error('Password confirmation does not match.')), email: Joi.string().email().required(), }); From 6e31723e12e4520a9ce0ba2188cf672954ce9be8 Mon Sep 17 00:00:00 2001 From: senaarth Date: Sat, 14 Nov 2020 15:57:30 -0300 Subject: [PATCH 099/147] Fix creation of a myPlant bug --- src/routes/myPlantRoutes.js | 10 +++++----- src/routes/topicRoutes.js | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js index 18242fa..d35d976 100644 --- a/src/routes/myPlantRoutes.js +++ b/src/routes/myPlantRoutes.js @@ -20,18 +20,18 @@ router.post('/add/:userId/:plantId', async (req, res) => { const result = myPlantSchema.validate({ nickname: req.body.nickname }); if (result.error) return res.status(400).send(result.error); - const myPlant = { + const myPlant = await MyPlant.create({ user, nickname: req.body.nickname, plant, - }; - - await MyPlant.create(myPlant); + }); await user.myPlants.push(myPlant); await user.save(); - return res.send(user); + return res.status(200).send({ + message: 'Plant successfuly addded to backyard.', + }); } catch (err) { return res .status(400) diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 24704da..d03c9c6 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -134,4 +134,4 @@ router.post('/dislike/:topicId', async (req, res) => { } }); -module.exports = router; \ No newline at end of file +module.exports = router; From 7914a74734dd36effbbff8d234401dd3e9e8be81 Mon Sep 17 00:00:00 2001 From: joaovitorml Date: Sun, 15 Nov 2020 14:29:05 -0300 Subject: [PATCH 100/147] Post myPlant now returns myPlant body instead of success message --- src/routes/myPlantRoutes.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js index d35d976..fa4864a 100644 --- a/src/routes/myPlantRoutes.js +++ b/src/routes/myPlantRoutes.js @@ -29,9 +29,10 @@ router.post('/add/:userId/:plantId', async (req, res) => { await user.myPlants.push(myPlant); await user.save(); - return res.status(200).send({ - message: 'Plant successfuly addded to backyard.', - }); + return res.status(200).send({myPlant}); + // return res.status(200).send({ + // message: 'Plant successfuly addded to backyard.', + // }); } catch (err) { return res .status(400) From 854d1f6ccdc36ec10ba630b8b338e8436324987a Mon Sep 17 00:00:00 2001 From: senaarth Date: Fri, 13 Nov 2020 17:52:24 -0300 Subject: [PATCH 101/147] Create add favorite plant feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vinícius Vieira de Souza Co-authored-by: Victor Santos --- src/index.js | 3 ++- src/models/User.js | 7 +++++++ src/routes/favoriteRoutes.js | 26 ++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/routes/favoriteRoutes.js diff --git a/src/index.js b/src/index.js index c979282..47af98a 100644 --- a/src/index.js +++ b/src/index.js @@ -9,7 +9,7 @@ const plantRoutes = require('./routes/plantRoutes'); const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); const myPlantRoutes = require('./routes/myPlantRoutes'); -// MongoDB connection +const favoriteRoutes = require('./routes/favoriteRoutes'); // MongoDB connection // mongodb://localhost:27017/noderest => meu banco de dados local polupado @@ -31,6 +31,7 @@ app.use('/plant', plantRoutes); app.use('/topic', topicRoutes); app.use('/comment', commentRoutes); app.use('/myplants', myPlantRoutes); +app.use('/favorite', favoriteRoutes); // starting the server app.set('port', process.env.PORT || 3000); diff --git a/src/models/User.js b/src/models/User.js index bbed348..fd314ee 100644 --- a/src/models/User.js +++ b/src/models/User.js @@ -31,6 +31,13 @@ const userSchema = new Schema({ require: true, }, ], + favorites: [ + { + type: mongoose.Schema.Types.ObjectId, + ref: 'Plants', + require: true, + }, + ], }); const User = mongoose.model('User', userSchema); diff --git a/src/routes/favoriteRoutes.js b/src/routes/favoriteRoutes.js new file mode 100644 index 0000000..f97ee33 --- /dev/null +++ b/src/routes/favoriteRoutes.js @@ -0,0 +1,26 @@ +const express = require('express'); + +const router = express.Router(); + +const User = require('../models/User'); +const Plant = require('../models/Plant'); + +router.post('/add/:userId/:plantId', async (req, res) => { + try { + const user = await User.findById(req.params.userId); + const plant = await Plant.findById(req.params.plantId); + + if (user.favorites.indexOf(plant) === -1) { + user.favorites.push(plant); + await user.save(); + } + + return res.status(200).send({ plant }); + } catch (err) { + return res + .status(400) + .send({ error: `Error while adding new favorite plant. ${err}` }); + } +}); + +module.exports = router; From 5814de3ea3220c9d7cc01611073c3975f78fee85 Mon Sep 17 00:00:00 2001 From: Victor Samuel Date: Fri, 13 Nov 2020 18:32:44 -0300 Subject: [PATCH 102/147] Create favorite listing feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Arthur Sena Co-authored-by: Vinícius Vieira de Souza --- src/index.js | 2 +- src/routes/favoriteRoutes.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 47af98a..5ed88c2 100644 --- a/src/index.js +++ b/src/index.js @@ -31,7 +31,7 @@ app.use('/plant', plantRoutes); app.use('/topic', topicRoutes); app.use('/comment', commentRoutes); app.use('/myplants', myPlantRoutes); -app.use('/favorite', favoriteRoutes); +app.use('/favorites', favoriteRoutes); // starting the server app.set('port', process.env.PORT || 3000); diff --git a/src/routes/favoriteRoutes.js b/src/routes/favoriteRoutes.js index f97ee33..7e6eff6 100644 --- a/src/routes/favoriteRoutes.js +++ b/src/routes/favoriteRoutes.js @@ -23,4 +23,18 @@ router.post('/add/:userId/:plantId', async (req, res) => { } }); +router.get('/list/:userId', async (req, res) => { + try{ + const user = await User.findById(req.params.userId); + const favorites = user.favorites; + + return res.status(200).send({ favorites }); + + }catch (err){ + return res + .status(400) + .send({ error: `Error loading favorites. ${err}` }); + } +}); + module.exports = router; From 88a721faee7c26b283561a588c0389b6d4877faa Mon Sep 17 00:00:00 2001 From: faco400 Date: Fri, 13 Nov 2020 19:14:05 -0300 Subject: [PATCH 103/147] Create deleting favorite plant feature Co-authored-by: Arthur Sena Co-authored-by: Victor Samuel dos Santos Lucas --- src/routes/favoriteRoutes.js | 29 ++++++++++++++++++++++------- src/routes/myPlantRoutes.js | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/routes/favoriteRoutes.js b/src/routes/favoriteRoutes.js index 7e6eff6..40e826c 100644 --- a/src/routes/favoriteRoutes.js +++ b/src/routes/favoriteRoutes.js @@ -15,7 +15,9 @@ router.post('/add/:userId/:plantId', async (req, res) => { await user.save(); } - return res.status(200).send({ plant }); + return res + .status(200) + .send({ message: 'Plant successfuly added to user favorites.' }); } catch (err) { return res .status(400) @@ -24,16 +26,29 @@ router.post('/add/:userId/:plantId', async (req, res) => { }); router.get('/list/:userId', async (req, res) => { - try{ + try { const user = await User.findById(req.params.userId); - const favorites = user.favorites; + const { favorites } = user; return res.status(200).send({ favorites }); + } catch (err) { + return res.status(400).send({ error: `Error loading favorites. ${err}` }); + } +}); - }catch (err){ - return res - .status(400) - .send({ error: `Error loading favorites. ${err}` }); +router.delete('/delete/:userId/:plantId', async (req, res) => { + try { + const user = await User.findById(req.params.userId); + const index = user.favorites.indexOf(req.params.plantId); + + if (index > -1) { + user.favorites.splice(index, 1); + await user.save(); + } + + return res.status(200).send({ message: 'Favorite deleted successfuly' }); + } catch (err) { + return res.status(400).send({ error: `Error deleting favorite. ${err}` }); } }); diff --git a/src/routes/myPlantRoutes.js b/src/routes/myPlantRoutes.js index fa4864a..f7f461a 100644 --- a/src/routes/myPlantRoutes.js +++ b/src/routes/myPlantRoutes.js @@ -29,7 +29,7 @@ router.post('/add/:userId/:plantId', async (req, res) => { await user.myPlants.push(myPlant); await user.save(); - return res.status(200).send({myPlant}); + return res.status(200).send({ myPlant }); // return res.status(200).send({ // message: 'Plant successfuly addded to backyard.', // }); From 8140bcd0cffe534810ecd2b31c642444d10f4ac6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20V=C3=ADtor=20Lemos?= Date: Sun, 15 Nov 2020 19:06:44 -0300 Subject: [PATCH 104/147] Update linters.yml --- .github/workflows/linters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index be4aebc..7794778 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -17,6 +17,6 @@ jobs: - name: Setup ESLint run: | npm install --save-dev babel-eslint@10.1.x eslint@7.11.x eslint-config-airbnb@18.2.x eslint-config-prettier@6.13.x eslint-import-resolver-node@0.3.x eslint-module-utils@2.6.x eslint-plugin-import@2.22.x eslint-plugin-jsx-a11y@6.3.x eslint-plugin-prettier@3.1.x eslint-plugin-react@7.21.x eslint-plugin-react-hooks@4.1.x eslint-scope@5.1.x eslint-utils@2.1.x eslint-visitor-keys@2.0.x - [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/fga-eps-mds/2020.1-GaiaDex-BackEnd/adding_eslint/.eslintrc.json + [ -f .eslintrc.json ] || wget https://raw.githubusercontent.com/fga-eps-mds/2020.1-GaiaDex-BackEnd/develop/.eslintrc.json - name: ESLint Report run: npx eslint . From b8b7e897c1f37cb7d68652c70764d3de9724247f Mon Sep 17 00:00:00 2001 From: faco400 Date: Wed, 21 Oct 2020 20:52:02 -0300 Subject: [PATCH 105/147] Create collection route and model Co-authored-by: Marcos Gabriel Tavares --- src/index.js | 7 ++++++- src/models/Collection.js | 19 +++++++++++++++++++ src/routes/auth.js | 3 ++- src/routes/authRoutes.js | 11 +++++++++++ src/routes/collectionRoutes.js | 21 +++++++++++++++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 src/models/Collection.js create mode 100644 src/routes/collectionRoutes.js diff --git a/src/index.js b/src/index.js index 5ed88c2..c3d2e13 100644 --- a/src/index.js +++ b/src/index.js @@ -10,12 +10,16 @@ const topicRoutes = require('./routes/topicRoutes'); const commentRoutes = require('./routes/commentRoutes'); const myPlantRoutes = require('./routes/myPlantRoutes'); const favoriteRoutes = require('./routes/favoriteRoutes'); +const collectionRoutes = require('./routes/collectionRoutes'); // MongoDB connection // mongodb://localhost:27017/noderest => meu banco de dados local polupado // mongodb://mongo:27017/backend => banco de dados da develop mongoose - .connect('mongodb://mongo:27017/backend', { useNewUrlParser: true }) + .connect('mongodb://mongo:27017/backend', { + useNewUrlParser: true, + useUnifiedTopology: true, + }) .then(() => console.log('MongoDB Connected')) .catch((err) => console.log(err)); @@ -32,6 +36,7 @@ app.use('/topic', topicRoutes); app.use('/comment', commentRoutes); app.use('/myplants', myPlantRoutes); app.use('/favorites', favoriteRoutes); +app.use('/collection', collectionRoutes); // starting the server app.set('port', process.env.PORT || 3000); diff --git a/src/models/Collection.js b/src/models/Collection.js new file mode 100644 index 0000000..4a4bbfd --- /dev/null +++ b/src/models/Collection.js @@ -0,0 +1,19 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const CollectionSchema = new mongoose.Schema({ + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + myPlants: [{ + type: Schema.Types.ObjectId, + ref: 'MyPlants', + require: true, + }], +}); + +const Collection = mongoose.model('Collection', CollectionSchema); + +module.exports = Collection; \ No newline at end of file diff --git a/src/routes/auth.js b/src/routes/auth.js index 2b6ba85..cf10e66 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,8 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - secret: process.env.SECRET, + "secret": "59b2ee8d99ffea68cecc48a56f303d65" + }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index c29b72c..0ff0cde 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -85,4 +85,15 @@ router.delete('/delete/:id', auth, async (req, res) => { } }); +// //REMOVER ESSA ROTA POIS ELA EU CRIEI PARA APRENDIZADO +// router.get('/list/:UserID', async(req, res) =>{ +// try{ +// //id do faco400: 5f8e17bbc1222a0028041272 +// //const {username} = "faco400" +// //const teste = await User.find().populate('username'); +// }catch(err){ +// return res.status(400).send({error: 'Error visualizing collection' + err}); +// } +// }) + module.exports = router; diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js new file mode 100644 index 0000000..5f36adb --- /dev/null +++ b/src/routes/collectionRoutes.js @@ -0,0 +1,21 @@ +const express = require('express'); +const router = express.Router(); + +const Collection = require('../models/Collection'); +const User = require('../models/User'); + +router.get('/', async(req, res) => { + res.send({message: "collection"}); +}); + +router.get('/:userId', async(req, res) =>{ + try{ + + const user = await User.findById(req.params.UserID); + return res.send(user.myPlants); + }catch(err){ + return res.status(400).send({error: 'Error visualizing collection' + err}); + } +}) + +module.exports = router; \ No newline at end of file From 4bbf4c950a73df4dccebaafc21925276f07fd430 Mon Sep 17 00:00:00 2001 From: faco400 Date: Tue, 27 Oct 2020 20:15:50 -0300 Subject: [PATCH 106/147] Fix visualize_my_collection --- src/routes/auth.js | 2 +- src/routes/collectionRoutes.js | 28 ++++++++++++++++++++++++++-- src/routes/plantRoutes.js | 2 ++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/routes/auth.js b/src/routes/auth.js index cf10e66..d9e92a9 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - "secret": "59b2ee8d99ffea68cecc48a56f303d65" + "secret": process.env.SECRET }; function auth(req, res, next) { diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index 5f36adb..b4e1912 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -1,8 +1,11 @@ const express = require('express'); const router = express.Router(); + const Collection = require('../models/Collection'); const User = require('../models/User'); +const MyPlant = require('../models/myPlant'); +const Plant = require('../models/Plant'); router.get('/', async(req, res) => { res.send({message: "collection"}); @@ -10,9 +13,30 @@ router.get('/', async(req, res) => { router.get('/:userId', async(req, res) =>{ try{ + const user = await User.findById(req.params.userId); + const length = user.myPlants.length; + console.log(user.myPlants.length); + if(length > 0) { + //mostra todas as plantas + for(var index = 0; index < user.myPlants.length; index++) { + var myplant = await MyPlant.findById(user.myPlants[index]); + var typePlant = await Plant.findById(myplant.plant); + res.send(myplant.nickname); + //res.send(Object.values()); + } + //return res.send(user.myPlants[0]); + //return res.send({message: "collection!!"}) + + // const data = new Date(); + // const tempo = { + // "dia": data.getDate(), + // "mes": data.getMonth()+1, + // "ano": data.getFullYear(), + // } - const user = await User.findById(req.params.UserID); - return res.send(user.myPlants); + }else{ + return res.send({message: "No plants in my collection"}); + } }catch(err){ return res.status(400).send({error: 'Error visualizing collection' + err}); } diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 86b8c00..a218020 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -2,6 +2,8 @@ const express = require('express'); const Plant = require('../models/Plant'); const Topic = require('../models/Topic'); +const myPlant = require('../models/myPlant'); +const User = require('../models/User'); const router = express.Router(); From df53210e0d3671868d5232cca726c480fcb7514c Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 27 Oct 2020 19:35:27 -0400 Subject: [PATCH 107/147] Fix collections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vinícius Vieira de Souza --- .dockerignore | 3 ++- src/routes/collectionRoutes.js | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index edd83c0..87dcaf7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ node_modules npm-debug.log Dockerfile -.dockerignore \ No newline at end of file +.dockerignore +.env \ No newline at end of file diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index b4e1912..216e782 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -17,13 +17,17 @@ router.get('/:userId', async(req, res) =>{ const length = user.myPlants.length; console.log(user.myPlants.length); if(length > 0) { + var plantArray=[]; //mostra todas as plantas for(var index = 0; index < user.myPlants.length; index++) { var myplant = await MyPlant.findById(user.myPlants[index]); var typePlant = await Plant.findById(myplant.plant); - res.send(myplant.nickname); + var objplant = "{\"nickname\" : \"" + myplant.nickname + "\", \"common_name\" : \"" + typePlant.common_name + "\"}" + var objplant = JSON.parse(objplant); + plantArray.push(objplant); //res.send(Object.values()); } + res.send(plantArray); //return res.send(user.myPlants[0]); //return res.send({message: "collection!!"}) From 08ba10e1ae7f624558b9f129407097616ebcf902 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 27 Oct 2020 20:41:45 -0400 Subject: [PATCH 108/147] New model plantNotifications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vinícius Vieira de Souza --- src/models/myPlant.js | 28 +++++++++++++++++++++++++++ src/models/plantNotifications.js | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/models/myPlant.js create mode 100644 src/models/plantNotifications.js diff --git a/src/models/myPlant.js b/src/models/myPlant.js new file mode 100644 index 0000000..6d11ee7 --- /dev/null +++ b/src/models/myPlant.js @@ -0,0 +1,28 @@ +const mongoose = require('mongoose'); + +const { Schema } = mongoose; + +const myPlantSchema = new mongoose.Schema({ + nickname: { + type: String, + required: true, + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + plant: { + type: mongoose.Schema.Types.ObjectId, + ref: 'Plant', + require: true, + }, + createdAt: { + type: Date, + default: Date.now, + }, +}); + +const myPlant = mongoose.model('MyPlants', myPlantSchema); + +module.exports = myPlant; diff --git a/src/models/plantNotifications.js b/src/models/plantNotifications.js new file mode 100644 index 0000000..36155f6 --- /dev/null +++ b/src/models/plantNotifications.js @@ -0,0 +1,33 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const notificationsSchema = new mongoose.Schema({ + nickname: { + type: String, + required: true + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + plant:{ + type:mongoose.Schema.Types.ObjectId, + ref:'Plant', + require:true + }, + createdAt: { + type: Date, + default: Date.now, + }, + + notifications: { + type:mongoose.Schema.Types.ObjectId, + ref:'plantNotifications', + } +}); + + +const plantNotifications = mongoose.model('plantNotifications', notificationsSchema); + +module.exports = plantNotifications; \ No newline at end of file From e82d5a4dd0f53f18007a62978415d21de5e8a7db Mon Sep 17 00:00:00 2001 From: faco400 Date: Tue, 27 Oct 2020 22:52:52 -0300 Subject: [PATCH 109/147] Create plantNotification model and added to collectionRoute Co-authored-by: Marcos Gabriel Tavares --- src/models/plantNotification.js | 16 ++++++++++++++++ src/models/plantNotifications.js | 33 -------------------------------- src/routes/collectionRoutes.js | 26 ++++++++++++++++++++----- src/routes/plantRoutes.js | 2 -- 4 files changed, 37 insertions(+), 40 deletions(-) create mode 100644 src/models/plantNotification.js delete mode 100644 src/models/plantNotifications.js diff --git a/src/models/plantNotification.js b/src/models/plantNotification.js new file mode 100644 index 0000000..7063129 --- /dev/null +++ b/src/models/plantNotification.js @@ -0,0 +1,16 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const notificationsSchema = new mongoose.Schema({ + water: { + type: String, + }, + fertilize: { + type: String, + }, +}); + + +const plantNotification = mongoose.model('plantNotification', notificationsSchema); + +module.exports = plantNotification; \ No newline at end of file diff --git a/src/models/plantNotifications.js b/src/models/plantNotifications.js deleted file mode 100644 index 36155f6..0000000 --- a/src/models/plantNotifications.js +++ /dev/null @@ -1,33 +0,0 @@ -const mongoose = require('mongoose'); -const Schema = mongoose.Schema; - -const notificationsSchema = new mongoose.Schema({ - nickname: { - type: String, - required: true - }, - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - plant:{ - type:mongoose.Schema.Types.ObjectId, - ref:'Plant', - require:true - }, - createdAt: { - type: Date, - default: Date.now, - }, - - notifications: { - type:mongoose.Schema.Types.ObjectId, - ref:'plantNotifications', - } -}); - - -const plantNotifications = mongoose.model('plantNotifications', notificationsSchema); - -module.exports = plantNotifications; \ No newline at end of file diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index 216e782..af12689 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -1,11 +1,10 @@ const express = require('express'); const router = express.Router(); - -const Collection = require('../models/Collection'); const User = require('../models/User'); const MyPlant = require('../models/myPlant'); const Plant = require('../models/Plant'); +const plantNotification = require('../models/plantNotification'); router.get('/', async(req, res) => { res.send({message: "collection"}); @@ -18,15 +17,14 @@ router.get('/:userId', async(req, res) =>{ console.log(user.myPlants.length); if(length > 0) { var plantArray=[]; - //mostra todas as plantas for(var index = 0; index < user.myPlants.length; index++) { var myplant = await MyPlant.findById(user.myPlants[index]); var typePlant = await Plant.findById(myplant.plant); - var objplant = "{\"nickname\" : \"" + myplant.nickname + "\", \"common_name\" : \"" + typePlant.common_name + "\"}" + var objplant = "{\"nickname\" : \"" + myplant.nickname + "\", \"common_name\" : \"" + typePlant.common_name + "\", \"profile_picture\" : \"" + typePlant.profile_picture + "\"}"; var objplant = JSON.parse(objplant); plantArray.push(objplant); - //res.send(Object.values()); } + res.send(plantArray); //return res.send(user.myPlants[0]); //return res.send({message: "collection!!"}) @@ -45,5 +43,23 @@ router.get('/:userId', async(req, res) =>{ return res.status(400).send({error: 'Error visualizing collection' + err}); } }) +router.post('/:myPlantID', async(req,res) =>{ + try{ + const {water, fertilize} = req.body + const notification = await plantNotification.create(water, fertilize); + const myplant = await MyPlant.findById(req.params.myPlantID); + + await notification.save(); + + myplant.notifications.push(notification); + + await myplant.save(); + + return res.send({ message: 'Notification successfully registered.' }); + + }catch(err){ + return res.status(400).send({error: 'Error adding notification' + err}); + } +}) module.exports = router; \ No newline at end of file diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index a218020..86b8c00 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -2,8 +2,6 @@ const express = require('express'); const Plant = require('../models/Plant'); const Topic = require('../models/Topic'); -const myPlant = require('../models/myPlant'); -const User = require('../models/User'); const router = express.Router(); From f7df17a874db7fe18a29b9bf5e6466707de1abd4 Mon Sep 17 00:00:00 2001 From: faco400 Date: Wed, 28 Oct 2020 08:59:12 -0300 Subject: [PATCH 110/147] fix spelling on collectionRoutes and Plant model --- src/routes/collectionRoutes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index af12689..7416c72 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -20,7 +20,7 @@ router.get('/:userId', async(req, res) =>{ for(var index = 0; index < user.myPlants.length; index++) { var myplant = await MyPlant.findById(user.myPlants[index]); var typePlant = await Plant.findById(myplant.plant); - var objplant = "{\"nickname\" : \"" + myplant.nickname + "\", \"common_name\" : \"" + typePlant.common_name + "\", \"profile_picture\" : \"" + typePlant.profile_picture + "\"}"; + var objplant = "{\"nickname\" : \"" + myplant.nickname + "\", \"commonName\" : \"" + typePlant.commonName + "\", \"profilePicture\" : \"" + typePlant.profilePicture + "\"}"; var objplant = JSON.parse(objplant); plantArray.push(objplant); } From a0f09919d2ca97cbc8ab30c5bfde4444adab6bce Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Tue, 17 Nov 2020 15:26:09 -0300 Subject: [PATCH 111/147] Adding new likes request MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafael Makaha Co-authored-by: João Vítor Morandi --- src/routes/commentRoutes.js | 8 +++----- src/routes/topicRoutes.js | 28 +++++++++++++++------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 538a1ca..b4eb088 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -7,7 +7,7 @@ const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); const { auth } = require('./auth'); -router.post('/create/:topicId/:userId', auth, async (req, res) => { +router.post('/create/:topicId/:userId', async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); @@ -19,8 +19,7 @@ router.post('/create/:topicId/:userId', auth, async (req, res) => { }); const topic = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: { path: 'user' } }, - { path: 'user' }, - { path: 'plant' }, + { path: 'user' } ]); await comment.save(); @@ -29,8 +28,7 @@ router.post('/create/:topicId/:userId', auth, async (req, res) => { await topic.save(); const topicCorrect = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: { path: 'user' } }, - { path: 'user' }, - { path: 'plant' }, + { path: 'user' } ]); return res.send(topicCorrect); } catch (err) { diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index e0bf057..a276c7b 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -24,7 +24,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { ...req.body, user: req.params.userId, plant: req.params.plantId, - }); + }) await topic.save(); @@ -55,10 +55,13 @@ router.put('/update/:topicId', async (req, res) => { .status(400) .send({ error: `Error while creating topic. ${result.error}` }); - await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { - useFindAndModify: false, - }); - return res.send({ message: 'Topic updated successfully.' }); + topicNew = await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { + useFindAndModify: true, + }).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' } + ]); + return res.send(topicNew); } catch (err) { return res.status(400).send({ error: `Error while updating topic.${err}` }); } @@ -86,10 +89,7 @@ router.delete('/delete/:topicId', async (req, res) => { await Topic.findByIdAndRemove(req.params.topicId, { useFindAndModify: false, }); - - return res.send({ - message: 'Topic successfully removed.', - }); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while deleting topic.${err}` }); } @@ -129,9 +129,8 @@ router.post('/like/:topicId', auth, async (req, res) => { topic.likes.push(like); await topic.save(); const topictrue = await Topic.findById(req.params.topicId).populate([ - { path: 'likes' }, - { path: 'user' }, - { path: 'toppic' }, + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' } ]); return res.send(topictrue); } @@ -154,7 +153,10 @@ router.post('/dislike/:topicId', auth, async (req, res) => { topic.likes.splice(index, 1); } topic.save(); - await Like.findByIdAndRemove(like._id).populate('user'); + await Like.findByIdAndRemove(like._id).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' } + ]); return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); From d5ea5cae31f6a54027f7e62c808ad6dfe1a9c4b2 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 18 Nov 2020 16:39:00 -0300 Subject: [PATCH 112/147] Adding user finOne routerand changing the schema reference at user model Co-authored-by: V100K { } }); +router.get('/user/:id', async (req, res) => { + try { + const user = await User.findById(req.params.id).populate([ + { path: 'topics' }, + { path: 'myPlants' }, + { path: 'favorites' }, + ]); + return res.send(user); + } catch (err) { + return res.status(400).send({ error: `Error while finding user.${err}` }); + } +}); + router.put('/update/:id', auth, async (req, res) => { try { const user = await User.findById(req.params.id); From 181d5da2ce762f3294e87330b2362559d453e253 Mon Sep 17 00:00:00 2001 From: faco400 Date: Wed, 21 Oct 2020 20:52:02 -0300 Subject: [PATCH 113/147] Create collection route and model Co-authored-by: Marcos Gabriel Tavares --- src/routes/collectionRoutes.js | 95 +++++++++++++++++----------------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index 7416c72..a3bbd10 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -1,4 +1,5 @@ const express = require('express'); + const router = express.Router(); const User = require('../models/User'); @@ -6,60 +7,60 @@ const MyPlant = require('../models/myPlant'); const Plant = require('../models/Plant'); const plantNotification = require('../models/plantNotification'); -router.get('/', async(req, res) => { - res.send({message: "collection"}); +router.get('/', async (req, res) => { + res.send({ message: 'collection' }); }); -router.get('/:userId', async(req, res) =>{ - try{ - const user = await User.findById(req.params.userId); - const length = user.myPlants.length; - console.log(user.myPlants.length); - if(length > 0) { - var plantArray=[]; - for(var index = 0; index < user.myPlants.length; index++) { - var myplant = await MyPlant.findById(user.myPlants[index]); - var typePlant = await Plant.findById(myplant.plant); - var objplant = "{\"nickname\" : \"" + myplant.nickname + "\", \"commonName\" : \"" + typePlant.commonName + "\", \"profilePicture\" : \"" + typePlant.profilePicture + "\"}"; - var objplant = JSON.parse(objplant); - plantArray.push(objplant); - } - - res.send(plantArray); - //return res.send(user.myPlants[0]); - //return res.send({message: "collection!!"}) +router.get('/:userId', async (req, res) => { + try { + const user = await User.findById(req.params.userId); + const { length } = user.myPlants; + console.log(user.myPlants.length); + if (length > 0) { + const plantArray = []; + for (let index = 0; index < user.myPlants.length; index++) { + const myplant = await MyPlant.findById(user.myPlants[index]); + const typePlant = await Plant.findById(myplant.plant); + var objplant = `{"nickname" : "${myplant.nickname}", "commonName" : "${typePlant.commonName}", "profilePicture" : "${typePlant.profilePicture}"}`; + var objplant = JSON.parse(objplant); + plantArray.push(objplant); + } - // const data = new Date(); - // const tempo = { - // "dia": data.getDate(), - // "mes": data.getMonth()+1, - // "ano": data.getFullYear(), - // } + res.send(plantArray); + // return res.send(user.myPlants[0]); + // return res.send({message: "collection!!"}) - }else{ - return res.send({message: "No plants in my collection"}); - } - }catch(err){ - return res.status(400).send({error: 'Error visualizing collection' + err}); + // const data = new Date(); + // const tempo = { + // "dia": data.getDate(), + // "mes": data.getMonth()+1, + // "ano": data.getFullYear(), + // } + } else { + return res.send({ message: 'No plants in my collection' }); } -}) -router.post('/:myPlantID', async(req,res) =>{ - try{ - const {water, fertilize} = req.body - const notification = await plantNotification.create(water, fertilize); - const myplant = await MyPlant.findById(req.params.myPlantID); - - await notification.save(); + } catch (err) { + return res + .status(400) + .send({ error: `Error visualizing collection${err}` }); + } +}); +router.post('/:myPlantID', async (req, res) => { + try { + const { water, fertilize } = req.body; + const notification = await plantNotification.create(water, fertilize); + const myplant = await MyPlant.findById(req.params.myPlantID); - myplant.notifications.push(notification); + await notification.save(); - await myplant.save(); + myplant.notifications.push(notification); - return res.send({ message: 'Notification successfully registered.' }); + await myplant.save(); - }catch(err){ - return res.status(400).send({error: 'Error adding notification' + err}); - } -}) + return res.send({ message: 'Notification successfully registered.' }); + } catch (err) { + return res.status(400).send({ error: `Error adding notification${err}` }); + } +}); -module.exports = router; \ No newline at end of file +module.exports = router; From 17a693e93bf9393d1c1261b274552c5a3df48573 Mon Sep 17 00:00:00 2001 From: faco400 Date: Tue, 27 Oct 2020 20:15:50 -0300 Subject: [PATCH 114/147] Fix visualize_my_collection --- src/routes/collectionRoutes.js | 3 ++- src/routes/plantRoutes.js | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index a3bbd10..600aa0c 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -2,10 +2,11 @@ const express = require('express'); const router = express.Router(); + +const Collection = require('../models/Collection'); const User = require('../models/User'); const MyPlant = require('../models/myPlant'); const Plant = require('../models/Plant'); -const plantNotification = require('../models/plantNotification'); router.get('/', async (req, res) => { res.send({ message: 'collection' }); diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 86b8c00..a218020 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -2,6 +2,8 @@ const express = require('express'); const Plant = require('../models/Plant'); const Topic = require('../models/Topic'); +const myPlant = require('../models/myPlant'); +const User = require('../models/User'); const router = express.Router(); From a40d571ac0aea3889013a3707976751857844007 Mon Sep 17 00:00:00 2001 From: Marcos Gabriel Tavares Date: Tue, 27 Oct 2020 20:41:45 -0400 Subject: [PATCH 115/147] New model plantNotifications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vinícius Vieira de Souza --- src/models/plantNotifications.js | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/models/plantNotifications.js diff --git a/src/models/plantNotifications.js b/src/models/plantNotifications.js new file mode 100644 index 0000000..36155f6 --- /dev/null +++ b/src/models/plantNotifications.js @@ -0,0 +1,33 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const notificationsSchema = new mongoose.Schema({ + nickname: { + type: String, + required: true + }, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + plant:{ + type:mongoose.Schema.Types.ObjectId, + ref:'Plant', + require:true + }, + createdAt: { + type: Date, + default: Date.now, + }, + + notifications: { + type:mongoose.Schema.Types.ObjectId, + ref:'plantNotifications', + } +}); + + +const plantNotifications = mongoose.model('plantNotifications', notificationsSchema); + +module.exports = plantNotifications; \ No newline at end of file From af05962b7b130ade21775fa938121bfe32215cd9 Mon Sep 17 00:00:00 2001 From: faco400 Date: Tue, 27 Oct 2020 22:52:52 -0300 Subject: [PATCH 116/147] Create plantNotification model and added to collectionRoute Co-authored-by: Marcos Gabriel Tavares --- src/models/plantNotifications.js | 33 -------------------------------- src/routes/collectionRoutes.js | 3 +-- src/routes/plantRoutes.js | 2 -- 3 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 src/models/plantNotifications.js diff --git a/src/models/plantNotifications.js b/src/models/plantNotifications.js deleted file mode 100644 index 36155f6..0000000 --- a/src/models/plantNotifications.js +++ /dev/null @@ -1,33 +0,0 @@ -const mongoose = require('mongoose'); -const Schema = mongoose.Schema; - -const notificationsSchema = new mongoose.Schema({ - nickname: { - type: String, - required: true - }, - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - plant:{ - type:mongoose.Schema.Types.ObjectId, - ref:'Plant', - require:true - }, - createdAt: { - type: Date, - default: Date.now, - }, - - notifications: { - type:mongoose.Schema.Types.ObjectId, - ref:'plantNotifications', - } -}); - - -const plantNotifications = mongoose.model('plantNotifications', notificationsSchema); - -module.exports = plantNotifications; \ No newline at end of file diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index 600aa0c..a3bbd10 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -2,11 +2,10 @@ const express = require('express'); const router = express.Router(); - -const Collection = require('../models/Collection'); const User = require('../models/User'); const MyPlant = require('../models/myPlant'); const Plant = require('../models/Plant'); +const plantNotification = require('../models/plantNotification'); router.get('/', async (req, res) => { res.send({ message: 'collection' }); diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index a218020..86b8c00 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -2,8 +2,6 @@ const express = require('express'); const Plant = require('../models/Plant'); const Topic = require('../models/Topic'); -const myPlant = require('../models/myPlant'); -const User = require('../models/User'); const router = express.Router(); From e692e1eb54a11f118b1cb976c9fd33ab3a08dc46 Mon Sep 17 00:00:00 2001 From: faco400 Date: Sun, 1 Nov 2020 09:53:06 -0300 Subject: [PATCH 117/147] Configure eslint, remove plantNotifications model, add water and fertilize props in myPlant model, refactor 'for' loop in collectionRoutes due to eslint --- src/models/Collection.js | 25 ++++++------ src/models/Plant.js | 14 +++---- src/models/plantNotification.js | 16 -------- src/routes/auth.js | 3 +- src/routes/authRoutes.js | 12 ------ src/routes/collectionRoutes.js | 67 ++++++++++++++++++++++----------- 6 files changed, 66 insertions(+), 71 deletions(-) delete mode 100644 src/models/plantNotification.js diff --git a/src/models/Collection.js b/src/models/Collection.js index 4a4bbfd..449d21c 100644 --- a/src/models/Collection.js +++ b/src/models/Collection.js @@ -1,19 +1,22 @@ const mongoose = require('mongoose'); -const Schema = mongoose.Schema; + +const { Schema } = mongoose; const CollectionSchema = new mongoose.Schema({ - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, + user: { + type: Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + myPlants: [ + { + type: Schema.Types.ObjectId, + ref: 'MyPlants', + require: true, }, - myPlants: [{ - type: Schema.Types.ObjectId, - ref: 'MyPlants', - require: true, - }], + ], }); const Collection = mongoose.model('Collection', CollectionSchema); -module.exports = Collection; \ No newline at end of file +module.exports = Collection; diff --git a/src/models/Plant.js b/src/models/Plant.js index 3294204..21d4eed 100644 --- a/src/models/Plant.js +++ b/src/models/Plant.js @@ -6,19 +6,19 @@ const PlantSchema = new mongoose.Schema({ require: true, unique: true, }, - family_name: { + familyName: { type: String, require: true, }, - gender_name: { + genderName: { type: String, require: true, }, - specie_name: { + specieName: { type: String, require: true, }, - common_name: { + commonName: { type: String, require: true, }, @@ -26,11 +26,11 @@ const PlantSchema = new mongoose.Schema({ type: String, require: true, }, - first_User: { + firstUser: { type: String, require: true, }, - collection_count: { + collectionCount: { type: Number, require: true, }, @@ -38,7 +38,7 @@ const PlantSchema = new mongoose.Schema({ type: Boolean, require: true, }, - profile_picture: { + profilePicture: { type: String, require: true, }, diff --git a/src/models/plantNotification.js b/src/models/plantNotification.js deleted file mode 100644 index 7063129..0000000 --- a/src/models/plantNotification.js +++ /dev/null @@ -1,16 +0,0 @@ -const mongoose = require('mongoose'); -const Schema = mongoose.Schema; - -const notificationsSchema = new mongoose.Schema({ - water: { - type: String, - }, - fertilize: { - type: String, - }, -}); - - -const plantNotification = mongoose.model('plantNotification', notificationsSchema); - -module.exports = plantNotification; \ No newline at end of file diff --git a/src/routes/auth.js b/src/routes/auth.js index d9e92a9..2b6ba85 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,8 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - "secret": process.env.SECRET - + secret: process.env.SECRET, }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; diff --git a/src/routes/authRoutes.js b/src/routes/authRoutes.js index 0ff0cde..bb8e134 100644 --- a/src/routes/authRoutes.js +++ b/src/routes/authRoutes.js @@ -84,16 +84,4 @@ router.delete('/delete/:id', auth, async (req, res) => { return res.status(400).send({ error: `Error while deleting user. ${err}` }); } }); - -// //REMOVER ESSA ROTA POIS ELA EU CRIEI PARA APRENDIZADO -// router.get('/list/:UserID', async(req, res) =>{ -// try{ -// //id do faco400: 5f8e17bbc1222a0028041272 -// //const {username} = "faco400" -// //const teste = await User.find().populate('username'); -// }catch(err){ -// return res.status(400).send({error: 'Error visualizing collection' + err}); -// } -// }) - module.exports = router; diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index a3bbd10..a3bbef6 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -5,7 +5,6 @@ const router = express.Router(); const User = require('../models/User'); const MyPlant = require('../models/myPlant'); const Plant = require('../models/Plant'); -const plantNotification = require('../models/plantNotification'); router.get('/', async (req, res) => { res.send({ message: 'collection' }); @@ -15,27 +14,44 @@ router.get('/:userId', async (req, res) => { try { const user = await User.findById(req.params.userId); const { length } = user.myPlants; - console.log(user.myPlants.length); + // console.log(user.myPlants.length); if (length > 0) { const plantArray = []; - for (let index = 0; index < user.myPlants.length; index++) { - const myplant = await MyPlant.findById(user.myPlants[index]); + // ESlint reclamou do await dentro do for + // for (let index = 0; index < user.myPlants.length; index += 1) { + // const myplant = await MyPlant.findById(user.myPlants[index]); + // const typePlant = await Plant.findById(myplant.plant); + // let objplant = `{ + // "nickname" : "${myplant.nickname}", + // "commonName" : "${typePlant.commonName}", + // "profilePicture" : "${typePlant.profilePicture}" + // }`; + // objplant = JSON.parse(objplant); + // plantArray.push(objplant); + // } + + const promises = user.myPlants.map(async (elem, idx) => { + const myplant = await MyPlant.findById(user.myPlants[idx]); const typePlant = await Plant.findById(myplant.plant); - var objplant = `{"nickname" : "${myplant.nickname}", "commonName" : "${typePlant.commonName}", "profilePicture" : "${typePlant.profilePicture}"}`; - var objplant = JSON.parse(objplant); + // Calculo para ver quantos dias para regar e fertilizar + // OBS: POR CAUSA DO ARREDONDAMENDO VALORES TEM UM ERRO + // DEPENDENDO DA HORA + // const water = Math.round( + // (Date.parse(myplant.water) - Date.now()) / (1000 * 60 * 60 * 24) + // ); + // const fertilize = Math.round( + // (Date.parse(myplant.fertilize) - Date.now()) / (1000 * 60 * 60 * 24) + // ); + let objplant = `{ + "nickname" : "${myplant.nickname}", + "commonName" : "${typePlant.commonName}", + "profilePicture" : "${typePlant.profilePicture}"}`; + objplant = JSON.parse(objplant); plantArray.push(objplant); - } + }); + await Promise.all(promises); res.send(plantArray); - // return res.send(user.myPlants[0]); - // return res.send({message: "collection!!"}) - - // const data = new Date(); - // const tempo = { - // "dia": data.getDate(), - // "mes": data.getMonth()+1, - // "ano": data.getFullYear(), - // } } else { return res.send({ message: 'No plants in my collection' }); } @@ -44,18 +60,23 @@ router.get('/:userId', async (req, res) => { .status(400) .send({ error: `Error visualizing collection${err}` }); } + return undefined; }); -router.post('/:myPlantID', async (req, res) => { + +// Estrutura que setar visualiar necessidade de regar ou não +router.put('/:myPlantID', async (req, res) => { try { const { water, fertilize } = req.body; - const notification = await plantNotification.create(water, fertilize); + // const notification = await plantNotification.create({water, fertilize}); const myplant = await MyPlant.findById(req.params.myPlantID); + // const myplant = await MyPlant.findById(req.params.myPlantID); + // await notification.save(); + // myplant.notifications.push(notification); + myplant.water = water; + myplant.fertilize = fertilize; + myplant.save(); - await notification.save(); - - myplant.notifications.push(notification); - - await myplant.save(); + console.log({ myplant }); return res.send({ message: 'Notification successfully registered.' }); } catch (err) { From b6e691fb4ce5da70d059f7aa3ed681d00a6c7a16 Mon Sep 17 00:00:00 2001 From: faco400 Date: Wed, 18 Nov 2020 18:44:35 -0300 Subject: [PATCH 118/147] Fix collectionRoutes and delete Collection model --- src/models/Collection.js | 22 -------------- src/routes/collectionRoutes.js | 52 ++-------------------------------- 2 files changed, 2 insertions(+), 72 deletions(-) delete mode 100644 src/models/Collection.js diff --git a/src/models/Collection.js b/src/models/Collection.js deleted file mode 100644 index 449d21c..0000000 --- a/src/models/Collection.js +++ /dev/null @@ -1,22 +0,0 @@ -const mongoose = require('mongoose'); - -const { Schema } = mongoose; - -const CollectionSchema = new mongoose.Schema({ - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - myPlants: [ - { - type: Schema.Types.ObjectId, - ref: 'MyPlants', - require: true, - }, - ], -}); - -const Collection = mongoose.model('Collection', CollectionSchema); - -module.exports = Collection; diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index a3bbef6..7cc0da1 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -3,46 +3,20 @@ const express = require('express'); const router = express.Router(); const User = require('../models/User'); -const MyPlant = require('../models/myPlant'); +const MyPlant = require('../models/MyPlant'); const Plant = require('../models/Plant'); -router.get('/', async (req, res) => { - res.send({ message: 'collection' }); -}); - router.get('/:userId', async (req, res) => { try { const user = await User.findById(req.params.userId); const { length } = user.myPlants; - // console.log(user.myPlants.length); if (length > 0) { const plantArray = []; - // ESlint reclamou do await dentro do for - // for (let index = 0; index < user.myPlants.length; index += 1) { - // const myplant = await MyPlant.findById(user.myPlants[index]); - // const typePlant = await Plant.findById(myplant.plant); - // let objplant = `{ - // "nickname" : "${myplant.nickname}", - // "commonName" : "${typePlant.commonName}", - // "profilePicture" : "${typePlant.profilePicture}" - // }`; - // objplant = JSON.parse(objplant); - // plantArray.push(objplant); - // } - const promises = user.myPlants.map(async (elem, idx) => { const myplant = await MyPlant.findById(user.myPlants[idx]); const typePlant = await Plant.findById(myplant.plant); - // Calculo para ver quantos dias para regar e fertilizar - // OBS: POR CAUSA DO ARREDONDAMENDO VALORES TEM UM ERRO - // DEPENDENDO DA HORA - // const water = Math.round( - // (Date.parse(myplant.water) - Date.now()) / (1000 * 60 * 60 * 24) - // ); - // const fertilize = Math.round( - // (Date.parse(myplant.fertilize) - Date.now()) / (1000 * 60 * 60 * 24) - // ); let objplant = `{ + "_id" : "${myplant._id}", "nickname" : "${myplant.nickname}", "commonName" : "${typePlant.commonName}", "profilePicture" : "${typePlant.profilePicture}"}`; @@ -60,28 +34,6 @@ router.get('/:userId', async (req, res) => { .status(400) .send({ error: `Error visualizing collection${err}` }); } - return undefined; -}); - -// Estrutura que setar visualiar necessidade de regar ou não -router.put('/:myPlantID', async (req, res) => { - try { - const { water, fertilize } = req.body; - // const notification = await plantNotification.create({water, fertilize}); - const myplant = await MyPlant.findById(req.params.myPlantID); - // const myplant = await MyPlant.findById(req.params.myPlantID); - // await notification.save(); - // myplant.notifications.push(notification); - myplant.water = water; - myplant.fertilize = fertilize; - myplant.save(); - - console.log({ myplant }); - - return res.send({ message: 'Notification successfully registered.' }); - } catch (err) { - return res.status(400).send({ error: `Error adding notification${err}` }); - } }); module.exports = router; From baa5b2c0eb8ad94cd6fb0663580984a63e093ceb Mon Sep 17 00:00:00 2001 From: faco400 Date: Wed, 18 Nov 2020 18:59:54 -0300 Subject: [PATCH 119/147] run lint to fix errors --- src/routes/collectionRoutes.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/routes/collectionRoutes.js b/src/routes/collectionRoutes.js index 7cc0da1..95aa87b 100644 --- a/src/routes/collectionRoutes.js +++ b/src/routes/collectionRoutes.js @@ -25,10 +25,9 @@ router.get('/:userId', async (req, res) => { }); await Promise.all(promises); - res.send(plantArray); - } else { - return res.send({ message: 'No plants in my collection' }); + return res.send(plantArray); } + return res.send({ message: 'No plants in my collection' }); } catch (err) { return res .status(400) From e88fbe3a746e63862ca3e96916e5d17f76bbe87c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20V=C3=ADtor=20Lemos?= Date: Wed, 18 Nov 2020 19:07:19 -0300 Subject: [PATCH 120/147] Delete myPlant.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Vinícius Vieira de Souza Co-authored-by: Rafael Makaha --- src/models/myPlant.js | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 src/models/myPlant.js diff --git a/src/models/myPlant.js b/src/models/myPlant.js deleted file mode 100644 index 6d11ee7..0000000 --- a/src/models/myPlant.js +++ /dev/null @@ -1,28 +0,0 @@ -const mongoose = require('mongoose'); - -const { Schema } = mongoose; - -const myPlantSchema = new mongoose.Schema({ - nickname: { - type: String, - required: true, - }, - user: { - type: Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - plant: { - type: mongoose.Schema.Types.ObjectId, - ref: 'Plant', - require: true, - }, - createdAt: { - type: Date, - default: Date.now, - }, -}); - -const myPlant = mongoose.model('MyPlants', myPlantSchema); - -module.exports = myPlant; From e592044e2f56ed41e717b58491de388bfbe7b9f6 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 25 Nov 2020 03:37:50 -0300 Subject: [PATCH 121/147] resolved bug on like dislike --- src/routes/plantRoutes.js | 4 ++-- src/routes/topicRoutes.js | 34 +++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 3985c29..69768cb 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -18,7 +18,7 @@ router.post('/register', async (req, res) => { firstUser, collectionCount, extinction, - profilePicture, + profile_picture, gbifID, stateProvince, } = req.body; @@ -33,7 +33,7 @@ router.post('/register', async (req, res) => { firstUser, collectionCount, extinction, - profilePicture, + profile_picture, gbifID, stateProvince, }); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index a276c7b..1ebd30f 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -112,12 +112,12 @@ router.post('/like/:topicId', auth, async (req, res) => { try { const user = await User.findById(req.userId); const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'likes' }, + { path: 'comments', populate: { path: 'user' } }, { path: 'user' }, - { path: 'toppic' }, + { path: 'plant' }, ]); const isLiked = await Like.findOne({ - user: req.params.userId, + user: req.userId, topic: req.params.topicId, }); if (isLiked == null) { @@ -130,7 +130,8 @@ router.post('/like/:topicId', auth, async (req, res) => { await topic.save(); const topictrue = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } + { path: 'user' }, + { path: 'plant' }, ]); return res.send(topictrue); } @@ -143,20 +144,27 @@ router.post('/like/:topicId', auth, async (req, res) => { router.post('/dislike/:topicId', auth, async (req, res) => { try { - const topic = await Topic.findById(req.params.topicId); + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); const like = await Like.findOne({ user: req.userId, topic: req.params.topicId, }); - const index = topic.likes.indexOf(like._id); - if (index > -1) { - topic.likes.splice(index, 1); + if(like != null){ + const index = topic.likes.indexOf(like._id); + if (index > -1) { + topic.likes.splice(index, 1); + } + topic.save(); + await Like.findByIdAndRemove(like._id).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); } - topic.save(); - await Like.findByIdAndRemove(like._id).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } - ]); return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); From b9f259f5d0850a6d267b9c873fa76af9a22c6838 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 25 Nov 2020 18:58:46 -0300 Subject: [PATCH 122/147] adding comment and topic correct response --- src/routes/commentRoutes.js | 69 +++++++++++++++++++------------------ src/routes/topicRoutes.js | 43 +++++++++++++---------- 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index b4eb088..7e0136c 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -7,38 +7,32 @@ const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); const { auth } = require('./auth'); -router.post('/create/:topicId/:userId', async (req, res) => { +router.post('/create/:topicId', auth, async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); const comment = await Comment.create({ - ...req.body, - user: req.params.userId, + text: req.body.text, + user: req.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } - ]); + const topic = await Topic.findById(req.params.topicId); await comment.save(); - topic.comments.push(comment); await topic.save(); - const topicCorrect = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } - ]); + + const topicCorrect = await Topic.findById(req.params.topicId); return res.send(topicCorrect); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.put('/update/:commentId', async (req, res) => { +router.put('/update/:commentId', auth, async (req, res) => { try { - await Comment.findById(req.params.commentId); + const comment = await Comment.findById(req.params.commentId); const newData = req.body; if (!newData.text) @@ -47,7 +41,12 @@ router.put('/update/:commentId', async (req, res) => { await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { useFindAndModify: false, }); - return res.send({ message: 'Comment updated successfully.' }); + const newTopic = await Topic.findById(comment.topic).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plant' }, + ]); + return res.send(newTopic); } catch (err) { return res .status(400) @@ -55,7 +54,7 @@ router.put('/update/:commentId', async (req, res) => { } }); -router.delete('/delete/:commentId', async (req, res) => { +router.delete('/delete/:commentId', auth, async (req, res) => { try { const comment = await Comment.findById(req.params.commentId); const topic = await Topic.findById(comment.topic); @@ -68,11 +67,13 @@ router.delete('/delete/:commentId', async (req, res) => { topic.save(); - await Comment.findByIdAndRemove(req.params.commentId).populate('user'); - - return res.send({ - message: 'Comment successfully removed.', - }); + await Comment.findByIdAndRemove(req.params.commentId); + const newTopic = await Topic.findById(comment.topic).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plant' }, + ]); + return res.send(newTopic); } catch (err) { return res.status(400).send({ error: `Error while deleting topic.${err}` }); } @@ -81,15 +82,11 @@ router.delete('/delete/:commentId', async (req, res) => { router.post('/like/:commentId', auth, async (req, res) => { try { const user = await User.findById(req.userId); - const comment = await Comment.findById(req.params.commentId).populate([ - { path: 'likes' }, - { path: 'user' }, - { path: 'toppic' }, - ]); + const comment = await Comment.findById(req.params.commentId); const topic = await Topic.findById(comment.topic).populate([ - { path: 'likes' }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'toppic' }, + { path: 'plant' }, ]); const isLiked = await Like.findOne({ user: req.userId, @@ -104,9 +101,9 @@ router.post('/like/:commentId', auth, async (req, res) => { comment.likes.push(like); await comment.save(); const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes' }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'comments' }, + { path: 'plant' }, ]); return res.send(topicTrue); } @@ -119,7 +116,11 @@ router.post('/like/:commentId', auth, async (req, res) => { router.post('/dislike/:commentId', auth, async (req, res) => { try { const comment = await Comment.findById(req.params.commentId); - const topic = await Topic.findById(comment.topic); + const topic = await Topic.findById(comment.topic).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plant' }, + ]); const like = await Like.findOne({ user: req.userId, comment: req.params.commentId, @@ -131,11 +132,11 @@ router.post('/dislike/:commentId', auth, async (req, res) => { } comment.save(); - await Like.findByIdAndRemove(like._id).populate('user'); + await Like.findByIdAndRemove(like._id); const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes' }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'comments' }, + { path: 'plant' }, ]); return res.send(topicTrue); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 1ebd30f..3aafcdf 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -24,7 +24,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { ...req.body, user: req.params.userId, plant: req.params.plantId, - }) + }); await topic.save(); @@ -55,11 +55,16 @@ router.put('/update/:topicId', async (req, res) => { .status(400) .send({ error: `Error while creating topic. ${result.error}` }); - topicNew = await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { - useFindAndModify: true, - }).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } + const topicNew = await Topic.findOneAndUpdate( + { _id: req.params.topicId }, + newData, + { + useFindAndModify: true, + } + ).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plnt' }, ]); return res.send(topicNew); } catch (err) { @@ -98,9 +103,9 @@ router.delete('/delete/:topicId', async (req, res) => { router.get('/list', async (req, res) => { try { const topic = await Topic.find().populate([ - { path: 'likes' }, - { path: 'comments', populate: { path: 'likes' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, + { path: 'plnt' }, ]); return res.send({ topic }); } catch (err) { @@ -112,9 +117,9 @@ router.post('/like/:topicId', auth, async (req, res) => { try { const user = await User.findById(req.userId); const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); const isLiked = await Like.findOne({ user: req.userId, @@ -129,9 +134,9 @@ router.post('/like/:topicId', auth, async (req, res) => { topic.likes.push(like); await topic.save(); const topictrue = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); return res.send(topictrue); } @@ -145,24 +150,24 @@ router.post('/like/:topicId', auth, async (req, res) => { router.post('/dislike/:topicId', auth, async (req, res) => { try { const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); const like = await Like.findOne({ user: req.userId, topic: req.params.topicId, }); - if(like != null){ + if (like != null) { const index = topic.likes.indexOf(like._id); if (index > -1) { topic.likes.splice(index, 1); } topic.save(); await Like.findByIdAndRemove(like._id).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); } return res.send(topic); @@ -173,9 +178,9 @@ router.post('/dislike/:topicId', auth, async (req, res) => { router.get('/find/:topicId', async (req, res) => { try { const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); return res.send(topic); From cff2d16c85fa8d411c683642dc27a8b73e881abc Mon Sep 17 00:00:00 2001 From: Antonio Ruan Moura Barreto Date: Tue, 10 Nov 2020 19:22:24 -0300 Subject: [PATCH 123/147] Modified response of Comment create, and add topic find by id router Co-authored-by: Marcos Filipe --- package.json | 4 ++-- src/routes/commentRoutes.js | 14 +++++++++++--- src/routes/topicRoutes.js | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index bee26a5..47a8692 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,11 @@ "lint:js:fix": "npm run lint:js -- --fix" }, "lint-staged": { - "src/**/*.js": [ + "src/**/*.{js,jsx}": [ "npx eslint . --fix", "git add" ], - "src/*.js": [ + "src/*.{js,jsx}": [ "npx eslint . --fix", "git add" ] diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index b670585..c8fb422 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -15,14 +15,22 @@ router.post('/create/:topicId/:userId', async (req, res) => { user: req.params.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId); + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); await comment.save(); topic.comments.push(comment); await topic.save(); - - return res.send({ message: 'Comment successfully registered.' }); + const topicCorrect = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); + return res.send(topicCorrect); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index d03c9c6..b33e121 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -134,4 +134,18 @@ router.post('/dislike/:topicId', async (req, res) => { } }); +router.get('/find/:topicId', async (req, res) => { + try { + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); + + return res.send({ topic }); + } catch (err) { + return res.status(400).send({ error: `Error while find topic id.${err}` }); + } +}); + module.exports = router; From 5ce919322f32e03c90384e53d3ff8bdb28e1b434 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 00:14:44 -0300 Subject: [PATCH 124/147] Adding Likes's model and commentLike route and this route check if the user liked the post previously --- src/models/Comment.js | 12 +++---- src/models/Likes.js | 25 ++++++++++++++ src/models/Topic.js | 12 +++---- src/routes/auth.js | 2 +- src/routes/commentRoutes.js | 66 ++++++++++++++++++++++++------------- src/routes/topicRoutes.js | 6 ++-- 6 files changed, 81 insertions(+), 42 deletions(-) create mode 100644 src/models/Likes.js diff --git a/src/models/Comment.js b/src/models/Comment.js index 79ff587..f6afa51 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -17,14 +17,10 @@ const CommentSchema = new mongoose.Schema({ ref: 'Topic', require: true, }, - likes: { - type: Number, - default: 0, - }, - dislikes: { - type: Number, - default: 0, - }, + likes: [{ + type: Schema.Types.ObjectId, + ref: 'Like', + }], }); const Comment = mongoose.model('Comment', CommentSchema); diff --git a/src/models/Likes.js b/src/models/Likes.js new file mode 100644 index 0000000..b8ed582 --- /dev/null +++ b/src/models/Likes.js @@ -0,0 +1,25 @@ +const mongoose = require('mongoose'); + +const { Schema } = mongoose; + +const likeSchema = new Schema({ + user: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topic', + + }, + comment: { + type: Schema.Types.ObjectId, + ref: 'Comment', + + }, +}); + +const Like = mongoose.model('Like', likeSchema); + +module.exports = Like; diff --git a/src/models/Topic.js b/src/models/Topic.js index 9b41e3c..f8f541a 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -20,14 +20,10 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, - likes: { - type: Number, - default: 0, - }, - dislikes: { - type: Number, - default: 0, - }, + likes: [{ + type: Schema.Types.ObjectId, + ref: 'Like', + }], comments: [ { type: Schema.Types.ObjectId, diff --git a/src/routes/auth.js b/src/routes/auth.js index 2b6ba85..6811563 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - secret: process.env.SECRET, + secret: 'd41d8cd98f00b204e9800998ecf8427e', }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index c8fb422..919e33c 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,11 +1,13 @@ const express = require('express'); const router = express.Router(); - +const User = require('../models/User'); +const Like = require('../models/Likes'); const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); +const { auth, authConfig } = require('./auth'); -router.post('/create/:topicId/:userId', async (req, res) => { +router.post('/create/:topicId/:userId',auth, async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); @@ -76,34 +78,52 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId', async (req, res) => { +router.post('/like/:commentId/:userId', async (req, res) => { try { - await Comment.findOneAndUpdate( - { _id: req.params.commentId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - - return res.send({ message: 'Liked!' }); + const user = await User.findById(req.params.userId); + const comment = await Comment.findById(req.params.commentId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + const isLiked = await Like.findOne({user:req.params.userId}) + console.log(isLiked == null) + if(isLiked == null){ + const like = await Like.create({ + user: user, + comment: comment, + }); + await like.save(); + comment.likes.push(like); + await comment.save(); + const commenttrue = await Comment.findById(req.params.commentId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(commenttrue); + } + else{ + return res.send(comment); + } } catch (err) { - return res.status(400).send({ error: `Error while liking comment.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:commentId', async (req, res) => { +router.post('/dislike/:commentId/:userId', async (req, res) => { try { - await Comment.findOneAndUpdate( - { _id: req.params.commentId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - - return res.send({ message: 'Disliked!' }); + const like = Like.findOne({user:req.params.userId}) + // await Like.findByIdAndRemove({user:req.params.userId}); + const commenttrue = await Comment.findById(req.params.commentId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(like); + } catch (err) { - return res - .status(400) - .send({ error: `Error while linking comment.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); - module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index b33e121..2cfdd9a 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -98,8 +98,10 @@ router.delete('/delete/:topicId', async (req, res) => { router.get('/list', async (req, res) => { try { - const topic = await Topic.find().populate(['user']); - + const topic = await Topic.find().populate([ + { path: 'likes'}, + { path: 'comments' }, + ]); return res.send({ topic }); } catch (err) { return res.status(400).send({ error: `Error while listing topics.${err}` }); From 4fb71c19df69f5b542a5997739fa39f8f53fe7d7 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 01:44:11 -0300 Subject: [PATCH 125/147] Adding topicLike route and this route check if the user is auth --- src/routes/auth.js | 2 +- src/routes/commentRoutes.js | 5 ++--- src/routes/topicRoutes.js | 39 +++++++++++++++++++++++++++---------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/routes/auth.js b/src/routes/auth.js index 6811563..b0951f8 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -26,7 +26,7 @@ function auth(req, res, next) { try { const { userId } = jwt.verify(token, authConfig.secret); - req.userId = userId; + res.userId = userId; return next(); } catch (err) { req.redirect('/login_page'); diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 919e33c..8cbf6a8 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -78,7 +78,7 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId/:userId', async (req, res) => { +router.post('/like/:commentId/:userId',auth, async (req, res) => { try { const user = await User.findById(req.params.userId); const comment = await Comment.findById(req.params.commentId).populate([ @@ -86,8 +86,7 @@ router.post('/like/:commentId/:userId', async (req, res) => { { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.params.userId}) - console.log(isLiked == null) + const isLiked = await Like.findOne({user:req.params.userId,comment:req.params.commentId}) if(isLiked == null){ const like = await Like.create({ user: user, diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 2cfdd9a..0212b6c 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -1,12 +1,12 @@ const express = require('express'); const router = express.Router(); - +const Like = require('../models/Likes'); const Topic = require('../models/Topic'); const User = require('../models/User'); const Plant = require('../models/Plant'); const topicSchema = require('../schemas/topicSchema'); - +const { auth, authConfig } = require('./auth'); router.post('/create/:plantId/:userId', async (req, res) => { try { const user = await User.findById(req.params.userId); @@ -108,16 +108,35 @@ router.get('/list', async (req, res) => { } }); -router.post('/like/:topicId', async (req, res) => { +router.post('/like/:topicId/:userId',auth, async (req, res) => { try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Liked!' }); + const user = await User.findById(req.params.userId); + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + const isLiked = await Like.findOne({user:req.params.userId,topic:req.params.topicId}) + if(isLiked == null){ + const like = await Like.create({ + user: user, + topic: topic, + }); + await like.save(); + topic.likes.push(like); + await topic.save(); + const topictrue = await Topic.findById(req.params.topicId).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(topictrue); + } + else{ + return res.send(topic); + } } catch (err) { - return res.status(400).send({ error: `Error while liking topic.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); From c3c50d9965e214d548dae40897ef9e7264bf5a34 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 13:43:16 -0300 Subject: [PATCH 126/147] Adding dislike toppic and comment routes Co-authored-by: Antonio Ruan --- src/routes/commentRoutes.js | 23 +++++++++++++---------- src/routes/topicRoutes.js | 22 +++++++++++----------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 8cbf6a8..61cf7b0 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -110,19 +110,22 @@ router.post('/like/:commentId/:userId',auth, async (req, res) => { } }); -router.post('/dislike/:commentId/:userId', async (req, res) => { +router.post('/dislike/:commentId/:userId',auth, async (req, res) => { try { - const like = Like.findOne({user:req.params.userId}) - // await Like.findByIdAndRemove({user:req.params.userId}); - const commenttrue = await Comment.findById(req.params.commentId).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'toppic' }, - ]); - return res.send(like); - + const comment = await Comment.findById(req.params.commentId); + const like = await Like.findOne({user:req.params.userId,comment:req.params.commentId}); + const index = comment.likes.indexOf(like._id); + if (index > -1) { + comment.likes.splice(index, 1); + } + + comment.save(); + + await Like.findByIdAndRemove(like._id).populate('user'); + return res.send(comment); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); + module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 0212b6c..338ac38 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -140,21 +140,21 @@ router.post('/like/:topicId/:userId',auth, async (req, res) => { } }); -router.post('/dislike/:topicId', async (req, res) => { +router.post('/dislike/:topicId/:userId',auth, async (req, res) => { try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Disliked!' }); + const topic = await Topic.findById(req.params.topicId); + const like = await Like.findOne({user:req.params.userId,topic:req.params.topicId}); + const index = topic.likes.indexOf(like._id); + if (index > -1) { + topic.likes.splice(index, 1); + } + topic.save(); + await Like.findByIdAndRemove(like._id).populate('user'); + return res.send(topic); } catch (err) { - return res - .status(400) - .send({ error: `Error while dislikinng topic.${err}` }); + return res.status(400).send({ error: `Error while commenting.${err}` }); } }); - router.get('/find/:topicId', async (req, res) => { try { const topic = await Topic.findById(req.params.topicId).populate([ From b09af198f73eaab918463828953f5407519a60d1 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 16:21:19 -0300 Subject: [PATCH 127/147] userId now came from authtoken, not url more Co-authored-by: Antonio Ruan --- src/routes/auth.js | 15 ++++++++++----- src/routes/commentRoutes.js | 36 +++++++++++++++++++++++++----------- src/routes/topicRoutes.js | 7 +++++-- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/routes/auth.js b/src/routes/auth.js index b0951f8..1017bf9 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -24,13 +24,18 @@ function auth(req, res, next) { return res.status(401).send({ Error: 'Token malformated' }); } + + jwt.verify(token, authConfig.secret, function(err ,decoded){ try { - const { userId } = jwt.verify(token, authConfig.secret); - res.userId = userId; - return next(); - } catch (err) { - req.redirect('/login_page'); + req.userId = decoded.id; + console.log(decoded.id) + next(); + } + catch (err) { return res.status(400); } + }); + + } module.exports = { authConfig, auth }; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 61cf7b0..2bd2ec0 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,5 +1,5 @@ const express = require('express'); - +const jwt = require('jsonwebtoken'); const router = express.Router(); const User = require('../models/User'); const Like = require('../models/Likes'); @@ -78,15 +78,20 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId/:userId',auth, async (req, res) => { +router.post('/like/:commentId',auth, async (req, res) => { try { - const user = await User.findById(req.params.userId); + const user = await User.findById(req.userId); const comment = await Comment.findById(req.params.commentId).populate([ { path: 'likes'}, { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.params.userId,comment:req.params.commentId}) + const topic = await Topic.findById(comment.topic).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'toppic' }, + ]); + const isLiked = await Like.findOne({user:req.userId,comment:req.params.commentId}) if(isLiked == null){ const like = await Like.create({ user: user, @@ -95,25 +100,27 @@ router.post('/like/:commentId/:userId',auth, async (req, res) => { await like.save(); comment.likes.push(like); await comment.save(); - const commenttrue = await Comment.findById(req.params.commentId).populate([ + const topicTrue = await Topic.findById(comment.topic).populate([ { path: 'likes'}, { path: 'user' }, - { path: 'toppic' }, + { path: 'comments' }, ]); - return res.send(commenttrue); + return res.send(topicTrue); } else{ - return res.send(comment); + return res.send(topic); } } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:commentId/:userId',auth, async (req, res) => { +router.post('/dislike/:commentId',auth, async (req, res) => { try { const comment = await Comment.findById(req.params.commentId); - const like = await Like.findOne({user:req.params.userId,comment:req.params.commentId}); + const topic = await Topic.findById(comment.topic); + const like = await Like.findOne({user:req.userId,comment:req.params.commentId}); + if(like != null){ const index = comment.likes.indexOf(like._id); if (index > -1) { comment.likes.splice(index, 1); @@ -122,7 +129,14 @@ router.post('/dislike/:commentId/:userId',auth, async (req, res) => { comment.save(); await Like.findByIdAndRemove(like._id).populate('user'); - return res.send(comment); + const topicTrue = await Topic.findById(comment.topic).populate([ + { path: 'likes'}, + { path: 'user' }, + { path: 'comments' }, + ]); + return res.send(topicTrue); + } + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 338ac38..c1b0c5d 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -120,7 +120,7 @@ router.post('/like/:topicId/:userId',auth, async (req, res) => { if(isLiked == null){ const like = await Like.create({ user: user, - topic: topic, + topic: topic }); await like.save(); topic.likes.push(like); @@ -130,9 +130,11 @@ router.post('/like/:topicId/:userId',auth, async (req, res) => { { path: 'user' }, { path: 'toppic' }, ]); + console.log(topictrue.likes.length) return res.send(topictrue); } else{ + console.log(topic.likes.length) return res.send(topic); } } catch (err) { @@ -148,6 +150,7 @@ router.post('/dislike/:topicId/:userId',auth, async (req, res) => { if (index > -1) { topic.likes.splice(index, 1); } + console.log(topic.likes.length) topic.save(); await Like.findByIdAndRemove(like._id).populate('user'); return res.send(topic); @@ -163,7 +166,7 @@ router.get('/find/:topicId', async (req, res) => { { path: 'plant' }, ]); - return res.send({ topic }); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while find topic id.${err}` }); } From 3bac912f13987b4f118519f4cf45e0bf4318bdc7 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 18:23:57 -0300 Subject: [PATCH 128/147] adding eslint on my pages Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/models/Comment.js | 10 +++-- src/models/Likes.js | 28 ++++++------ src/models/Topic.js | 10 +++-- src/routes/auth.js | 17 +++----- src/routes/commentRoutes.js | 85 +++++++++++++++++++------------------ src/routes/topicRoutes.js | 60 ++++++++++++++------------ 6 files changed, 107 insertions(+), 103 deletions(-) diff --git a/src/models/Comment.js b/src/models/Comment.js index f6afa51..4388c13 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -17,10 +17,12 @@ const CommentSchema = new mongoose.Schema({ ref: 'Topic', require: true, }, - likes: [{ - type: Schema.Types.ObjectId, - ref: 'Like', - }], + likes: [ + { + type: Schema.Types.ObjectId, + ref: 'Like', + }, + ], }); const Comment = mongoose.model('Comment', CommentSchema); diff --git a/src/models/Likes.js b/src/models/Likes.js index b8ed582..b1527f3 100644 --- a/src/models/Likes.js +++ b/src/models/Likes.js @@ -3,21 +3,19 @@ const mongoose = require('mongoose'); const { Schema } = mongoose; const likeSchema = new Schema({ - user: { - type: mongoose.Schema.Types.ObjectId, - ref: 'User', - require: true, - }, - topic: { - type: Schema.Types.ObjectId, - ref: 'Topic', - - }, - comment: { - type: Schema.Types.ObjectId, - ref: 'Comment', - - }, + user: { + type: mongoose.Schema.Types.ObjectId, + ref: 'User', + require: true, + }, + topic: { + type: Schema.Types.ObjectId, + ref: 'Topic', + }, + comment: { + type: Schema.Types.ObjectId, + ref: 'Comment', + }, }); const Like = mongoose.model('Like', likeSchema); diff --git a/src/models/Topic.js b/src/models/Topic.js index f8f541a..68daa6c 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -20,10 +20,12 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, - likes: [{ - type: Schema.Types.ObjectId, - ref: 'Like', - }], + likes: [ + { + type: Schema.Types.ObjectId, + ref: 'Like', + }, + ], comments: [ { type: Schema.Types.ObjectId, diff --git a/src/routes/auth.js b/src/routes/auth.js index 1017bf9..4d7e317 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - secret: 'd41d8cd98f00b204e9800998ecf8427e', + secret: process.env.SECRET, }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; @@ -24,18 +24,13 @@ function auth(req, res, next) { return res.status(401).send({ Error: 'Token malformated' }); } - - jwt.verify(token, authConfig.secret, function(err ,decoded){ try { - req.userId = decoded.id; - console.log(decoded.id) - next(); - } - catch (err) { + jwt.verify(token, authConfig.secret, (err, decoded) => { + req.userId = decoded.id; + }); + return next(); + } catch (err) { return res.status(400); } - }); - - } module.exports = { authConfig, auth }; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 2bd2ec0..dfe82f6 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,13 +1,13 @@ const express = require('express'); -const jwt = require('jsonwebtoken'); + const router = express.Router(); const User = require('../models/User'); const Like = require('../models/Likes'); const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); -const { auth, authConfig } = require('./auth'); +const { auth } = require('./auth'); -router.post('/create/:topicId/:userId',auth, async (req, res) => { +router.post('/create/:topicId/:userId', auth, async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); @@ -78,65 +78,68 @@ router.delete('/delete/:commentId', async (req, res) => { } }); -router.post('/like/:commentId',auth, async (req, res) => { +router.post('/like/:commentId', auth, async (req, res) => { try { const user = await User.findById(req.userId); const comment = await Comment.findById(req.params.commentId).populate([ - { path: 'likes'}, + { path: 'likes' }, { path: 'user' }, { path: 'toppic' }, ]); const topic = await Topic.findById(comment.topic).populate([ - { path: 'likes'}, + { path: 'likes' }, { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.userId,comment:req.params.commentId}) - if(isLiked == null){ - const like = await Like.create({ - user: user, - comment: comment, + const isLiked = await Like.findOne({ + user: req.userId, + comment: req.params.commentId, }); - await like.save(); - comment.likes.push(like); - await comment.save(); - const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'comments' }, - ]); - return res.send(topicTrue); - } - else{ + if (isLiked == null) { + const like = await Like.create({ + user, + comment, + }); + await like.save(); + comment.likes.push(like); + await comment.save(); + const topicTrue = await Topic.findById(comment.topic).populate([ + { path: 'likes' }, + { path: 'user' }, + { path: 'comments' }, + ]); + return res.send(topicTrue); + } return res.send(topic); - } } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:commentId',auth, async (req, res) => { +router.post('/dislike/:commentId', auth, async (req, res) => { try { const comment = await Comment.findById(req.params.commentId); const topic = await Topic.findById(comment.topic); - const like = await Like.findOne({user:req.userId,comment:req.params.commentId}); - if(like != null){ - const index = comment.likes.indexOf(like._id); - if (index > -1) { - comment.likes.splice(index, 1); - } - - comment.save(); - - await Like.findByIdAndRemove(like._id).populate('user'); - const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'comments' }, - ]); - return res.send(topicTrue); + const like = await Like.findOne({ + user: req.userId, + comment: req.params.commentId, + }); + if (like != null) { + const index = comment.likes.indexOf(like._id); + if (index > -1) { + comment.likes.splice(index, 1); + } + + comment.save(); + await Like.findByIdAndRemove(like._id).populate('user'); + const topicTrue = await Topic.findById(comment.topic).populate([ + { path: 'likes' }, + { path: 'user' }, + { path: 'comments' }, + ]); + return res.send(topicTrue); } - return res.send(topic); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index c1b0c5d..09c205c 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -6,7 +6,8 @@ const Topic = require('../models/Topic'); const User = require('../models/User'); const Plant = require('../models/Plant'); const topicSchema = require('../schemas/topicSchema'); -const { auth, authConfig } = require('./auth'); +const { auth } = require('./auth'); + router.post('/create/:plantId/:userId', async (req, res) => { try { const user = await User.findById(req.params.userId); @@ -99,8 +100,9 @@ router.delete('/delete/:topicId', async (req, res) => { router.get('/list', async (req, res) => { try { const topic = await Topic.find().populate([ - { path: 'likes'}, - { path: 'comments' }, + { path: 'likes' }, + { path: 'comments', populate: { path: 'likes' } }, + { path: 'user' }, ]); return res.send({ topic }); } catch (err) { @@ -108,49 +110,51 @@ router.get('/list', async (req, res) => { } }); -router.post('/like/:topicId/:userId',auth, async (req, res) => { +router.post('/like/:topicId', auth, async (req, res) => { try { - const user = await User.findById(req.params.userId); + const user = await User.findById(req.userId); const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'likes'}, + { path: 'likes' }, { path: 'user' }, { path: 'toppic' }, ]); - const isLiked = await Like.findOne({user:req.params.userId,topic:req.params.topicId}) - if(isLiked == null){ - const like = await Like.create({ - user: user, - topic: topic + const isLiked = await Like.findOne({ + user: req.params.userId, + topic: req.params.topicId, }); - await like.save(); - topic.likes.push(like); - await topic.save(); - const topictrue = await Topic.findById(req.params.topicId).populate([ - { path: 'likes'}, - { path: 'user' }, - { path: 'toppic' }, - ]); - console.log(topictrue.likes.length) - return res.send(topictrue); - } - else{ - console.log(topic.likes.length) + if (isLiked == null) { + const like = await Like.create({ + user, + topic, + }); + await like.save(); + topic.likes.push(like); + await topic.save(); + const topictrue = await Topic.findById(req.params.topicId).populate([ + { path: 'likes' }, + { path: 'user' }, + { path: 'toppic' }, + ]); + return res.send(topictrue); + } + console.log(topic.likes.length); return res.send(topic); - } } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.post('/dislike/:topicId/:userId',auth, async (req, res) => { +router.post('/dislike/:topicId', auth, async (req, res) => { try { const topic = await Topic.findById(req.params.topicId); - const like = await Like.findOne({user:req.params.userId,topic:req.params.topicId}); + const like = await Like.findOne({ + user: req.userId, + topic: req.params.topicId, + }); const index = topic.likes.indexOf(like._id); if (index > -1) { topic.likes.splice(index, 1); } - console.log(topic.likes.length) topic.save(); await Like.findByIdAndRemove(like._id).populate('user'); return res.send(topic); From 2870fed891f13e038053a87dda21614004eeec5a Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Tue, 17 Nov 2020 15:26:09 -0300 Subject: [PATCH 129/147] Adding new likes request MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafael Makaha Co-authored-by: João Vítor Morandi --- src/routes/commentRoutes.js | 8 +++----- src/routes/topicRoutes.js | 28 +++++++++++++++------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index dfe82f6..7ef8af0 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -7,7 +7,7 @@ const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); const { auth } = require('./auth'); -router.post('/create/:topicId/:userId', auth, async (req, res) => { +router.post('/create/:topicId/:userId', async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); @@ -19,8 +19,7 @@ router.post('/create/:topicId/:userId', auth, async (req, res) => { }); const topic = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: { path: 'user' } }, - { path: 'user' }, - { path: 'plant' }, + { path: 'user' } ]); await comment.save(); @@ -29,8 +28,7 @@ router.post('/create/:topicId/:userId', auth, async (req, res) => { await topic.save(); const topicCorrect = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: { path: 'user' } }, - { path: 'user' }, - { path: 'plant' }, + { path: 'user' } ]); return res.send(topicCorrect); } catch (err) { diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 09c205c..6f066eb 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -25,7 +25,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { ...req.body, user: req.params.userId, plant: req.params.plantId, - }); + }) await topic.save(); @@ -57,10 +57,13 @@ router.put('/update/:topicId', async (req, res) => { .send({ error: `Error while creating topic. ${result.error}` }); } - await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { - useFindAndModify: false, - }); - return res.send({ message: 'Topic updated successfully.' }); + topicNew = await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { + useFindAndModify: true, + }).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' } + ]); + return res.send(topicNew); } catch (err) { return res.status(400).send({ error: `Error while updating topic.${err}` }); } @@ -88,10 +91,7 @@ router.delete('/delete/:topicId', async (req, res) => { await Topic.findByIdAndRemove(req.params.topicId, { useFindAndModify: false, }); - - return res.send({ - message: 'Topic successfully removed.', - }); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while deleting topic.${err}` }); } @@ -131,9 +131,8 @@ router.post('/like/:topicId', auth, async (req, res) => { topic.likes.push(like); await topic.save(); const topictrue = await Topic.findById(req.params.topicId).populate([ - { path: 'likes' }, - { path: 'user' }, - { path: 'toppic' }, + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' } ]); return res.send(topictrue); } @@ -156,7 +155,10 @@ router.post('/dislike/:topicId', auth, async (req, res) => { topic.likes.splice(index, 1); } topic.save(); - await Like.findByIdAndRemove(like._id).populate('user'); + await Like.findByIdAndRemove(like._id).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' } + ]); return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); From 1de0aeb59556e15825b45f64b376564760f7ade6 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 25 Nov 2020 03:37:50 -0300 Subject: [PATCH 130/147] resolved bug on like dislike --- src/routes/plantRoutes.js | 4 ++-- src/routes/topicRoutes.js | 34 +++++++++++++++++++++------------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 86b8c00..b89f456 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -18,7 +18,7 @@ router.post('/register', async (req, res) => { firstUser, collectionCount, extinction, - profilePicture, + profile_picture, gbifID, stateProvince, } = req.body; @@ -33,7 +33,7 @@ router.post('/register', async (req, res) => { firstUser, collectionCount, extinction, - profilePicture, + profile_picture, gbifID, stateProvince, }); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 6f066eb..d176efd 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -114,12 +114,12 @@ router.post('/like/:topicId', auth, async (req, res) => { try { const user = await User.findById(req.userId); const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'likes' }, + { path: 'comments', populate: { path: 'user' } }, { path: 'user' }, - { path: 'toppic' }, + { path: 'plant' }, ]); const isLiked = await Like.findOne({ - user: req.params.userId, + user: req.userId, topic: req.params.topicId, }); if (isLiked == null) { @@ -132,7 +132,8 @@ router.post('/like/:topicId', auth, async (req, res) => { await topic.save(); const topictrue = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } + { path: 'user' }, + { path: 'plant' }, ]); return res.send(topictrue); } @@ -145,20 +146,27 @@ router.post('/like/:topicId', auth, async (req, res) => { router.post('/dislike/:topicId', auth, async (req, res) => { try { - const topic = await Topic.findById(req.params.topicId); + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); const like = await Like.findOne({ user: req.userId, topic: req.params.topicId, }); - const index = topic.likes.indexOf(like._id); - if (index > -1) { - topic.likes.splice(index, 1); + if(like != null){ + const index = topic.likes.indexOf(like._id); + if (index > -1) { + topic.likes.splice(index, 1); + } + topic.save(); + await Like.findByIdAndRemove(like._id).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); } - topic.save(); - await Like.findByIdAndRemove(like._id).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } - ]); return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); From d8319d22a2bab66aab9f2ac33203cd8a2ca4df7e Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 25 Nov 2020 18:58:46 -0300 Subject: [PATCH 131/147] adding comment and topic correct response --- src/routes/commentRoutes.js | 69 +++++++++++++++++++------------------ src/routes/topicRoutes.js | 43 +++++++++++++---------- 2 files changed, 59 insertions(+), 53 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 7ef8af0..bb9c9f7 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -7,38 +7,32 @@ const Topic = require('../models/Topic'); const Comment = require('../models/Comment'); const { auth } = require('./auth'); -router.post('/create/:topicId/:userId', async (req, res) => { +router.post('/create/:topicId', auth, async (req, res) => { try { if (!req.body.text) return res.status(400).send({ error: 'Comment should not be empty' }); const comment = await Comment.create({ - ...req.body, - user: req.params.userId, + text: req.body.text, + user: req.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } - ]); + const topic = await Topic.findById(req.params.topicId); await comment.save(); - topic.comments.push(comment); await topic.save(); - const topicCorrect = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } - ]); + + const topicCorrect = await Topic.findById(req.params.topicId); return res.send(topicCorrect); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); -router.put('/update/:commentId', async (req, res) => { +router.put('/update/:commentId', auth, async (req, res) => { try { - await Comment.findById(req.params.commentId); + const comment = await Comment.findById(req.params.commentId); const newData = req.body; if (!newData.text) @@ -47,7 +41,12 @@ router.put('/update/:commentId', async (req, res) => { await Comment.findOneAndUpdate({ _id: req.params.commentId }, req.body, { useFindAndModify: false, }); - return res.send({ message: 'Comment updated successfully.' }); + const newTopic = await Topic.findById(comment.topic).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plant' }, + ]); + return res.send(newTopic); } catch (err) { return res .status(400) @@ -55,7 +54,7 @@ router.put('/update/:commentId', async (req, res) => { } }); -router.delete('/delete/:commentId', async (req, res) => { +router.delete('/delete/:commentId', auth, async (req, res) => { try { const topic = Topic.findById(req.body.topicId); const index = topic.comments.indexOf(req.params.commentId); @@ -66,11 +65,13 @@ router.delete('/delete/:commentId', async (req, res) => { topic.save(); - await Comment.findByIdAndRemove(req.params.commentId).populate('user'); - - return res.send({ - message: 'Comment successfully removed.', - }); + await Comment.findByIdAndRemove(req.params.commentId); + const newTopic = await Topic.findById(comment.topic).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plant' }, + ]); + return res.send(newTopic); } catch (err) { return res.status(400).send({ error: `Error while deleting topic.${err}` }); } @@ -79,15 +80,11 @@ router.delete('/delete/:commentId', async (req, res) => { router.post('/like/:commentId', auth, async (req, res) => { try { const user = await User.findById(req.userId); - const comment = await Comment.findById(req.params.commentId).populate([ - { path: 'likes' }, - { path: 'user' }, - { path: 'toppic' }, - ]); + const comment = await Comment.findById(req.params.commentId); const topic = await Topic.findById(comment.topic).populate([ - { path: 'likes' }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'toppic' }, + { path: 'plant' }, ]); const isLiked = await Like.findOne({ user: req.userId, @@ -102,9 +99,9 @@ router.post('/like/:commentId', auth, async (req, res) => { comment.likes.push(like); await comment.save(); const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes' }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'comments' }, + { path: 'plant' }, ]); return res.send(topicTrue); } @@ -117,7 +114,11 @@ router.post('/like/:commentId', auth, async (req, res) => { router.post('/dislike/:commentId', auth, async (req, res) => { try { const comment = await Comment.findById(req.params.commentId); - const topic = await Topic.findById(comment.topic); + const topic = await Topic.findById(comment.topic).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plant' }, + ]); const like = await Like.findOne({ user: req.userId, comment: req.params.commentId, @@ -129,11 +130,11 @@ router.post('/dislike/:commentId', auth, async (req, res) => { } comment.save(); - await Like.findByIdAndRemove(like._id).populate('user'); + await Like.findByIdAndRemove(like._id); const topicTrue = await Topic.findById(comment.topic).populate([ - { path: 'likes' }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'comments' }, + { path: 'plant' }, ]); return res.send(topicTrue); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index d176efd..6063ac2 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -25,7 +25,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { ...req.body, user: req.params.userId, plant: req.params.plantId, - }) + }); await topic.save(); @@ -57,11 +57,16 @@ router.put('/update/:topicId', async (req, res) => { .send({ error: `Error while creating topic. ${result.error}` }); } - topicNew = await Topic.findOneAndUpdate({ _id: req.params.topicId }, newData, { - useFindAndModify: true, - }).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } + const topicNew = await Topic.findOneAndUpdate( + { _id: req.params.topicId }, + newData, + { + useFindAndModify: true, + } + ).populate([ + { path: 'comments', populate: 'user' }, + { path: 'user' }, + { path: 'plnt' }, ]); return res.send(topicNew); } catch (err) { @@ -100,9 +105,9 @@ router.delete('/delete/:topicId', async (req, res) => { router.get('/list', async (req, res) => { try { const topic = await Topic.find().populate([ - { path: 'likes' }, - { path: 'comments', populate: { path: 'likes' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, + { path: 'plnt' }, ]); return res.send({ topic }); } catch (err) { @@ -114,9 +119,9 @@ router.post('/like/:topicId', auth, async (req, res) => { try { const user = await User.findById(req.userId); const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); const isLiked = await Like.findOne({ user: req.userId, @@ -131,9 +136,9 @@ router.post('/like/:topicId', auth, async (req, res) => { topic.likes.push(like); await topic.save(); const topictrue = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); return res.send(topictrue); } @@ -147,24 +152,24 @@ router.post('/like/:topicId', auth, async (req, res) => { router.post('/dislike/:topicId', auth, async (req, res) => { try { const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); const like = await Like.findOne({ user: req.userId, topic: req.params.topicId, }); - if(like != null){ + if (like != null) { const index = topic.likes.indexOf(like._id); if (index > -1) { topic.likes.splice(index, 1); } topic.save(); await Like.findByIdAndRemove(like._id).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); } return res.send(topic); @@ -175,9 +180,9 @@ router.post('/dislike/:topicId', auth, async (req, res) => { router.get('/find/:topicId', async (req, res) => { try { const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, + { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); return res.send(topic); From ddb4190ef92010658e5ee546d37e482f29502ebe Mon Sep 17 00:00:00 2001 From: Antonio Ruan Moura Barreto Date: Tue, 20 Oct 2020 19:19:32 -0300 Subject: [PATCH 132/147] Adding scanner plant rounter Co-authored-by: Marcos Felipe De Almeida Souza --- package-lock.json | 3928 ----------------------------------------- package.json | 160 +- src/index.js | 5 +- src/routes/scanner.js | 47 + 4 files changed, 209 insertions(+), 3931 deletions(-) delete mode 100644 package-lock.json create mode 100644 src/routes/scanner.js diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 266fd0e..0000000 --- a/package-lock.json +++ /dev/null @@ -1,3928 +0,0 @@ -{ - "name": "2020.1-gaiadex-backend", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0= sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ= sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } - } - }, - "@eslint/eslintrc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz", - "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "@hapi/hoek": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", - "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" - }, - "@hapi/topo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", - "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/address": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.0.tgz", - "integrity": "sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "axios": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.0.tgz", - "integrity": "sha512-fmkJBknJKoZwem3/IKSSLpkdNXZeBu5Q7GA/aRsr2btgrptmSCxi2oFjZHqGdK9DoTil9PIHlPIZw2EcRJXRvw==", - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "bson": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", - "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz", - "integrity": "sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==", - "dev": true - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "confusing-browser-globals": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz", - "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "dependencies": { - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "denque": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", - "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - } - } - }, - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz", - "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.19", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "eslint-config-airbnb-base": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz", - "integrity": "sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q==", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.9", - "object.assign": "^4.1.0", - "object.entries": "^1.1.2" - } - }, - "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", - "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==", - "dev": true, - "requires": { - "array-includes": "^3.1.1", - "array.prototype.flat": "^1.2.3", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.4", - "eslint-module-utils": "^2.6.0", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.1", - "read-pkg-up": "^2.0.0", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz", - "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==", - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", - "dev": true - }, - "espree": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", - "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - }, - "dependencies": { - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - } - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", - "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", - "dev": true, - "requires": { - "ini": "^1.3.5" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@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": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.0.tgz", - "integrity": "sha512-tTMeLCLqSBqnflBZnlVDhpaIMucSGaYyX6855jM4AguGeWCeSzNdb1mfyWduTZ3pe3SJVvVWGL0jO1iKZVPfTA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^3.2.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", - "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "requires": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - } - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, - "is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "joi": { - "version": "17.3.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.3.0.tgz", - "integrity": "sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "kareem": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", - "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "10.5.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.1.tgz", - "integrity": "sha512-fTkTGFtwFIJJzn/PbUO3RXyEBHIhbfYBE7+rJyLcOXabViaO/h6OslgeK6zpeUtzkDrzkgyAYDTLAwx6JzDTHw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "commander": "^6.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.2.0", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", - "listr2": "^3.2.2", - "log-symbols": "^4.0.0", - "micromatch": "^4.0.2", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - } - }, - "listr2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.2.2.tgz", - "integrity": "sha512-AajqcZEUikF2ioph6PfH3dIuxJclhr3i3kHgTOP0xeXdWQohrvJAAmqVcV43/GI987HFY/vzT73jYXoa4esDHg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "cli-truncate": "^2.1.0", - "figures": "^3.2.0", - "indent-string": "^4.0.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.3", - "through": "^2.3.8" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mongodb": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.2.tgz", - "integrity": "sha512-sSZOb04w3HcnrrXC82NEh/YGCmBuRgR+C1hZgmmv4L6dBz4BkRse6Y8/q/neXer9i95fKUBbFi4KgeceXmbsOA==", - "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "require_optional": "^1.0.1", - "safe-buffer": "^5.1.2", - "saslprep": "^1.0.0" - } - }, - "mongoose": { - "version": "5.10.11", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.10.11.tgz", - "integrity": "sha512-R5BFitKW94/S/Z48w+X+qi/eto66jWBcVEVA8nYVkBoBAPFGq7JSYP/0uso+ZHs+7XjSzTuui+SUllzxIrf9yA==", - "requires": { - "bson": "^1.1.4", - "kareem": "2.3.1", - "mongodb": "3.6.2", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.7.0", - "mquery": "3.2.2", - "ms": "2.1.2", - "regexp-clone": "1.0.0", - "safe-buffer": "5.2.1", - "sift": "7.0.1", - "sliced": "1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "mpath": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz", - "integrity": "sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg==" - }, - "mquery": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz", - "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==", - "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", - "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", - "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "nodemon": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz", - "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==", - "dev": true, - "requires": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.3", - "update-notifier": "^4.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettier": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", - "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "requires": { - "fast-diff": "^1.1.2" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regexp-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", - "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", - "dev": true - }, - "registry-auth-token": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", - "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "dev": true, - "requires": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "requires": { - "sparse-bitfield": "^3.0.3" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "sift": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", - "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } - } - }, - "sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" - }, - "sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "requires": { - "memory-pager": "^1.0.2" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", - "integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "string.prototype.trimstart": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", - "integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - }, - "term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } - }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "requires": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - } - } -} diff --git a/package.json b/package.json index bee26a5..b0b94b8 100644 --- a/package.json +++ b/package.json @@ -36,10 +36,166 @@ }, "homepage": "https://github.com/fga-eps-mds/2020.1-GaiaDex-backend#readme", "dependencies": { - "axios": "^0.21.0", + "abbrev": "^1.1.1", + "accepts": "^1.3.7", + "acorn": "^8.0.4", + "acorn-jsx": "^5.3.1", + "aggregate-error": "^3.1.0", + "ajv": "^6.12.6", + "ansi-align": "^3.0.0", + "ansi-colors": "^4.1.1", + "ansi-escapes": "^4.3.1", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.3.0", + "anymatch": "^3.1.1", + "argparse": "^2.0.1", + "aria-query": "^4.2.2", + "array-flatten": "^3.0.0", + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "array.prototype.flatmap": "^1.2.3", + "ast-types-flow": "^0.0.7", + "astral-regex": "^2.0.0", + "axe-core": "^4.0.2", + "axobject-query": "^2.2.0", + "balanced-match": "^1.0.0", + "basic-auth": "^2.0.1", + "binary-extensions": "^2.1.0", + "bl": "^4.0.3", + "bluebird": "^3.7.2", + "body-parser": "^1.19.0", + "boxen": "^4.2.0", + "brace-expansion": "^2.0.0", + "braces": "^3.0.2", + "bson": "^4.2.0", + "buffer-equal-constant-time": "^1.0.1", + "bytes": "^3.1.0", + "cacheable-request": "^7.0.1", + "callsites": "^3.1.0", + "camelcase": "^6.1.0", + "chalk": "^4.1.0", + "chardet": "^1.3.0", + "chokidar": "^3.4.3", + "ci-info": "^2.0.0", + "clean-stack": "^3.0.0", + "cli-boxes": "^2.2.1", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "cli-width": "^3.0.0", + "clone-response": "^1.0.2", + "color-convert": "^2.0.1", + "color-name": "^1.1.4", + "commander": "^6.1.0", + "compare-versions": "^3.6.0", + "concat-map": "^0.0.1", + "configstore": "^5.0.1", + "confusing-browser-globals": "^1.0.9", + "contains-path": "^1.0.0", + "content-disposition": "^0.5.3", + "content-type": "^1.0.4", + "cookie": "^0.4.1", + "cookie-signature": "^1.1.0", + "core-js-pure": "^3.6.5", + "cosmiconfig": "^7.0.0", + "core-util-is": "^1.0.2", + "cross-spawn": "^7.0.3", + "crypto-random-string": "^3.3.0", + "damerau-levenshtein": "^1.0.6", + "debug": "^4.2.0", + "decompress-response": "^6.0.0", + "dedent": "^0.7.0", + "deep-extend": "^0.6.0", + "deep-is": "^0.1.3", + "defer-to-connect": "^2.0.0", + "define-properties": "^1.1.3", + "denque": "^1.4.1", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "doctrine": "^3.0.0", + "dot-prop": "^6.0.0", + "axios": "^0.20.0", "dotenv": "^8.2.0", "express": "^4.17.1", - "joi": "^17.3.0", + "external-editor": "^3.1.0", + "fast-deep-equal": "^3.1.3", + "fast-json-stable-stringify": "^2.1.0", + "fast-levenshtein": "^3.0.0", + "figures": "^3.2.0", + "file-entry-cache": "^5.0.1", + "fill-range": "^7.0.1", + "finalhandler": "^1.1.2", + "find-up": "^5.0.0", + "find-versions": "^3.2.0", + "flat-cache": "^2.0.1", + "flatted": "^3.1.0", + "forwarded": "^0.1.2", + "fresh": "^0.5.2", + "fs.realpath": "^1.0.0", + "function-bind": "^1.1.1", + "functional-red-black-tree": "^1.0.1", + "get-own-enumerable-property-symbols": "^3.0.2", + "get-stream": "^6.0.0", + "glob": "^7.1.6", + "glob-parent": "^5.1.1", + "global-dirs": "^2.0.1", + "globals": "^13.2.0", + "got": "^11.7.0", + "graceful-fs": "^4.2.4", + "has": "^1.0.3", + "has-flag": "^4.0.0", + "has-yarn": "^2.1.0", + "has-symbols": "^1.0.1", + "hosted-git-info": "^3.0.7", + "http-cache-semantics": "^4.1.0", + "http-errors": "^1.8.0", + "human-signals": "^2.1.0", + "iconv-lite": "^0.6.2", + "ignore": "^5.1.8", + "ignore-by-default": "^2.0.0", + "import-fresh": "^3.2.1", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "indent-string": "^4.0.0", + "inflight": "^1.0.6", + "inherits": "^2.0.4", + "ini": "^1.3.5", + "inquirer": "^7.3.3", + "internal-slot": "^1.0.2", + "ipaddr.js": "^2.0.0", + "is-arrayish": "^0.3.2", + "is-binary-path": "^2.1.0", + "is-callable": "^1.2.2", + "is-ci": "^2.0.0", + "is-core-module": "^2.0.0", + "is-date-object": "^1.0.2", + "is-extglob": "^2.1.1", + "is-fullwidth-code-point": "^3.0.0", + "is-glob": "^4.0.1", + "is-installed-globally": "^0.3.2", + "is-negative-zero": "^2.0.0", + "is-npm": "^5.0.0", + "is-number": "^7.0.0", + "is-obj": "^2.0.0", + "is-path-inside": "^3.0.2", + "is-regex": "^1.1.1", + "is-regexp": "^2.1.0", + "is-stream": "^2.0.0", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3", + "is-typedarray": "^1.0.0", + "is-yarn-global": "^0.3.0", + "isarray": "^2.0.5", + "isexe": "^2.0.0", + "form-data": "^3.0.0", + "joi": "^17.2.1", + "js-tokens": "^6.0.0", + "js-yaml": "^3.14.0", + "jsesc": "^3.0.1", + "json-buffer": "^3.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-schema-traverse": "^0.5.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "json5": "^2.1.3", "jsonwebtoken": "^8.5.1", "mongoose": "^5.10.11", "morgan": "^1.10.0" diff --git a/src/index.js b/src/index.js index c3d2e13..a3fa336 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,7 @@ const commentRoutes = require('./routes/commentRoutes'); const myPlantRoutes = require('./routes/myPlantRoutes'); const favoriteRoutes = require('./routes/favoriteRoutes'); const collectionRoutes = require('./routes/collectionRoutes'); +const scanner = require('./routes/scanner') // MongoDB connection // mongodb://localhost:27017/noderest => meu banco de dados local polupado @@ -24,6 +25,7 @@ mongoose .catch((err) => console.log(err)); // middlewares +app.use(express.json({ limit: 20*1024*1024})); app.use(morgan('dev')); app.use(express.urlencoded({ extended: false })); app.use(express.json()); @@ -37,9 +39,10 @@ app.use('/comment', commentRoutes); app.use('/myplants', myPlantRoutes); app.use('/favorites', favoriteRoutes); app.use('/collection', collectionRoutes); +app.use('/scanner', scanner); // starting the server -app.set('port', process.env.PORT || 3000); +app.set('port', process.env.PORT || 2000); app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); }); diff --git a/src/routes/scanner.js b/src/routes/scanner.js new file mode 100644 index 0000000..d855945 --- /dev/null +++ b/src/routes/scanner.js @@ -0,0 +1,47 @@ +const express = require('express'); +const router = express.Router(); +const fs = require('fs'); // File System | Node.js +const axios = require('axios'); // HTTP client +const FormData = require('form-data'); // Readable "multipart/form-data" streams +const path = require('path'); +require('dotenv').config(); + +function openFileReadStream(filePath) { + return new Promise((resolve,reject)=>{ + const readStream = fs.createReadStream(filePath); + readStream.on('open', () => resolve(readStream)); + readStream.on('error', (err) => reject(err)); + }); +} + +router.post('/',async(req,res,next) => { + try{ + const apiKey = process.env.PLANT_NET_API_KEY; // api key do plant net + const {data,filename,mime,plantType} = req.body; + const requireFields = {data,filename,mime,plantType}; + const erros = []; + Object.entries(requireFields).forEach( ([key,value]) => { + if(!value) erros.push(`${key} is required`); + }); + if (erros.length) throw erros; + const fileFormat = mime.split("/").pop(); + const filePath = path.join(__dirname, '..', `${filename}.${fileFormat}`); + + fs.writeFileSync(filePath, data, {encoding: 'base64'}); + + const form = new FormData(); + form.append('organs', plantType); + const stream = await openFileReadStream(filePath); + form.append('images', stream); + + const response = await axios.post(`https://my-api.plantnet.org/v2/identify/all?api-key=${apiKey}`,form, {headers: form.getHeaders()}); + fs.unlinkSync(filePath); + + res.send(response.data); + }catch(err){ + if(Array.isArray(err)) res.status(400).send({errors : err}); + next(err); + } +}); + +module.exports = router; \ No newline at end of file From 38ebda2af96b60a31768b2f433c87c533eb57633 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Thu, 29 Oct 2020 23:25:14 -0300 Subject: [PATCH 133/147] adding topic search by id and change the response to like qnt Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/routes/scanner.js | 2 +- src/routes/topicRoutes.js | 51 ++++++++++++++++++++++----------------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/routes/scanner.js b/src/routes/scanner.js index d855945..a8deaf5 100644 --- a/src/routes/scanner.js +++ b/src/routes/scanner.js @@ -37,7 +37,7 @@ router.post('/',async(req,res,next) => { const response = await axios.post(`https://my-api.plantnet.org/v2/identify/all?api-key=${apiKey}`,form, {headers: form.getHeaders()}); fs.unlinkSync(filePath); - res.send(response.data); + res.send(response.data.results); }catch(err){ if(Array.isArray(err)) res.status(400).send({errors : err}); next(err); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index d03c9c6..812237f 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -106,32 +106,39 @@ router.get('/list', async (req, res) => { } }); +router.get('/find/:topicId', async (req, res) => { + try { + + const topic = await Topic.findById(req.params.topicId).populate(['user']); + + return res.send({ topic }); + + } catch (err) { + return res.status(400).send({ error: 'Error while listing topics.' + err }); + } +}); + router.post('/like/:topicId', async (req, res) => { - try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { likes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Liked!' }); - } catch (err) { - return res.status(400).send({ error: `Error while liking topic.${err}` }); - } + try { + + const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + res.send(topic) + + } catch (err) { + return res.status(400).send({ error: 'Error while liking topic.' + err }); + } }); router.post('/dislike/:topicId', async (req, res) => { - try { - await Topic.findOneAndUpdate( - { _id: req.params.topicId }, - { $inc: { dislikes: 1 } }, - { useFindAndModify: false } - ); - return res.send({ message: 'Disliked!' }); - } catch (err) { - return res - .status(400) - .send({ error: `Error while dislikinng topic.${err}` }); - } + try { + + const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + res.send(topic) + + + } catch (err) { + return res.status(400).send({ error: 'Error while dislikinng topic.' + err }); + } }); module.exports = router; From a4cb6ba76182eefd97d3fb39c7b08989092d198f Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Thu, 29 Oct 2020 23:31:38 -0300 Subject: [PATCH 134/147] change port to 3000 at index.js --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index a3fa336..e054cb3 100644 --- a/src/index.js +++ b/src/index.js @@ -42,7 +42,7 @@ app.use('/collection', collectionRoutes); app.use('/scanner', scanner); // starting the server -app.set('port', process.env.PORT || 2000); +app.set('port', process.env.PORT || 3000); app.listen(app.get('port'), () => { console.log(`Server on port ${app.get('port')}`); }); From b4c6f3af243ebfef6d45c9be85e5d8bb61656b7d Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Tue, 3 Nov 2020 15:25:04 -0300 Subject: [PATCH 135/147] adding some changes to err treatment Co-authored-by: Antonio Ruan Co-authored-by: Rafael Makaha --- src/index.js | 1 - src/routes/plantRoutes.js | 49 ++++++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/index.js b/src/index.js index e054cb3..4d61e5f 100644 --- a/src/index.js +++ b/src/index.js @@ -23,7 +23,6 @@ mongoose }) .then(() => console.log('MongoDB Connected')) .catch((err) => console.log(err)); - // middlewares app.use(express.json({ limit: 20*1024*1024})); app.use(morgan('dev')); diff --git a/src/routes/plantRoutes.js b/src/routes/plantRoutes.js index 86b8c00..da8688e 100644 --- a/src/routes/plantRoutes.js +++ b/src/routes/plantRoutes.js @@ -48,20 +48,26 @@ router.post('/register', async (req, res) => { await plant.save(); - return res.send({ plant }); - } catch (err) { - return res.send(err); - } + return res.send({ plant }); + }catch (err){ + if (err.code == 11000){ + const {scientificName} = req.body; + const plant = await Plant.find({'scientificName':scientificName}).populate('topics'); + return res.send({plant}); + }else{ + return res.send(err); + } + + } }); -// Listagem de Todas as plantas -router.get('/', async (req, res) => { - try { - const plants = await Plant.find().populate('topics'); - - return res.send({ plants }); - } catch (err) { - return res.status(400).send({ error: 'Loading plants failed' }); - } +//Listagem de Todas as plantas +router.get('/', async (req , res) => { + try{ + const plants = await Plant.find().populate('topics'); + return res.send({ plants }); + }catch (err){ + return res.status(400).send({ error: 'Loading plants failed'}); + } }); // Procurando planta por id router.get('/:plantId', async (req, res) => { @@ -75,15 +81,16 @@ router.get('/:plantId', async (req, res) => { .send({ error: 'error when searching for this plant ' }); } }); -// Deletando planta por id -router.delete('/:plantId', async (req, res) => { - try { - const deleted = await Plant.findByIdAndRemove(req.params.plantId); - return res.send(deleted); - } catch (err) { - return res.status(400).send({ error: 'Error when Delete this plant' }); - } +//Detando planta por id +router.delete('/:plantId', async (req , res) => { + try{ + const deleted = await Plant.findByIdAndRemove(req.params.plantId); + + return res.send(deleted); + }catch (err){ + return res.status(400).send({ error: 'Error when Delete this plant'}); + } }); // Dando upgrade planta por id router.put('/:plantId', async (req, res) => { From 397e8f208884fa5894f643a7e39c949328b3278e Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Tue, 3 Nov 2020 17:06:02 -0300 Subject: [PATCH 136/147] rebase Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/models/Plant.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/models/Plant.js b/src/models/Plant.js index 21d4eed..c86c9b2 100644 --- a/src/models/Plant.js +++ b/src/models/Plant.js @@ -16,7 +16,6 @@ const PlantSchema = new mongoose.Schema({ }, specieName: { type: String, - require: true, }, commonName: { type: String, @@ -24,23 +23,23 @@ const PlantSchema = new mongoose.Schema({ }, usage: { type: String, - require: true, + }, firstUser: { type: String, - require: true, + }, collectionCount: { type: Number, - require: true, + }, extinction: { type: Boolean, - require: true, + }, profilePicture: { type: String, - require: true, + }, gbifID: { type: Number, @@ -48,7 +47,7 @@ const PlantSchema = new mongoose.Schema({ }, stateProvince: { type: String, - require: true, + }, topics: [ { From 4be49ce4408732ce5ff580f6f18f1e68197ecc72 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Fri, 6 Nov 2020 15:19:40 -0300 Subject: [PATCH 137/147] change the response of routes to be a topic, to upgrade the refresh page Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/routes/commentRoutes.js | 4 ++-- src/routes/scanner.js | 15 +++++++++------ src/routes/topicRoutes.js | 6 ++++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index b670585..26689b6 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -15,14 +15,14 @@ router.post('/create/:topicId/:userId', async (req, res) => { user: req.params.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId); + const topic = await Topic.findById(req.params.topicId).populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]);; await comment.save(); topic.comments.push(comment); await topic.save(); - return res.send({ message: 'Comment successfully registered.' }); + return res.send(topic); } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/scanner.js b/src/routes/scanner.js index a8deaf5..3ce16b8 100644 --- a/src/routes/scanner.js +++ b/src/routes/scanner.js @@ -26,18 +26,21 @@ router.post('/',async(req,res,next) => { if (erros.length) throw erros; const fileFormat = mime.split("/").pop(); const filePath = path.join(__dirname, '..', `${filename}.${fileFormat}`); - fs.writeFileSync(filePath, data, {encoding: 'base64'}); - const form = new FormData(); form.append('organs', plantType); const stream = await openFileReadStream(filePath); - form.append('images', stream); - const response = await axios.post(`https://my-api.plantnet.org/v2/identify/all?api-key=${apiKey}`,form, {headers: form.getHeaders()}); + form.append('images', stream); + + const response = await axios.post( + `https://my-api.plantnet.org/v2/identify/all?api-key=${apiKey}`, + form, { + headers: form.getHeaders() + } + ); fs.unlinkSync(filePath); - - res.send(response.data.results); + res.send(response.data); }catch(err){ if(Array.isArray(err)) res.status(400).send({errors : err}); next(err); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 812237f..95bd6e6 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -109,8 +109,8 @@ router.get('/list', async (req, res) => { router.get('/find/:topicId', async (req, res) => { try { - const topic = await Topic.findById(req.params.topicId).populate(['user']); - + const topic = await Topic.findById(req.params.topicId) + .populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]); return res.send({ topic }); } catch (err) { @@ -122,6 +122,7 @@ router.post('/like/:topicId', async (req, res) => { try { const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { likes: 1 }}, { useFindAndModify: false}) + .populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]); res.send(topic) } catch (err) { @@ -133,6 +134,7 @@ router.post('/dislike/:topicId', async (req, res) => { try { const topic = await Topic.findOneAndUpdate({_id: req.params.topicId}, { $inc: { dislikes: 1 }}, { useFindAndModify: false}) + .populate([{path:'comments',populate:{path:'user'}},{path:'user'},{path:'plant'}]); res.send(topic) From 9ddd130820e662ca3a8ab493c4863a1c751e6d00 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Fri, 6 Nov 2020 15:19:40 -0300 Subject: [PATCH 138/147] change the response of routes to be a topic, to upgrade the refresh page Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/routes/scanner.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/scanner.js b/src/routes/scanner.js index 3ce16b8..b6572dd 100644 --- a/src/routes/scanner.js +++ b/src/routes/scanner.js @@ -40,6 +40,7 @@ router.post('/',async(req,res,next) => { } ); fs.unlinkSync(filePath); + res.send(response.data); }catch(err){ if(Array.isArray(err)) res.status(400).send({errors : err}); From 7fd373b888ed1f5a1b33b687dfc7d15ecf4b2d02 Mon Sep 17 00:00:00 2001 From: Antonio Ruan Moura Barreto Date: Tue, 10 Nov 2020 19:22:24 -0300 Subject: [PATCH 139/147] Modified response of Comment create, and add topic find by id router Co-authored-by: Marcos Filipe --- src/routes/commentRoutes.js | 6 +++++- src/routes/topicRoutes.js | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index bb9c9f7..a0be99f 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -17,7 +17,11 @@ router.post('/create/:topicId', auth, async (req, res) => { user: req.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId); + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); await comment.save(); topic.comments.push(comment); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 6063ac2..0a34b0d 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -191,4 +191,18 @@ router.get('/find/:topicId', async (req, res) => { } }); +router.get('/find/:topicId', async (req, res) => { + try { + const topic = await Topic.findById(req.params.topicId).populate([ + { path: 'comments', populate: { path: 'user' } }, + { path: 'user' }, + { path: 'plant' }, + ]); + + return res.send({ topic }); + } catch (err) { + return res.status(400).send({ error: `Error while find topic id.${err}` }); + } +}); + module.exports = router; From 0653cc7bee5697dbec93744e1f41b1ed234b91c0 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 00:14:44 -0300 Subject: [PATCH 140/147] Adding Likes's model and commentLike route and this route check if the user liked the post previously --- src/models/Comment.js | 10 ++++------ src/models/Topic.js | 10 ++++------ src/routes/auth.js | 2 +- src/routes/commentRoutes.js | 1 - 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/models/Comment.js b/src/models/Comment.js index 4388c13..f6afa51 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -17,12 +17,10 @@ const CommentSchema = new mongoose.Schema({ ref: 'Topic', require: true, }, - likes: [ - { - type: Schema.Types.ObjectId, - ref: 'Like', - }, - ], + likes: [{ + type: Schema.Types.ObjectId, + ref: 'Like', + }], }); const Comment = mongoose.model('Comment', CommentSchema); diff --git a/src/models/Topic.js b/src/models/Topic.js index 68daa6c..f8f541a 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -20,12 +20,10 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, - likes: [ - { - type: Schema.Types.ObjectId, - ref: 'Like', - }, - ], + likes: [{ + type: Schema.Types.ObjectId, + ref: 'Like', + }], comments: [ { type: Schema.Types.ObjectId, diff --git a/src/routes/auth.js b/src/routes/auth.js index 4d7e317..d11a148 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - secret: process.env.SECRET, + secret: 'd41d8cd98f00b204e9800998ecf8427e', }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index a0be99f..fcbb63d 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -147,5 +147,4 @@ router.post('/dislike/:commentId', auth, async (req, res) => { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); - module.exports = router; From 6b761e53145bb06d61b473faa87130ec00aa9dad Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 13:43:16 -0300 Subject: [PATCH 141/147] Adding dislike toppic and comment routes Co-authored-by: Antonio Ruan --- src/routes/commentRoutes.js | 1 + src/routes/topicRoutes.js | 13 ------------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index fcbb63d..a0be99f 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -147,4 +147,5 @@ router.post('/dislike/:commentId', auth, async (req, res) => { return res.status(400).send({ error: `Error while commenting.${err}` }); } }); + module.exports = router; diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 0a34b0d..c1ec06e 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -191,18 +191,5 @@ router.get('/find/:topicId', async (req, res) => { } }); -router.get('/find/:topicId', async (req, res) => { - try { - const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' }, - { path: 'plant' }, - ]); - - return res.send({ topic }); - } catch (err) { - return res.status(400).send({ error: `Error while find topic id.${err}` }); - } -}); module.exports = router; From 0287882c7f540047dab76953e1e27e39bfecda8b Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 16:21:19 -0300 Subject: [PATCH 142/147] userId now came from authtoken, not url more Co-authored-by: Antonio Ruan --- src/routes/auth.js | 5 +++++ src/routes/commentRoutes.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/routes/auth.js b/src/routes/auth.js index d11a148..88dd0f9 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -24,6 +24,8 @@ function auth(req, res, next) { return res.status(401).send({ Error: 'Token malformated' }); } + + jwt.verify(token, authConfig.secret, function(err ,decoded){ try { jwt.verify(token, authConfig.secret, (err, decoded) => { req.userId = decoded.id; @@ -32,5 +34,8 @@ function auth(req, res, next) { } catch (err) { return res.status(400); } + }); + + } module.exports = { authConfig, auth }; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index a0be99f..65f7bba 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,5 +1,5 @@ const express = require('express'); - +const jwt = require('jsonwebtoken'); const router = express.Router(); const User = require('../models/User'); const Like = require('../models/Likes'); From eb6cc0d96f15f238daf4903c5922de9f3d1976ec Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 11 Nov 2020 18:23:57 -0300 Subject: [PATCH 143/147] adding eslint on my pages Co-authored-by: Rafael Makaha Co-authored-by: Antonio Ruan --- src/models/Comment.js | 10 ++++++---- src/models/Topic.js | 10 ++++++---- src/routes/auth.js | 7 +------ src/routes/commentRoutes.js | 2 +- src/routes/topicRoutes.js | 10 +++++----- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/models/Comment.js b/src/models/Comment.js index f6afa51..4388c13 100644 --- a/src/models/Comment.js +++ b/src/models/Comment.js @@ -17,10 +17,12 @@ const CommentSchema = new mongoose.Schema({ ref: 'Topic', require: true, }, - likes: [{ - type: Schema.Types.ObjectId, - ref: 'Like', - }], + likes: [ + { + type: Schema.Types.ObjectId, + ref: 'Like', + }, + ], }); const Comment = mongoose.model('Comment', CommentSchema); diff --git a/src/models/Topic.js b/src/models/Topic.js index f8f541a..68daa6c 100644 --- a/src/models/Topic.js +++ b/src/models/Topic.js @@ -20,10 +20,12 @@ const topicSchema = new Schema({ ref: 'User', require: true, }, - likes: [{ - type: Schema.Types.ObjectId, - ref: 'Like', - }], + likes: [ + { + type: Schema.Types.ObjectId, + ref: 'Like', + }, + ], comments: [ { type: Schema.Types.ObjectId, diff --git a/src/routes/auth.js b/src/routes/auth.js index 88dd0f9..4d7e317 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -3,7 +3,7 @@ require('dotenv').config(); const jwt = require('jsonwebtoken'); const authConfig = { - secret: 'd41d8cd98f00b204e9800998ecf8427e', + secret: process.env.SECRET, }; function auth(req, res, next) { const sessiontoken = req.headers.authtoken; @@ -24,8 +24,6 @@ function auth(req, res, next) { return res.status(401).send({ Error: 'Token malformated' }); } - - jwt.verify(token, authConfig.secret, function(err ,decoded){ try { jwt.verify(token, authConfig.secret, (err, decoded) => { req.userId = decoded.id; @@ -34,8 +32,5 @@ function auth(req, res, next) { } catch (err) { return res.status(400); } - }); - - } module.exports = { authConfig, auth }; diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 65f7bba..a0be99f 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -1,5 +1,5 @@ const express = require('express'); -const jwt = require('jsonwebtoken'); + const router = express.Router(); const User = require('../models/User'); const Like = require('../models/Likes'); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index c1ec06e..4d64586 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -107,7 +107,7 @@ router.get('/list', async (req, res) => { const topic = await Topic.find().populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plnt' }, + { path: 'plant' }, ]); return res.send({ topic }); } catch (err) { @@ -121,7 +121,7 @@ router.post('/like/:topicId', auth, async (req, res) => { const topic = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plnt' }, + { path: 'plant' }, ]); const isLiked = await Like.findOne({ user: req.userId, @@ -138,7 +138,7 @@ router.post('/like/:topicId', auth, async (req, res) => { const topictrue = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plnt' }, + { path: 'plant' }, ]); return res.send(topictrue); } @@ -154,7 +154,7 @@ router.post('/dislike/:topicId', auth, async (req, res) => { const topic = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plnt' }, + { path: 'plant' }, ]); const like = await Like.findOne({ user: req.userId, @@ -169,7 +169,7 @@ router.post('/dislike/:topicId', auth, async (req, res) => { await Like.findByIdAndRemove(like._id).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plnt' }, + { path: 'plant' }, ]); } return res.send(topic); From d8efa867a0c3e85a8872b96ea509f072df5131e4 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Tue, 17 Nov 2020 15:26:09 -0300 Subject: [PATCH 144/147] Adding new likes request MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Rafael Makaha Co-authored-by: João Vítor Morandi --- src/routes/commentRoutes.js | 3 +-- src/routes/topicRoutes.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index a0be99f..10eafa8 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -19,8 +19,7 @@ router.post('/create/:topicId', auth, async (req, res) => { }); const topic = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: { path: 'user' } }, - { path: 'user' }, - { path: 'plant' }, + { path: 'user' } ]); await comment.save(); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 4d64586..44bd514 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -25,7 +25,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { ...req.body, user: req.params.userId, plant: req.params.plantId, - }); + }) await topic.save(); From 0e04c62202f4dca2ca0dc139957d16dae5bb89e1 Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 25 Nov 2020 18:58:46 -0300 Subject: [PATCH 145/147] adding comment and topic correct response --- src/routes/commentRoutes.js | 5 +---- src/routes/topicRoutes.js | 10 +++++----- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 10eafa8..bb9c9f7 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -17,10 +17,7 @@ router.post('/create/:topicId', auth, async (req, res) => { user: req.userId, topic: req.params.topicId, }); - const topic = await Topic.findById(req.params.topicId).populate([ - { path: 'comments', populate: { path: 'user' } }, - { path: 'user' } - ]); + const topic = await Topic.findById(req.params.topicId); await comment.save(); topic.comments.push(comment); diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 44bd514..42e8feb 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -25,7 +25,7 @@ router.post('/create/:plantId/:userId', async (req, res) => { ...req.body, user: req.params.userId, plant: req.params.plantId, - }) + }); await topic.save(); @@ -121,7 +121,7 @@ router.post('/like/:topicId', auth, async (req, res) => { const topic = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); const isLiked = await Like.findOne({ user: req.userId, @@ -138,7 +138,7 @@ router.post('/like/:topicId', auth, async (req, res) => { const topictrue = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); return res.send(topictrue); } @@ -154,7 +154,7 @@ router.post('/dislike/:topicId', auth, async (req, res) => { const topic = await Topic.findById(req.params.topicId).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); const like = await Like.findOne({ user: req.userId, @@ -169,7 +169,7 @@ router.post('/dislike/:topicId', auth, async (req, res) => { await Like.findByIdAndRemove(like._id).populate([ { path: 'comments', populate: 'user' }, { path: 'user' }, - { path: 'plant' }, + { path: 'plnt' }, ]); } return res.send(topic); From 5cdc2170e9a43b880de78d036a9c7d3d28291dcc Mon Sep 17 00:00:00 2001 From: Marcos Felipe Date: Wed, 2 Dec 2020 16:57:52 -0300 Subject: [PATCH 146/147] resolve eslint bugs --- src/routes/commentRoutes.js | 1 - src/routes/topicRoutes.js | 1 - 2 files changed, 2 deletions(-) diff --git a/src/routes/commentRoutes.js b/src/routes/commentRoutes.js index 7c24fe4..9bc7ea4 100644 --- a/src/routes/commentRoutes.js +++ b/src/routes/commentRoutes.js @@ -27,7 +27,6 @@ router.post('/create/:topicId', auth, async (req, res) => { topic.comments.push(comment); await topic.save(); return res.send(topic); - } catch (err) { return res.status(400).send({ error: `Error while commenting.${err}` }); } diff --git a/src/routes/topicRoutes.js b/src/routes/topicRoutes.js index 83b3d7f..fe81962 100644 --- a/src/routes/topicRoutes.js +++ b/src/routes/topicRoutes.js @@ -192,5 +192,4 @@ router.get('/find/:topicId', async (req, res) => { } }); - module.exports = router; From c5cadc122dd6226c3395d836e5129d89d34010eb Mon Sep 17 00:00:00 2001 From: Rafael Makaha Date: Wed, 2 Dec 2020 17:05:43 -0300 Subject: [PATCH 147/147] Update .dockerignore Signed-off-by: Rafael Makaha --- .dockerignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.dockerignore b/.dockerignore index 87dcaf7..edd83c0 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,5 +1,4 @@ node_modules npm-debug.log Dockerfile -.dockerignore -.env \ No newline at end of file +.dockerignore \ No newline at end of file