From 2b86f1e8985b1bfff2f6a4fe3f71403bb7efbe01 Mon Sep 17 00:00:00 2001 From: devon-wolf <33987744+devon-wolf@users.noreply.github.com> Date: Thu, 10 Jun 2021 15:15:04 -0700 Subject: [PATCH 01/30] Add all socket logic to date (#1) * Remove unused packages and files * Add logic from sandbox, add chat logic * Move user management logic to its own module --- .env-example | 1 - __tests__/app.test.js | 9 +-- data/setup.js | 6 -- lib/app.js | 3 - lib/middleware/error.js | 13 ---- lib/middleware/not-found.js | 5 -- lib/socket/user-utils.js | 24 +++++++ lib/utils/pool.js | 10 --- package-lock.json | 122 +++--------------------------------- package.json | 8 +-- server.js | 41 +++++++++--- setup-db.js | 4 -- sql/setup.sql | 0 13 files changed, 69 insertions(+), 177 deletions(-) delete mode 100644 .env-example delete mode 100644 data/setup.js delete mode 100644 lib/middleware/error.js delete mode 100644 lib/middleware/not-found.js create mode 100644 lib/socket/user-utils.js delete mode 100644 lib/utils/pool.js delete mode 100644 setup-db.js delete mode 100644 sql/setup.sql diff --git a/.env-example b/.env-example deleted file mode 100644 index 5f05b75..0000000 --- a/.env-example +++ /dev/null @@ -1 +0,0 @@ -DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres diff --git a/__tests__/app.test.js b/__tests__/app.test.js index a1f9f01..b5ff76f 100644 --- a/__tests__/app.test.js +++ b/__tests__/app.test.js @@ -1,10 +1,5 @@ -const pool = require('../lib/utils/pool'); -const setup = require('../data/setup'); -const request = require('supertest'); -const app = require('../lib/app'); - describe('GIM-server routes', () => { - beforeEach(() => { - return setup(pool); + it('is a test', () => { + expect(true).toEqual(true); }); }); diff --git a/data/setup.js b/data/setup.js deleted file mode 100644 index 12d3fe5..0000000 --- a/data/setup.js +++ /dev/null @@ -1,6 +0,0 @@ -const fs = require('fs').promises; - -module.exports = (pool) => { - return fs.readFile(`${__dirname}/../sql/setup.sql`, { encoding: 'utf-8' }) - .then(sql => pool.query(sql)); -}; diff --git a/lib/app.js b/lib/app.js index 91116d3..4d6b3b8 100644 --- a/lib/app.js +++ b/lib/app.js @@ -3,7 +3,4 @@ const app = express(); app.use(express.json()); -app.use(require('./middleware/not-found')); -app.use(require('./middleware/error')); - module.exports = app; diff --git a/lib/middleware/error.js b/lib/middleware/error.js deleted file mode 100644 index 231ae40..0000000 --- a/lib/middleware/error.js +++ /dev/null @@ -1,13 +0,0 @@ -// eslint-disable-next-line no-unused-vars -module.exports = (err, req, res, next) => { - let status = err.status || 500; - - res.status(status); - - console.log(err); - - res.send({ - status, - message: err.message - }); -}; diff --git a/lib/middleware/not-found.js b/lib/middleware/not-found.js deleted file mode 100644 index 390a9ff..0000000 --- a/lib/middleware/not-found.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = (req, res, next) => { - const err = new Error('Not Found'); - err.status = 404; - next(err); -}; diff --git a/lib/socket/user-utils.js b/lib/socket/user-utils.js new file mode 100644 index 0000000..fe61274 --- /dev/null +++ b/lib/socket/user-utils.js @@ -0,0 +1,24 @@ +const ROOM_THRESHOLD = 3; + +const users = {}; +let roomNumber = 0; +let unassignedUsers = 0; + +const addUser = socket => { + console.log(`new user in room ${roomNumber}: ${socket.id}`); + unassignedUsers += 1; + users[socket.id] = socket; + users[socket.id].room = String(roomNumber); + + if(unassignedUsers >= ROOM_THRESHOLD) { + roomNumber ++; + unassignedUsers = 0; + } +}; + +const deleteUser = socket => { + console.log('user left: ', socket.id); + delete users[socket.id]; +}; + +module.exports = { users, addUser, deleteUser }; diff --git a/lib/utils/pool.js b/lib/utils/pool.js deleted file mode 100644 index 8461d9b..0000000 --- a/lib/utils/pool.js +++ /dev/null @@ -1,10 +0,0 @@ -const { Pool } = require('pg'); - -const pool = new Pool({ - connectionString: process.env.DATABASE_URL, - ssl: process.env.PGSSLMODE && { rejectUnauthorized: false } -}); - -pool.on('connect', () => console.log('Postgres connected')); - -module.exports = pool; diff --git a/package-lock.json b/package-lock.json index eae2e67..e752a14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1042,17 +1042,6 @@ "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", "dev": true }, - "@types/pg": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.0.tgz", - "integrity": "sha512-3JXFrsl8COoqVB1+2Pqelx6soaiFVXzkT3fkuSNe7GB40ysfT0FHphZFPiqIXpMyTHSFRdLTyZzrFBrJRPAArA==", - "dev": true, - "requires": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, "@types/prettier": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", @@ -1504,11 +1493,6 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" - }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", @@ -2784,7 +2768,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.7", @@ -4691,11 +4676,6 @@ "semver": "^6.2.0" } }, - "packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4745,60 +4725,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "pg": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.6.0.tgz", - "integrity": "sha512-qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ==", - "requires": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "^2.5.0", - "pg-pool": "^3.3.0", - "pg-protocol": "^1.5.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" - } - }, - "pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" - }, - "pg-pool": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.3.0.tgz", - "integrity": "sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg==" - }, - "pg-protocol": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" - }, - "pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - } - }, - "pgpass": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", - "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", - "requires": { - "split2": "^3.1.1" - } - }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -4823,29 +4749,6 @@ "find-up": "^4.0.0" } }, - "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" - }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" - }, - "postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" - }, - "postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "requires": { - "xtend": "^4.0.0" - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4993,6 +4896,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -5263,14 +5167,6 @@ "source-map": "^0.6.0" } }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "requires": { - "readable-stream": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -5324,6 +5220,7 @@ "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==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" }, @@ -5331,7 +5228,8 @@ "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==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, @@ -5715,7 +5613,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "utils-merge": { "version": "1.0.1", @@ -5888,11 +5787,6 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index cc8aaad..914d3f3 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,7 @@ "test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose --runInBand --testLocationInResults --setupFiles dotenv/config", "test:watch": "npm run test -- --watch", "start": "node -r dotenv/config server.js", - "start:watch": "nodemon -r dotenv/config server.js", - "setup-db": "node -r dotenv/config setup-db.js", - "setup-heroku": "heroku run npm run setup-db" + "start:watch": "nodemon -r dotenv/config server.js" }, "jest": { "testEnvironment": "node" @@ -22,7 +20,6 @@ "@babel/eslint-parser": "^7.14.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@types/jest": "^26.0.23", - "@types/pg": "^8.6.0", "eslint": "^7.28.0", "jest": "^27.0.4", "nodemon": "^2.0.7", @@ -31,7 +28,6 @@ }, "dependencies": { "dotenv": "^10.0.0", - "express": "^4.17.1", - "pg": "^8.6.0" + "express": "^4.17.1" } } diff --git a/server.js b/server.js index 0760ce0..48da536 100644 --- a/server.js +++ b/server.js @@ -1,14 +1,39 @@ +const { Server } = require('socket.io'); +const http = require('http'); + const app = require('./lib/app'); -const pool = require('./lib/utils/pool'); +const server = http.createServer(app); +const io = new Server(server, { cors: true }); const PORT = process.env.PORT || 7890; -app.listen(PORT, () => { - // eslint-disable-next-line no-console - console.log(`Started on ${PORT}`); -}); +const { users, addUser, deleteUser } = require('./lib/socket/user-utils'); + +const onConnection = socket => { + addUser(socket); + socket.join(`${users[socket.id].room}`); + + socket.on('movement', data => { + data.id = socket.id; + socket.broadcast.to(`${users[socket.id]}.room`).emit('moving', data); + }); -process.on('exit', () => { - console.log('Goodbye!'); - pool.end(); + socket.on('disconnect', () => { + socket.broadcast.to(`${users[socket.id].room}`).emit('removeCursor', socket.id); + deleteUser(socket); + }); + + socket.on('click', buttonState => { + socket.broadcast.to(`${users[socket.id].room}`).emit('click', buttonState); + }); + + socket.on('client message', (message) => { + socket.to(`${users[socket.id].room}`).emit('socket message', message); + }); +}; + +io.sockets.on('connection', onConnection); + +server.listen(PORT, () => { + console.log(`Started on ${PORT}`); }); diff --git a/setup-db.js b/setup-db.js deleted file mode 100644 index 3e1687a..0000000 --- a/setup-db.js +++ /dev/null @@ -1,4 +0,0 @@ -const pool = require('./lib/utils/pool'); -const setup = require('./data/setup'); - -setup(pool); diff --git a/sql/setup.sql b/sql/setup.sql deleted file mode 100644 index e69de29..0000000 From 786ce75c0ea6f64473c42d7770c64997405f0b4e Mon Sep 17 00:00:00 2001 From: devon-wolf <33987744+devon-wolf@users.noreply.github.com> Date: Thu, 10 Jun 2021 16:55:45 -0700 Subject: [PATCH 02/30] Fix package.json issues, break down functions into smaller parts, add comments (#2) * Remove unused packages and files * Add logic from sandbox, add chat logic * Move user management logic to its own module * Initial re-copy of sandbox to fix cursor problems * Break out functions and add comments, make sure it still works. --- package-lock.json | 110 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 4 +- server.js | 39 ++++++++++------ 3 files changed, 130 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index e752a14..737caba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -993,6 +993,21 @@ "@babel/types": "^7.3.0" } }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -1039,6 +1054,7 @@ "@types/node": { "version": "15.12.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", "dev": true }, @@ -1363,6 +1379,16 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1673,8 +1699,7 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "concat-map": { "version": "0.0.1", @@ -1734,6 +1759,15 @@ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1789,7 +1823,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -1950,6 +1983,35 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", + "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + } + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -4464,8 +4526,7 @@ "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 + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "natural-compare": { "version": "1.4.0", @@ -4582,6 +4643,11 @@ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "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.10.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", @@ -5151,6 +5217,37 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "socket.io": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.2.tgz", + "integrity": "sha512-xK0SD1C7hFrh9+bYoYCdVt+ncixkSLKtNLCax5aEy1o3r5PaO5yQhVb97exIe67cE7lAK+EpyMytXWTWmyZY8w==", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~5.1.0", + "socket.io-adapter": "~2.3.0", + "socket.io-parser": "~4.0.3" + } + }, + "socket.io-adapter": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", + "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5766,8 +5863,7 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" }, "xdg-basedir": { "version": "4.0.0", diff --git a/package.json b/package.json index 914d3f3..7e49449 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "version": "1.0.0", "description": "", "main": "server.js", - "type": "module", "scripts": { "test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose --runInBand --testLocationInResults --setupFiles dotenv/config", "test:watch": "npm run test -- --watch", @@ -28,6 +27,7 @@ }, "dependencies": { "dotenv": "^10.0.0", - "express": "^4.17.1" + "express": "^4.17.1", + "socket.io": "^4.1.2" } } diff --git a/server.js b/server.js index 48da536..29e7b58 100644 --- a/server.js +++ b/server.js @@ -5,31 +5,42 @@ const app = require('./lib/app'); const server = http.createServer(app); const io = new Server(server, { cors: true }); -const PORT = process.env.PORT || 7890; +const PORT = process.env.PORT || 8080; const { users, addUser, deleteUser } = require('./lib/socket/user-utils'); const onConnection = socket => { + // on every connection, add a user a join that user's socket to the current room addUser(socket); socket.join(`${users[socket.id].room}`); - socket.on('movement', data => { - data.id = socket.id; - socket.broadcast.to(`${users[socket.id]}.room`).emit('moving', data); - }); + // take in cursor movement data and broadcast to other clients + const onMovement = movementData => { + movementData.id = socket.id; + socket.broadcast.to(`${users[socket.id].room}`).emit('moving', movementData); + }; - socket.on('disconnect', () => { - socket.broadcast.to(`${users[socket.id].room}`).emit('removeCursor', socket.id); - deleteUser(socket); - }); - - socket.on('click', buttonState => { + // take in button state data and broadcast to other clients + const onButtonClick = buttonState => { socket.broadcast.to(`${users[socket.id].room}`).emit('click', buttonState); - }); + }; - socket.on('client message', (message) => { + // take in message data and emit to all clients + const onMessage = message => { socket.to(`${users[socket.id].room}`).emit('socket message', message); - }); + }; + + // broadcast a remove cursor signal to other clients when a client disconnects, delete the user + const onDisconnect = () => { + socket.broadcast.to(`${users[socket.id].room}`).emit('removeCursor', socket.id); + deleteUser(socket); + }; + + // attach functions to listeners + socket.on('movement', onMovement); + socket.on('click', onButtonClick); + socket.on('client message', onMessage); + socket.on('disconnect', onDisconnect); }; io.sockets.on('connection', onConnection); From ccf526c19219351bdb2da23ca9aef7e277b645e5 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Fri, 11 Jun 2021 13:16:05 -0700 Subject: [PATCH 03/30] added socket listen and emit for search input and button click (#3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- package-lock.json | 7143 ++++++++++++++++++++++++++++++++++++++++++++- server.js | 10 +- 2 files changed, 7131 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 737caba..6fe640c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,7113 @@ { "name": "GIM-server", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^10.0.0", + "express": "^4.17.1", + "socket.io": "^4.1.2" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.14.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@types/jest": "^26.0.23", + "eslint": "^7.28.0", + "jest": "^27.0.4", + "nodemon": "^2.0.7", + "prettier": "^2.3.1", + "supertest": "^6.1.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz", + "integrity": "sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.4.tgz", + "integrity": "sha512-7CTckFLPBGEfCKqlrnJq2PIId3UmJ5hW+D4dsv/VvuA5DapgqyZFCttq+8oeRIJMZQizFIe5gel3xm2SbrqlYA==", + "dev": true, + "dependencies": { + "eslint-scope": "^5.1.0", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.14.2", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz", + "integrity": "sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.4", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.14.2" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.14.0", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz", + "integrity": "sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.4" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "node_modules/@babel/helpers": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/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, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz", + "integrity": "sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", + "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.14.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz", + "integrity": "sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", + "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.0.2", + "jest-util": "^27.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.4.tgz", + "integrity": "sha512-+dsmV8VUs1h/Szb+rEWk8xBM1fp1I///uFy9nk3wXGvRsF2lBp8EVPmtWc+QFRb3MY2b7u2HbkGF1fzoDzQTLA==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.2", + "@jest/reporters": "^27.0.4", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^27.0.2", + "jest-config": "^27.0.4", + "jest-haste-map": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.4", + "jest-resolve-dependencies": "^27.0.4", + "jest-runner": "^27.0.4", + "jest-runtime": "^27.0.4", + "jest-snapshot": "^27.0.4", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "jest-watcher": "^27.0.2", + "micromatch": "^4.0.4", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/environment": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.3.tgz", + "integrity": "sha512-pN9m7fbKsop5vc3FOfH8NF7CKKdRbEZzcxfIo1n2TT6ucKWLFq0P6gCJH0GpnQp036++yY9utHOxpeT1WnkWTA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", + "@types/node": "*", + "jest-mock": "^27.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.3.tgz", + "integrity": "sha512-fQ+UCKRIYKvTCEOyKPnaPnomLATIhMnHC/xPZ7yT1Uldp7yMgMxoYIFidDbpSTgB79+/U+FgfoD30c6wg3IUjA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "@sinonjs/fake-timers": "^7.0.2", + "@types/node": "*", + "jest-message-util": "^27.0.2", + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/globals": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.3.tgz", + "integrity": "sha512-OzsIuf7uf+QalqAGbjClyezzEcLQkdZ+7PejUrZgDs+okdAK8GwRCGcYCirHvhMBBQh60Jr3NlIGbn/KBPQLEQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.3", + "@jest/types": "^27.0.2", + "expect": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/reporters": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.4.tgz", + "integrity": "sha512-Xa90Nm3JnV0xCe4M6A10M9WuN9krb+WFKxV1A98Y4ePCw40n++r7uxFUNU7DT1i9Behj7fjrAIju9oU0t1QtCg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.0.2", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^27.0.2", + "jest-resolve": "^27.0.4", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/source-map": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", + "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", + "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.4.tgz", + "integrity": "sha512-6UFEVwdmxYdyNffBxVVZxmXEdBE4riSddXYSnFNH0ELFQFk/bvagizim8WfgJTqF4EKd+j1yFxvhb8BMHfOjSQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.0.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-runtime": "^27.0.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.2.tgz", + "integrity": "sha512-H8sqKlgtDfVog/s9I4GG2XMbi4Ar7RBxjsKQDUhn2XHAi3NG+GoQwWMER+YfantzExbjNqQvqBHzo/G2pfTiPw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.0.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-util": "^27.0.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@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, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@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, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, + "node_modules/@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + }, + "node_modules/@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "26.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.23.tgz", + "integrity": "sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==", + "dev": true, + "dependencies": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "node_modules/@types/node": { + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/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 + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/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, + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/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 + }, + "node_modules/ansi-align/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align/node_modules/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, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/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, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/babel-jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.2.tgz", + "integrity": "sha512-9OThPl3/IQbo4Yul2vMz4FYwILPQak8XelX4YGowygfHaOl5R5gfjm4iVx4d8aUugkW683t8aq0A74E7b5DU1Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^27.0.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", + "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", + "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.0.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/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, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001236", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz", + "integrity": "sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ==", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "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.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/ci-info": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", + "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", + "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/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, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/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 + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/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 + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/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 + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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 + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/electron-to-chromium": { + "version": "1.3.750", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz", + "integrity": "sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/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 + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", + "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "dependencies": { + "base64-arraybuffer": "0.1.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "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", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.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.merge": "^4.6.2", + "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": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/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, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/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, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-utils/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/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, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", + "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.1", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-regex-util": "^27.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/expect/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "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" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express/node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/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, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/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, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", + "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", + "dev": true + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globals": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", + "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "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" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/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, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/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==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">= 4" + } + }, + "node_modules/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 + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "node_modules/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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/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, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.1.1" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/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 + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.4.tgz", + "integrity": "sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA==", + "dev": true, + "dependencies": { + "@jest/core": "^27.0.4", + "import-local": "^3.0.2", + "jest-cli": "^27.0.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", + "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.4.tgz", + "integrity": "sha512-QD+eblDiRphta630WRKewuASLs/oY1Zki2G4bccntRvrTHQ63ljwFR5TLduuK4Zg0ZPzW0+8o6AP7KRd1yKOjw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.0.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-runtime": "^27.0.4", + "jest-snapshot": "^27.0.4", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.4.tgz", + "integrity": "sha512-VkQFAHWnPQefdvHU9A+G3H/Z3NrrTKqWpvxgQz3nkUdkDTWeKJE6e//BL+R7z79dXOMVksYgM/z6ndtN0hfChg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^27.0.4", + "@jest/types": "^27.0.2", + "babel-jest": "^27.0.2", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", + "jest-circus": "^27.0.4", + "jest-environment-jsdom": "^27.0.3", + "jest-environment-node": "^27.0.3", + "jest-get-type": "^27.0.1", + "jest-jasmine2": "^27.0.4", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.4", + "jest-runner": "^27.0.4", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-docblock": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", + "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", + "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "chalk": "^4.0.0", + "jest-get-type": "^27.0.1", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.3.tgz", + "integrity": "sha512-5KLmgv1bhiimpSA8oGTnZYk6g4fsNyZiA/6gI2tAZUgrufd7heRUSVh4gRokzZVEj8zlwAQYT0Zs6tuJSW/ECA==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", + "@types/node": "*", + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.3.tgz", + "integrity": "sha512-co2/IVnIFL3cItpFULCvXFg9us4gvWXgs7mutAMPCbFhcqh56QAOdKhNzC2+RycsC/k4mbMj1VF+9F/NzA0ROg==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/types": "^27.0.2", + "@types/node": "*", + "jest-mock": "^27.0.3", + "jest-util": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.2.tgz", + "integrity": "sha512-37gYfrYjjhEfk37C4bCMWAC0oPBxDpG0qpl8lYg8BT//wf353YT/fzgA7+Dq0EtM7rPFS3JEcMsxdtDwNMi2cA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^27.0.1", + "jest-serializer": "^27.0.1", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.4.tgz", + "integrity": "sha512-yj3WrjjquZwkJw+eA4c9yucHw4/+EHndHWSqgHbHGQfT94ihaaQsa009j1a0puU8CNxPDk0c1oAPeOpdJUElwA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^27.0.3", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.0.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-runtime": "^27.0.4", + "jest-snapshot": "^27.0.4", + "jest-util": "^27.0.2", + "pretty-format": "^27.0.2", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-jasmine2/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", + "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", + "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.0.2", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-matcher-utils/node_modules/diff-sequences": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", + "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-diff": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", + "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", + "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.0.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/jest-message-util/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.0.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", + "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-regex-util": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", + "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.4.tgz", + "integrity": "sha512-BcfyK2i3cG79PDb/6gB6zFeFQlcqLsQjGBqznFCpA0L/3l1L/oOsltdUjs5eISAWA9HS9qtj8v2PSZr/yWxONQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "chalk": "^4.0.0", + "escalade": "^3.1.1", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "resolve": "^1.20.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.4.tgz", + "integrity": "sha512-F33UPfw1YGWCV2uxJl7wD6TvcQn5IC0LtguwY3r4L7R6H4twpLkp5Q2ZfzRx9A2I3G8feiy0O0sqcn/Qoym71A==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "jest-regex-util": "^27.0.1", + "jest-snapshot": "^27.0.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.4.tgz", + "integrity": "sha512-NfmvSYLCsCJk2AG8Ar2NAh4PhsJJpO+/r+g4bKR5L/5jFzx/indUpnVBdrfDvuqhGLLAvrKJ9FM/Nt8o1dsqxg==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.2", + "@jest/environment": "^27.0.3", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-docblock": "^27.0.1", + "jest-environment-jsdom": "^27.0.3", + "jest-environment-node": "^27.0.3", + "jest-haste-map": "^27.0.2", + "jest-leak-detector": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-resolve": "^27.0.4", + "jest-runtime": "^27.0.4", + "jest-util": "^27.0.2", + "jest-worker": "^27.0.2", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.4.tgz", + "integrity": "sha512-voJB4xbAjS/qYPboV+e+gmg3jfvHJJY4CagFWBOM9dQKtlaiTjcpD2tWwla84Z7PtXSQPeIpXY0qksA9Dum29A==", + "dev": true, + "dependencies": { + "@jest/console": "^27.0.2", + "@jest/environment": "^27.0.3", + "@jest/fake-timers": "^27.0.3", + "@jest/globals": "^27.0.3", + "@jest/source-map": "^27.0.1", + "@jest/test-result": "^27.0.2", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-mock": "^27.0.3", + "jest-regex-util": "^27.0.1", + "jest-resolve": "^27.0.4", + "jest-snapshot": "^27.0.4", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^16.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-serializer": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", + "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.4.tgz", + "integrity": "sha512-hnjrvpKGdSMvKfbHyaG5Kul7pDJGZvjVy0CKpzhu28MmAssDXS6GpynhXzgst1wBQoKD8c9b2VS2a5yhDLQRCA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/parser": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.0.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^27.0.2", + "jest-get-type": "^27.0.1", + "jest-haste-map": "^27.0.2", + "jest-matcher-utils": "^27.0.2", + "jest-message-util": "^27.0.2", + "jest-resolve": "^27.0.4", + "jest-util": "^27.0.2", + "natural-compare": "^1.4.0", + "pretty-format": "^27.0.2", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", + "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", + "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.1", + "jest-get-type": "^27.0.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", + "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^3.0.0", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", + "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.0.1", + "leven": "^3.1.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", + "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", + "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", + "dev": true, + "dependencies": { + "@jest/types": "^27.0.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", + "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.0.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-worker": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest/node_modules/@jest/types": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", + "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest/node_modules/@types/yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.4.tgz", + "integrity": "sha512-E0T+/i2lxsWAzV7LKYd0SB7HUAvePqaeIh5vX43/G5jXLhv1VzjYzJAGEkTfvxV774ll9cyE2ljcL73PVMEOXQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.0.4", + "@jest/test-result": "^27.0.2", + "@jest/types": "^27.0.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "jest-config": "^27.0.4", + "jest-util": "^27.0.2", + "jest-validate": "^27.0.2", + "prompts": "^2.0.1", + "yargs": "^16.0.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/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 + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.6.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", + "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.5", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.3.0.tgz", + "integrity": "sha512-tqPKHZ5CaBJw0Xmy0ZZvLs1qTV+BNFSyvn77ASXkpBNfIRk8ev26fKrD9iLGwGA9zedPao52GSHzq8lyZG0NUw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/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 + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/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 + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dependencies": { + "mime-db": "1.48.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/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 + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "node_modules/nodemon": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "dev": true, + "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.3", + "update-notifier": "^4.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/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=" + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", + "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/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 + }, + "node_modules/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, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/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, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/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==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/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, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/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==" + }, + "node_modules/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==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/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, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "node_modules/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 + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/socket.io": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.2.tgz", + "integrity": "sha512-xK0SD1C7hFrh9+bYoYCdVt+ncixkSLKtNLCax5aEy1o3r5PaO5yQhVb97exIe67cE7lAK+EpyMytXWTWmyZY8w==", + "dependencies": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~5.1.0", + "socket.io-adapter": "~2.3.0", + "socket.io-parser": "~4.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", + "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" + }, + "node_modules/socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/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==", + "dev": true + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/superagent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-6.1.0.tgz", + "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.2", + "methods": "^1.1.2", + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 7.0.0" + } + }, + "node_modules/superagent/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/supertest": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.1.3.tgz", + "integrity": "sha512-v2NVRyP73XDewKb65adz+yug1XMtmvij63qIWHZzSX8tp6wiq6xBLUy4SUAd2NII6wIipOmHT/FD9eicpJwdgQ==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", + "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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 + }, + "node_modules/throat": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", + "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/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, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/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, + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/undefsafe/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/undefsafe/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/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 + }, + "node_modules/update-notifier/node_modules/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, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/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, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.6.0.tgz", + "integrity": "sha512-os0KkeeqUOl7ccdDT1qqUcS4KH4tcBTSKK5Nl5WKb2lyxInIZ/CpjkqKa1Ss12mjfdcRX9mHmPPs7/SxG1Hbdw==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/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, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/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, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.12.11", @@ -1054,7 +8159,6 @@ "@types/node": { "version": "15.12.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", "dev": true }, @@ -5224,7 +12328,6 @@ "requires": { "@types/cookie": "^0.4.0", "@types/cors": "^2.8.8", - "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.1", @@ -5292,6 +12395,23 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "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==", + "dev": true + } + } + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -5313,23 +12433,6 @@ "strip-ansi": "^6.0.0" } }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "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==", - "dev": true - } - } - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", diff --git a/server.js b/server.js index 29e7b58..60a46d9 100644 --- a/server.js +++ b/server.js @@ -22,7 +22,12 @@ const onConnection = socket => { // take in button state data and broadcast to other clients const onButtonClick = buttonState => { - socket.broadcast.to(`${users[socket.id].room}`).emit('click', buttonState); + socket.broadcast.to(`${users[socket.id].room}`).emit('socket serach click', buttonState); + }; + + // take in input from search input field + const onInputChange = inputValue => { + socket.broadcast.to(`${users[socket.id].room}`).emit('search input typing', inputValue); }; // take in message data and emit to all clients @@ -38,7 +43,8 @@ const onConnection = socket => { // attach functions to listeners socket.on('movement', onMovement); - socket.on('click', onButtonClick); + socket.on('searchSubmit', onButtonClick); + socket.on('search input', onInputChange); socket.on('client message', onMessage); socket.on('disconnect', onDisconnect); }; From 73c31a309091a76d1feaf337463106d6c23a36e4 Mon Sep 17 00:00:00 2001 From: devon-wolf <33987744+devon-wolf@users.noreply.github.com> Date: Fri, 11 Jun 2021 15:35:35 -0700 Subject: [PATCH 04/30] Feature/online users (#4) * Small addition to join event so number of online users can be easily broadcast. * Small addition to join event so number of online users can be easily broadcast. --- server.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server.js b/server.js index 60a46d9..f1dfba6 100644 --- a/server.js +++ b/server.js @@ -13,6 +13,7 @@ const onConnection = socket => { // on every connection, add a user a join that user's socket to the current room addUser(socket); socket.join(`${users[socket.id].room}`); + socket.broadcast.to(`${users[socket.id].room}`).emit('new user', socket.id); // take in cursor movement data and broadcast to other clients const onMovement = movementData => { @@ -54,3 +55,4 @@ io.sockets.on('connection', onConnection); server.listen(PORT, () => { console.log(`Started on ${PORT}`); }); + From 7077e4927e68b3b61835481720dee76e32006caa Mon Sep 17 00:00:00 2001 From: devon-wolf <33987744+devon-wolf@users.noreply.github.com> Date: Mon, 14 Jun 2021 10:16:59 -0700 Subject: [PATCH 05/30] Fix/user connect event (#7) * Small addition to join event so number of online users can be easily broadcast. * Send an object instead of just an ID on the new user event * Add an event to send existing users to client on join - commented out bc it is not working * Actually remember to comment it out --- server.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/server.js b/server.js index f1dfba6..922a10e 100644 --- a/server.js +++ b/server.js @@ -12,33 +12,37 @@ const { users, addUser, deleteUser } = require('./lib/socket/user-utils'); const onConnection = socket => { // on every connection, add a user a join that user's socket to the current room addUser(socket); - socket.join(`${users[socket.id].room}`); - socket.broadcast.to(`${users[socket.id].room}`).emit('new user', socket.id); + const currentRoom = `${users}[socket.id].room`; + + socket.join(currentRoom); + socket.broadcast.to(currentRoom).emit('new user', { [socket.id]: socket.id }); + + // socket.to(socket.id).emit('current users', Object.keys(users)); // take in cursor movement data and broadcast to other clients const onMovement = movementData => { movementData.id = socket.id; - socket.broadcast.to(`${users[socket.id].room}`).emit('moving', movementData); + socket.broadcast.to(currentRoom).emit('moving', movementData); }; // take in button state data and broadcast to other clients const onButtonClick = buttonState => { - socket.broadcast.to(`${users[socket.id].room}`).emit('socket serach click', buttonState); + socket.broadcast.to(currentRoom).emit('socket serach click', buttonState); }; // take in input from search input field const onInputChange = inputValue => { - socket.broadcast.to(`${users[socket.id].room}`).emit('search input typing', inputValue); + socket.broadcast.to(currentRoom).emit('search input typing', inputValue); }; // take in message data and emit to all clients const onMessage = message => { - socket.to(`${users[socket.id].room}`).emit('socket message', message); + socket.to(currentRoom).emit('socket message', message); }; // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { - socket.broadcast.to(`${users[socket.id].room}`).emit('removeCursor', socket.id); + socket.broadcast.to(currentRoom).emit('removeCursor', socket.id); deleteUser(socket); }; From 0af823ad2babbea1adf48e443413e5d870bf65b5 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Mon, 14 Jun 2021 10:17:14 -0700 Subject: [PATCH 06/30] Link hover (#6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added socket listen and emit for search input and button click * nav link hover socket working Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- server.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server.js b/server.js index 922a10e..79fdcf9 100644 --- a/server.js +++ b/server.js @@ -35,6 +35,11 @@ const onConnection = socket => { socket.broadcast.to(currentRoom).emit('search input typing', inputValue); }; + // take in hover data from nav links (for now) + const onHover = hoverData => { + socket.to(`${users[socket.id].room}`).emit('socket link hover', hoverData); + }; + // take in message data and emit to all clients const onMessage = message => { socket.to(currentRoom).emit('socket message', message); @@ -50,6 +55,7 @@ const onConnection = socket => { socket.on('movement', onMovement); socket.on('searchSubmit', onButtonClick); socket.on('search input', onInputChange); + socket.on('link hover', onHover); socket.on('client message', onMessage); socket.on('disconnect', onDisconnect); }; From c2712d7356b6697917deac524f20c9a6515e4120 Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Mon, 14 Jun 2021 10:19:06 -0700 Subject: [PATCH 07/30] simple room functionality test (#5) --- __tests__/app.test.js | 58 +++++++++++++++++++- lib/socket/user-utils.js | 13 ++--- package-lock.json | 116 ++++++++++++++++++++++++++++++++++++++- package.json | 3 +- server.js | 10 ++-- 5 files changed, 184 insertions(+), 16 deletions(-) diff --git a/__tests__/app.test.js b/__tests__/app.test.js index b5ff76f..11839d6 100644 --- a/__tests__/app.test.js +++ b/__tests__/app.test.js @@ -1,5 +1,57 @@ -describe('GIM-server routes', () => { - it('is a test', () => { - expect(true).toEqual(true); +const { createServer } = require('http'); +const { Server } = require('socket.io'); +const Client = require('socket.io-client'); + +const { addUser } = require('../lib/socket/user-utils.js'); + +const testUsers = {}; + +jest.setTimeout(5000); +describe('user room functionality', () => { + let io, + clientSocket, + clientSocket2, + clientSocket3, + clientSocket4; + + beforeAll((done) => { + const httpServer = createServer(); + io = new Server(httpServer); + httpServer.listen(() => { + const port = httpServer.address().port; + clientSocket = new Client(`http://localhost:${port}`); + clientSocket2 = new Client(`http://localhost:${port}`); + clientSocket3 = new Client(`http://localhost:${port}`); + clientSocket4 = new Client(`http://localhost:${port}`); + clientSocket4 = new Client(`http://localhost:${port}`); + + io.on('connection', (socket) => { + addUser(socket, testUsers); + }); + + clientSocket.on('connect', done); + clientSocket2.on('connect', done); + clientSocket3.on('connect', done); + clientSocket4.on('connect', done); + }); }); + + afterAll(() => { + io.close(); + clientSocket.close(); + clientSocket2.close(); + clientSocket3.close(); + clientSocket4.close(); + }); + + test('first client should be in room 0', () => { + const usersArr = Object.values(testUsers); + expect(usersArr[1].room).toBe('0'); + }); + + test('final client should be in room 1', () => { + const usersArr = Object.values(testUsers); + expect(usersArr[3].room).toBe('1'); + }); + }); diff --git a/lib/socket/user-utils.js b/lib/socket/user-utils.js index fe61274..6edea5a 100644 --- a/lib/socket/user-utils.js +++ b/lib/socket/user-utils.js @@ -1,14 +1,13 @@ const ROOM_THRESHOLD = 3; -const users = {}; let roomNumber = 0; let unassignedUsers = 0; -const addUser = socket => { +const addUser = (socket, userObj) => { console.log(`new user in room ${roomNumber}: ${socket.id}`); unassignedUsers += 1; - users[socket.id] = socket; - users[socket.id].room = String(roomNumber); + userObj[socket.id] = socket; + userObj[socket.id].room = String(roomNumber); if(unassignedUsers >= ROOM_THRESHOLD) { roomNumber ++; @@ -16,9 +15,9 @@ const addUser = socket => { } }; -const deleteUser = socket => { +const deleteUser = (socket, userObj) => { console.log('user left: ', socket.id); - delete users[socket.id]; + delete userObj[socket.id]; }; -module.exports = { users, addUser, deleteUser }; +module.exports = { addUser, deleteUser }; diff --git a/package-lock.json b/package-lock.json index 6fe640c..d92d65f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "dependencies": { "dotenv": "^10.0.0", "express": "^4.17.1", - "socket.io": "^4.1.2" + "socket.io": "^4.1.2", + "socket.io-client": "^4.1.2" }, "devDependencies": { "@babel/eslint-parser": "^7.14.4", @@ -1534,6 +1535,11 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2298,6 +2304,22 @@ "node": ">=10.0.0" } }, + "node_modules/engine.io-client": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.1.1.tgz", + "integrity": "sha512-jPFpw2HLL0lhZ2KY0BpZhIJdleQcUO9W1xkIpo0h3d6s+5D6+EV/xgQw9qWOmymszv2WXef/6KUUehyxEKomlQ==", + "dependencies": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "yeast": "0.1.2" + } + }, "node_modules/engine.io-parser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", @@ -3144,6 +3166,11 @@ "node": ">= 0.4.0" } }, + "node_modules/has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -5668,6 +5695,16 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "node_modules/parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6275,6 +6312,23 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" }, + "node_modules/socket.io-client": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.1.2.tgz", + "integrity": "sha512-RDpWJP4DQT1XeexmeDyDkm0vrFc0+bUsHDKiVGaNISJvJonhQQOMqV9Vwfg0ZpPJ27LCdan7iqTI92FRSOkFWQ==", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-client": "~5.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/socket.io-parser": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", @@ -7106,6 +7160,11 @@ "engines": { "node": ">=10" } + }, + "node_modules/yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } }, "dependencies": { @@ -8477,6 +8536,11 @@ "babel-preset-current-node-syntax": "^1.0.0" } }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -9108,6 +9172,22 @@ } } }, + "engine.io-client": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.1.1.tgz", + "integrity": "sha512-jPFpw2HLL0lhZ2KY0BpZhIJdleQcUO9W1xkIpo0h3d6s+5D6+EV/xgQw9qWOmymszv2WXef/6KUUehyxEKomlQ==", + "requires": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "yeast": "0.1.2" + } + }, "engine.io-parser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", @@ -9784,6 +9864,11 @@ "function-bind": "^1.1.1" } }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -11861,6 +11946,16 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -12341,6 +12436,20 @@ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" }, + "socket.io-client": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.1.2.tgz", + "integrity": "sha512-RDpWJP4DQT1XeexmeDyDkm0vrFc0+bUsHDKiVGaNISJvJonhQQOMqV9Vwfg0ZpPJ27LCdan7iqTI92FRSOkFWQ==", + "requires": { + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-client": "~5.1.1", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.4" + } + }, "socket.io-parser": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", @@ -13018,6 +13127,11 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", "dev": true + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } } diff --git a/package.json b/package.json index 7e49449..3c96be0 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "dependencies": { "dotenv": "^10.0.0", "express": "^4.17.1", - "socket.io": "^4.1.2" + "socket.io": "^4.1.2", + "socket.io-client": "^4.1.2" } } diff --git a/server.js b/server.js index 79fdcf9..688b183 100644 --- a/server.js +++ b/server.js @@ -7,18 +7,20 @@ const io = new Server(server, { cors: true }); const PORT = process.env.PORT || 8080; -const { users, addUser, deleteUser } = require('./lib/socket/user-utils'); +const users = {}; +const { addUser, deleteUser } = require('./lib/socket/user-utils'); const onConnection = socket => { // on every connection, add a user a join that user's socket to the current room - addUser(socket); + addUser(socket, users); + socket.join(`${users[socket.id].room}`); const currentRoom = `${users}[socket.id].room`; socket.join(currentRoom); socket.broadcast.to(currentRoom).emit('new user', { [socket.id]: socket.id }); // socket.to(socket.id).emit('current users', Object.keys(users)); - + // take in cursor movement data and broadcast to other clients const onMovement = movementData => { movementData.id = socket.id; @@ -47,8 +49,8 @@ const onConnection = socket => { // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { + deleteUser(socket, users); socket.broadcast.to(currentRoom).emit('removeCursor', socket.id); - deleteUser(socket); }; // attach functions to listeners From c154185d71506dfb624294c1e4ecf39b273ba0b1 Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Mon, 14 Jun 2021 13:38:52 -0700 Subject: [PATCH 08/30] fix broken current room (#8) --- server.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server.js b/server.js index 688b183..a84c9ac 100644 --- a/server.js +++ b/server.js @@ -13,10 +13,10 @@ const { addUser, deleteUser } = require('./lib/socket/user-utils'); const onConnection = socket => { // on every connection, add a user a join that user's socket to the current room addUser(socket, users); - socket.join(`${users[socket.id].room}`); - const currentRoom = `${users}[socket.id].room`; - + const currentRoom = `${users[socket.id].room}`; + socket.join(currentRoom); + socket.broadcast.to(currentRoom).emit('new user', { [socket.id]: socket.id }); // socket.to(socket.id).emit('current users', Object.keys(users)); @@ -39,7 +39,7 @@ const onConnection = socket => { // take in hover data from nav links (for now) const onHover = hoverData => { - socket.to(`${users[socket.id].room}`).emit('socket link hover', hoverData); + socket.to(currentRoom).emit('socket link hover', hoverData); }; // take in message data and emit to all clients @@ -57,7 +57,7 @@ const onConnection = socket => { socket.on('movement', onMovement); socket.on('searchSubmit', onButtonClick); socket.on('search input', onInputChange); - socket.on('link hover', onHover); + socket.on('link hover', onHover); socket.on('client message', onMessage); socket.on('disconnect', onDisconnect); }; From 5b4db2af905bcc0a3962ff77795f26448a36c867 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Mon, 14 Jun 2021 15:27:07 -0700 Subject: [PATCH 09/30] Feature/header click socket (#9) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added socket listen and emit for search input and button click * nav link hover socket working * header click socket handling Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- package-lock.json | 2 +- server.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index d92d65f..eee76df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13134,4 +13134,4 @@ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } -} +} \ No newline at end of file diff --git a/server.js b/server.js index a84c9ac..b254639 100644 --- a/server.js +++ b/server.js @@ -14,13 +14,13 @@ const onConnection = socket => { // on every connection, add a user a join that user's socket to the current room addUser(socket, users); const currentRoom = `${users[socket.id].room}`; - + socket.join(currentRoom); socket.broadcast.to(currentRoom).emit('new user', { [socket.id]: socket.id }); // socket.to(socket.id).emit('current users', Object.keys(users)); - + // take in cursor movement data and broadcast to other clients const onMovement = movementData => { movementData.id = socket.id; @@ -47,6 +47,11 @@ const onConnection = socket => { socket.to(currentRoom).emit('socket message', message); }; + //take in user click on header to all users + const onHeaderClick = (clickCount) => { + socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); + }; + // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { deleteUser(socket, users); @@ -59,6 +64,7 @@ const onConnection = socket => { socket.on('search input', onInputChange); socket.on('link hover', onHover); socket.on('client message', onMessage); + socket.on('headerTextClick', onHeaderClick); socket.on('disconnect', onDisconnect); }; From 0716e5f0ab4603279b28b5c43ca0f0845dd4004b Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Mon, 14 Jun 2021 16:58:53 -0700 Subject: [PATCH 10/30] add socket features for ghost icons (#10) --- server.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server.js b/server.js index b254639..859a315 100644 --- a/server.js +++ b/server.js @@ -47,6 +47,8 @@ const onConnection = socket => { socket.to(currentRoom).emit('socket message', message); }; + const onSocialIconChange = iconData => { + socket.to(currentRoom).emit('icon change', iconData); //take in user click on header to all users const onHeaderClick = (clickCount) => { socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); @@ -64,6 +66,7 @@ const onConnection = socket => { socket.on('search input', onInputChange); socket.on('link hover', onHover); socket.on('client message', onMessage); + socket.on('icon change', onSocialIconChange); socket.on('headerTextClick', onHeaderClick); socket.on('disconnect', onDisconnect); }; From e5d4a97cc2f4ef2d89332490a868951a3f2ef3d9 Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Mon, 14 Jun 2021 17:28:45 -0700 Subject: [PATCH 11/30] fix missing bracket (#11) --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 859a315..0ddd16c 100644 --- a/server.js +++ b/server.js @@ -49,6 +49,7 @@ const onConnection = socket => { const onSocialIconChange = iconData => { socket.to(currentRoom).emit('icon change', iconData); + }; //take in user click on header to all users const onHeaderClick = (clickCount) => { socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); @@ -76,4 +77,3 @@ io.sockets.on('connection', onConnection); server.listen(PORT, () => { console.log(`Started on ${PORT}`); }); - From 4b4bcc187069833f74e13704e58a3f2049a0e788 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Tue, 15 Jun 2021 09:30:23 -0700 Subject: [PATCH 12/30] socket handlers for answers and DUCK (#12) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- package-lock.json | 2 +- server.js | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index eee76df..d92d65f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13134,4 +13134,4 @@ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } -} \ No newline at end of file +} diff --git a/server.js b/server.js index 0ddd16c..ea874c6 100644 --- a/server.js +++ b/server.js @@ -29,7 +29,7 @@ const onConnection = socket => { // take in button state data and broadcast to other clients const onButtonClick = buttonState => { - socket.broadcast.to(currentRoom).emit('socket serach click', buttonState); + socket.broadcast.to(currentRoom).emit('socket search click', buttonState); }; // take in input from search input field @@ -37,6 +37,11 @@ const onConnection = socket => { socket.broadcast.to(currentRoom).emit('search input typing', inputValue); }; + //when 'duck' is entered into search bar duck data === TRUE + const onDuckInput = duckData => { + socket.to(currentRoom).emit('duck input', duckData); + }; + // take in hover data from nav links (for now) const onHover = hoverData => { socket.to(currentRoom).emit('socket link hover', hoverData); @@ -65,6 +70,7 @@ const onConnection = socket => { socket.on('movement', onMovement); socket.on('searchSubmit', onButtonClick); socket.on('search input', onInputChange); + socket.on('duck', onDuckInput); socket.on('link hover', onHover); socket.on('client message', onMessage); socket.on('icon change', onSocialIconChange); From 8df410b5ae9f96f23bd482d912b217ecd8cd9704 Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Tue, 15 Jun 2021 10:35:16 -0700 Subject: [PATCH 13/30] add socket data for image gallery challenge (#13) --- server.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index ea874c6..1fa3a57 100644 --- a/server.js +++ b/server.js @@ -51,7 +51,7 @@ const onConnection = socket => { const onMessage = message => { socket.to(currentRoom).emit('socket message', message); }; - + // take in ghost icon data and emit to all clients const onSocialIconChange = iconData => { socket.to(currentRoom).emit('icon change', iconData); }; @@ -59,7 +59,13 @@ const onConnection = socket => { const onHeaderClick = (clickCount) => { socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); }; - + //take in image gallery button data and emit to all clients + const onImageButtonTextChange = (imageButtonData) => { + socket.broadcast.to(currentRoom).emit('button text change', imageButtonData); + }; + const onImageHover = (imageHoverData) => { + socket.broadcast.to(currentRoom).emit('image hover', imageHoverData); + }; // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { deleteUser(socket, users); @@ -75,6 +81,8 @@ const onConnection = socket => { socket.on('client message', onMessage); socket.on('icon change', onSocialIconChange); socket.on('headerTextClick', onHeaderClick); + socket.on('button text change', onImageButtonTextChange); + socket.on('image hover', onImageHover); socket.on('disconnect', onDisconnect); }; From f213ca87fce8007034e27631c568a51526485d91 Mon Sep 17 00:00:00 2001 From: devon-wolf <33987744+devon-wolf@users.noreply.github.com> Date: Tue, 15 Jun 2021 10:40:01 -0700 Subject: [PATCH 14/30] Feature/ghost story (#14) * Small addition to join event so number of online users can be easily broadcast. * Commit to pull --- server.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/server.js b/server.js index 1fa3a57..27fc915 100644 --- a/server.js +++ b/server.js @@ -55,10 +55,21 @@ const onConnection = socket => { const onSocialIconChange = iconData => { socket.to(currentRoom).emit('icon change', iconData); }; + //take in user click on header to all users const onHeaderClick = (clickCount) => { socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); }; + + // presentational event that indicates the ghost story has been flipped over by a client and should be flipped for the other clients + const onGhostStoryFlip = () => { + socket.to(currentRoom).emit('ghostStoryFlip'); + }; + + const onGhostStoryPoint = points => { + socket.broadcast.to(currentRoom).emit('socketGhostStoryPoint', points); + }; + //take in image gallery button data and emit to all clients const onImageButtonTextChange = (imageButtonData) => { socket.broadcast.to(currentRoom).emit('button text change', imageButtonData); @@ -66,6 +77,7 @@ const onConnection = socket => { const onImageHover = (imageHoverData) => { socket.broadcast.to(currentRoom).emit('image hover', imageHoverData); }; + // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { deleteUser(socket, users); @@ -81,6 +93,8 @@ const onConnection = socket => { socket.on('client message', onMessage); socket.on('icon change', onSocialIconChange); socket.on('headerTextClick', onHeaderClick); + socket.on('ghostStoryFlip', onGhostStoryFlip); + socket.on('ghostStoryPoint', onGhostStoryPoint); socket.on('button text change', onImageButtonTextChange); socket.on('image hover', onImageHover); socket.on('disconnect', onDisconnect); From eead252eabfeb68b9f8eac3838eba875ffce05d8 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Tue, 15 Jun 2021 14:16:19 -0700 Subject: [PATCH 15/30] Feature/values hover (#15) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * socket handlers for answers and DUCK * socket handling for mission section hover Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- server.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server.js b/server.js index 27fc915..e99f59f 100644 --- a/server.js +++ b/server.js @@ -51,6 +51,12 @@ const onConnection = socket => { const onMessage = message => { socket.to(currentRoom).emit('socket message', message); }; + + // mission section hover + const onMissionHover = hover => { + socket.to(currentRoom).emit('socket mission hover', hover); + }; + // take in ghost icon data and emit to all clients const onSocialIconChange = iconData => { socket.to(currentRoom).emit('icon change', iconData); @@ -91,6 +97,7 @@ const onConnection = socket => { socket.on('duck', onDuckInput); socket.on('link hover', onHover); socket.on('client message', onMessage); + socket.on('missionHover', onMissionHover); socket.on('icon change', onSocialIconChange); socket.on('headerTextClick', onHeaderClick); socket.on('ghostStoryFlip', onGhostStoryFlip); From ec0cf6acb6e7fffbcc48b3154f45b748fb91c7f7 Mon Sep 17 00:00:00 2001 From: Casey Warren <74938966+caseywar@users.noreply.github.com> Date: Tue, 15 Jun 2021 17:16:44 -0400 Subject: [PATCH 16/30] Feature/footer click challenge (#16) * started the read me * adding socket stuff, commiting to pull * commiting to pull * added on footer title click socket * added comment --- README.md | 28 ++++++++++++++++++++++++++++ server.js | 6 ++++++ 2 files changed, 34 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..10c371d --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# GIM, LLC +## General Industrial Manufacturers, LLC + +_"Commited to providing the best industrial supplies for your company"_ + + +> `enter the ghost in the machine` + +_One day, while cleaning the server trays, a kind young soul was thrust into a strange fate.. Their soul now lives within the server and needs your help to be set free..._ + +The repository for the front end can be found [here](https://github.com/GIM-LLC/GIM) + + +### Group Members +- Katrina Cloyd [GitHub](https://github.com/KatrinaCloyd) | [LinkedIn](https://www.linkedin.com/in/katrinacloyd/) +- Juli Vela [GitHub](https://github.com/juliannevela) | [LinkedIn](https://www.linkedin.com/in/juliannevela/) +- Casey Warren [GitHub](https://github.com/caseywar) | [LinkedIn](https://www.linkedin.com/in/casey-maynah-warren/) +- Devon Wolfkiel [GitHub](https://github.com/devon-wolf) | [LinkedIn](https://www.linkedin.com/in/devon-wolfkiel/) +- Cameron Zimmerman [GitHub](https://github.com/CameronZimmerman) | [LinkedIn](https://www.linkedin.com/in/cameron-zimmerman/) + + +## add actual netlify and heroku sites here +GIM, LLC is hosted on [Netlify]() + +The GIM, LLC server is hosted on [Heroku]() + + +Project planning can be seen on our [Miro board](https://miro.com/app/board/o9J_lA3sn-w=/?utm_source=notification&utm_medium=email&utm_campaign=daily-updates&utm_content=go-to-board). \ No newline at end of file diff --git a/server.js b/server.js index e99f59f..4bc51d0 100644 --- a/server.js +++ b/server.js @@ -67,6 +67,11 @@ const onConnection = socket => { socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); }; + //take in user click on footer to all users + const onFooterTitleClick = titleData => { + socket.to(currentRoom).emit('socketFooterTitleClick', titleData); + }; + // presentational event that indicates the ghost story has been flipped over by a client and should be flipped for the other clients const onGhostStoryFlip = () => { socket.to(currentRoom).emit('ghostStoryFlip'); @@ -100,6 +105,7 @@ const onConnection = socket => { socket.on('missionHover', onMissionHover); socket.on('icon change', onSocialIconChange); socket.on('headerTextClick', onHeaderClick); + socket.on('footerTitleClick', onFooterTitleClick); socket.on('ghostStoryFlip', onGhostStoryFlip); socket.on('ghostStoryPoint', onGhostStoryPoint); socket.on('button text change', onImageButtonTextChange); From d1bdc430131c89730195a96f2578dec789bbaab3 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Tue, 15 Jun 2021 16:31:29 -0700 Subject: [PATCH 17/30] Feature/tranparent hover (#17) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * socket handlers for answers and DUCK * socket handling for mission section hover * footer transparent click and points sockets Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- server.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/server.js b/server.js index 4bc51d0..39ce953 100644 --- a/server.js +++ b/server.js @@ -57,6 +57,16 @@ const onConnection = socket => { socket.to(currentRoom).emit('socket mission hover', hover); }; + // transparent footer click + const onTransparentClick = () => { + socket.to(currentRoom).emit('socket transparent click'); + }; + + // transparent footer click points + const onTransparentPoints = () => { + socket.to(currentRoom).emit('socket transparent points'); + }; + // take in ghost icon data and emit to all clients const onSocialIconChange = iconData => { socket.to(currentRoom).emit('icon change', iconData); @@ -103,6 +113,8 @@ const onConnection = socket => { socket.on('link hover', onHover); socket.on('client message', onMessage); socket.on('missionHover', onMissionHover); + socket.on('transparent click', onTransparentClick); + socket.on('transparent points', onTransparentPoints); socket.on('icon change', onSocialIconChange); socket.on('headerTextClick', onHeaderClick); socket.on('footerTitleClick', onFooterTitleClick); From 1f0126a1dadac4c94d8b043776bb1edb58f0774a Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Tue, 15 Jun 2021 16:35:36 -0700 Subject: [PATCH 18/30] socket data for five highlights challenge (#18) --- server.js | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/server.js b/server.js index 39ce953..6a5af20 100644 --- a/server.js +++ b/server.js @@ -10,7 +10,7 @@ const PORT = process.env.PORT || 8080; const users = {}; const { addUser, deleteUser } = require('./lib/socket/user-utils'); -const onConnection = socket => { +const onConnection = (socket) => { // on every connection, add a user a join that user's socket to the current room addUser(socket, users); const currentRoom = `${users[socket.id].room}`; @@ -22,38 +22,38 @@ const onConnection = socket => { // socket.to(socket.id).emit('current users', Object.keys(users)); // take in cursor movement data and broadcast to other clients - const onMovement = movementData => { + const onMovement = (movementData) => { movementData.id = socket.id; socket.broadcast.to(currentRoom).emit('moving', movementData); }; // take in button state data and broadcast to other clients - const onButtonClick = buttonState => { + const onButtonClick = (buttonState) => { socket.broadcast.to(currentRoom).emit('socket search click', buttonState); }; // take in input from search input field - const onInputChange = inputValue => { + const onInputChange = (inputValue) => { socket.broadcast.to(currentRoom).emit('search input typing', inputValue); }; - //when 'duck' is entered into search bar duck data === TRUE - const onDuckInput = duckData => { + //when 'duck' is entered into search bar duck data === TRUE + const onDuckInput = (duckData) => { socket.to(currentRoom).emit('duck input', duckData); }; // take in hover data from nav links (for now) - const onHover = hoverData => { + const onHover = (hoverData) => { socket.to(currentRoom).emit('socket link hover', hoverData); }; // take in message data and emit to all clients - const onMessage = message => { + const onMessage = (message) => { socket.to(currentRoom).emit('socket message', message); }; // mission section hover - const onMissionHover = hover => { + const onMissionHover = (hover) => { socket.to(currentRoom).emit('socket mission hover', hover); }; @@ -68,7 +68,7 @@ const onConnection = socket => { }; // take in ghost icon data and emit to all clients - const onSocialIconChange = iconData => { + const onSocialIconChange = (iconData) => { socket.to(currentRoom).emit('icon change', iconData); }; @@ -78,7 +78,7 @@ const onConnection = socket => { }; //take in user click on footer to all users - const onFooterTitleClick = titleData => { + const onFooterTitleClick = (titleData) => { socket.to(currentRoom).emit('socketFooterTitleClick', titleData); }; @@ -87,18 +87,22 @@ const onConnection = socket => { socket.to(currentRoom).emit('ghostStoryFlip'); }; - const onGhostStoryPoint = points => { + const onGhostStoryPoint = (points) => { socket.broadcast.to(currentRoom).emit('socketGhostStoryPoint', points); }; //take in image gallery button data and emit to all clients const onImageButtonTextChange = (imageButtonData) => { - socket.broadcast.to(currentRoom).emit('button text change', imageButtonData); + socket.broadcast + .to(currentRoom) + .emit('button text change', imageButtonData); }; const onImageHover = (imageHoverData) => { socket.broadcast.to(currentRoom).emit('image hover', imageHoverData); }; - + const onGlowingObjectClick = (glowingObjectData) => { + socket.broadcast.to(currentRoom).emit('socket glowing object', glowingObjectData); + }; // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { deleteUser(socket, users); @@ -122,6 +126,7 @@ const onConnection = socket => { socket.on('ghostStoryPoint', onGhostStoryPoint); socket.on('button text change', onImageButtonTextChange); socket.on('image hover', onImageHover); + socket.on('glowing object click', onGlowingObjectClick); socket.on('disconnect', onDisconnect); }; From 4c3f60727e23c47222b6c1fb44df1337281e2f19 Mon Sep 17 00:00:00 2001 From: Julianne Vela Date: Tue, 15 Jun 2021 17:11:45 -0700 Subject: [PATCH 19/30] added dont click functionality to join us dropdown menu (#19) * added dont click functionality to join us dropdown menu * Update server.js --- server.js | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/server.js b/server.js index 6a5af20..3ca2bfc 100644 --- a/server.js +++ b/server.js @@ -10,7 +10,7 @@ const PORT = process.env.PORT || 8080; const users = {}; const { addUser, deleteUser } = require('./lib/socket/user-utils'); -const onConnection = (socket) => { +const onConnection = socket => { // on every connection, add a user a join that user's socket to the current room addUser(socket, users); const currentRoom = `${users[socket.id].room}`; @@ -22,38 +22,38 @@ const onConnection = (socket) => { // socket.to(socket.id).emit('current users', Object.keys(users)); // take in cursor movement data and broadcast to other clients - const onMovement = (movementData) => { + const onMovement = movementData => { movementData.id = socket.id; socket.broadcast.to(currentRoom).emit('moving', movementData); }; // take in button state data and broadcast to other clients - const onButtonClick = (buttonState) => { + const onButtonClick = buttonState => { socket.broadcast.to(currentRoom).emit('socket search click', buttonState); }; // take in input from search input field - const onInputChange = (inputValue) => { + const onInputChange = inputValue => { socket.broadcast.to(currentRoom).emit('search input typing', inputValue); }; //when 'duck' is entered into search bar duck data === TRUE - const onDuckInput = (duckData) => { + const onDuckInput = duckData => { socket.to(currentRoom).emit('duck input', duckData); }; // take in hover data from nav links (for now) - const onHover = (hoverData) => { + const onHover = hoverData => { socket.to(currentRoom).emit('socket link hover', hoverData); }; // take in message data and emit to all clients - const onMessage = (message) => { + const onMessage = message => { socket.to(currentRoom).emit('socket message', message); }; // mission section hover - const onMissionHover = (hover) => { + const onMissionHover = hover => { socket.to(currentRoom).emit('socket mission hover', hover); }; @@ -68,17 +68,17 @@ const onConnection = (socket) => { }; // take in ghost icon data and emit to all clients - const onSocialIconChange = (iconData) => { + const onSocialIconChange = iconData => { socket.to(currentRoom).emit('icon change', iconData); }; //take in user click on header to all users - const onHeaderClick = (clickCount) => { + const onHeaderClick = clickCount => { socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); }; //take in user click on footer to all users - const onFooterTitleClick = (titleData) => { + const onFooterTitleClick = titleData => { socket.to(currentRoom).emit('socketFooterTitleClick', titleData); }; @@ -87,22 +87,29 @@ const onConnection = (socket) => { socket.to(currentRoom).emit('ghostStoryFlip'); }; - const onGhostStoryPoint = (points) => { + const onGhostStoryPoint = points => { socket.broadcast.to(currentRoom).emit('socketGhostStoryPoint', points); }; //take in image gallery button data and emit to all clients - const onImageButtonTextChange = (imageButtonData) => { + const onImageButtonTextChange = imageButtonData => { socket.broadcast .to(currentRoom) .emit('button text change', imageButtonData); }; - const onImageHover = (imageHoverData) => { + const onImageHover = imageHoverData => { socket.broadcast.to(currentRoom).emit('image hover', imageHoverData); }; + + // When one user is hovering over Join Us, a second user clicks on "DONT" to change text to "I SAID DONT" + const onDontClick = btnClicked => { + socket.to(currentRoom).emit('dont socket', btnClicked); + }; + const onGlowingObjectClick = (glowingObjectData) => { socket.broadcast.to(currentRoom).emit('socket glowing object', glowingObjectData); }; + // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { deleteUser(socket, users); @@ -126,6 +133,7 @@ const onConnection = (socket) => { socket.on('ghostStoryPoint', onGhostStoryPoint); socket.on('button text change', onImageButtonTextChange); socket.on('image hover', onImageHover); + socket.on('dont click', (btnClicked) => onDontClick(btnClicked)); socket.on('glowing object click', onGlowingObjectClick); socket.on('disconnect', onDisconnect); }; From 7c714960a120a60de69b61178350f17c7a6aa412 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Wed, 16 Jun 2021 09:11:19 -0700 Subject: [PATCH 20/30] Feature/ghostie (#21) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * socket handlers for answers and DUCK * socket handling for mission section hover * footer transparent click and points sockets * socket handling for ghost image clicks Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- server.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/server.js b/server.js index 3ca2bfc..fb6c707 100644 --- a/server.js +++ b/server.js @@ -101,6 +101,14 @@ const onConnection = socket => { socket.broadcast.to(currentRoom).emit('image hover', imageHoverData); }; + //click and points broadcast from ghost image + const onGhostClick = (newPosition) => { + socket.to(currentRoom).emit('socket ghost click', newPosition); + }; + + const onGhostPoints = () => { + socket.to(currentRoom).emit('socket ghost points'); + }; // When one user is hovering over Join Us, a second user clicks on "DONT" to change text to "I SAID DONT" const onDontClick = btnClicked => { socket.to(currentRoom).emit('dont socket', btnClicked); @@ -133,6 +141,8 @@ const onConnection = socket => { socket.on('ghostStoryPoint', onGhostStoryPoint); socket.on('button text change', onImageButtonTextChange); socket.on('image hover', onImageHover); + socket.on('ghost click', onGhostClick); + socket.on('ghost points', onGhostPoints); socket.on('dont click', (btnClicked) => onDontClick(btnClicked)); socket.on('glowing object click', onGlowingObjectClick); socket.on('disconnect', onDisconnect); From 3b97cdd1277e990ae477203da4eff0234afe52a7 Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Wed, 16 Jun 2021 09:12:27 -0700 Subject: [PATCH 21/30] Feature/close room after game (#20) * socket data for five highlights challenge * make sure room goes forward if game is in progress --- __tests__/app.test.js | 11 +++++++++-- lib/socket/user-utils.js | 22 ++++++++++++++------- server.js | 42 ++++++++++++++++++++++++---------------- 3 files changed, 49 insertions(+), 26 deletions(-) diff --git a/__tests__/app.test.js b/__tests__/app.test.js index 11839d6..a692b43 100644 --- a/__tests__/app.test.js +++ b/__tests__/app.test.js @@ -5,7 +5,7 @@ const Client = require('socket.io-client'); const { addUser } = require('../lib/socket/user-utils.js'); const testUsers = {}; - +const testGames = []; jest.setTimeout(5000); describe('user room functionality', () => { let io, @@ -26,13 +26,20 @@ describe('user room functionality', () => { clientSocket4 = new Client(`http://localhost:${port}`); io.on('connection', (socket) => { - addUser(socket, testUsers); + addUser(socket, testUsers, testGames); }); clientSocket.on('connect', done); clientSocket2.on('connect', done); clientSocket3.on('connect', done); clientSocket4.on('connect', done); + + return (() => { + clientSocket.off('connect', done); + clientSocket2.off('connect', done); + clientSocket3.off('connect', done); + clientSocket4.off('connect', done); + }); }); }); diff --git a/lib/socket/user-utils.js b/lib/socket/user-utils.js index 6edea5a..a78936e 100644 --- a/lib/socket/user-utils.js +++ b/lib/socket/user-utils.js @@ -3,18 +3,26 @@ const ROOM_THRESHOLD = 3; let roomNumber = 0; let unassignedUsers = 0; -const addUser = (socket, userObj) => { - console.log(`new user in room ${roomNumber}: ${socket.id}`); +const addUser = (socket, userObj, gamesArr) => { unassignedUsers += 1; userObj[socket.id] = socket; - userObj[socket.id].room = String(roomNumber); - - if(unassignedUsers >= ROOM_THRESHOLD) { - roomNumber ++; + + console.log(String(roomNumber), gamesArr); + if (!gamesArr.includes(String(roomNumber))) { + userObj[socket.id].room = String(roomNumber); + console.log(`new user in room ${roomNumber}: ${socket.id}`); + if (unassignedUsers >= ROOM_THRESHOLD) { + roomNumber++; + unassignedUsers = 0; + } + } else { + roomNumber++; unassignedUsers = 0; + userObj[socket.id].room = String(roomNumber); + console.log(`new user in room ${roomNumber}: ${socket.id}`); } }; - + const deleteUser = (socket, userObj) => { console.log('user left: ', socket.id); delete userObj[socket.id]; diff --git a/server.js b/server.js index fb6c707..280732e 100644 --- a/server.js +++ b/server.js @@ -8,11 +8,13 @@ const io = new Server(server, { cors: true }); const PORT = process.env.PORT || 8080; const users = {}; +const games = []; + const { addUser, deleteUser } = require('./lib/socket/user-utils'); -const onConnection = socket => { +const onConnection = (socket) => { // on every connection, add a user a join that user's socket to the current room - addUser(socket, users); + addUser(socket, users, games); const currentRoom = `${users[socket.id].room}`; socket.join(currentRoom); @@ -22,38 +24,40 @@ const onConnection = socket => { // socket.to(socket.id).emit('current users', Object.keys(users)); // take in cursor movement data and broadcast to other clients - const onMovement = movementData => { + const onMovement = (movementData) => { movementData.id = socket.id; socket.broadcast.to(currentRoom).emit('moving', movementData); }; + const onGameStart = () => { + if (!games.includes(currentRoom)) games.push(currentRoom); + }; + // take in button state data and broadcast to other clients - const onButtonClick = buttonState => { + const onButtonClick = (buttonState) => { socket.broadcast.to(currentRoom).emit('socket search click', buttonState); }; // take in input from search input field - const onInputChange = inputValue => { + const onInputChange = (inputValue) => { socket.broadcast.to(currentRoom).emit('search input typing', inputValue); }; //when 'duck' is entered into search bar duck data === TRUE - const onDuckInput = duckData => { - socket.to(currentRoom).emit('duck input', duckData); - }; + const onDuckInput = (duckData) => { // take in hover data from nav links (for now) - const onHover = hoverData => { + const onHover = (hoverData) => { socket.to(currentRoom).emit('socket link hover', hoverData); }; // take in message data and emit to all clients - const onMessage = message => { + const onMessage = (message) => { socket.to(currentRoom).emit('socket message', message); }; // mission section hover - const onMissionHover = hover => { + const onMissionHover = (hover) => { socket.to(currentRoom).emit('socket mission hover', hover); }; @@ -68,7 +72,7 @@ const onConnection = socket => { }; // take in ghost icon data and emit to all clients - const onSocialIconChange = iconData => { + const onSocialIconChange = (iconData) => { socket.to(currentRoom).emit('icon change', iconData); }; @@ -78,7 +82,7 @@ const onConnection = socket => { }; //take in user click on footer to all users - const onFooterTitleClick = titleData => { + const onFooterTitleClick = (titleData) => { socket.to(currentRoom).emit('socketFooterTitleClick', titleData); }; @@ -87,12 +91,12 @@ const onConnection = socket => { socket.to(currentRoom).emit('ghostStoryFlip'); }; - const onGhostStoryPoint = points => { + const onGhostStoryPoint = (points) => { socket.broadcast.to(currentRoom).emit('socketGhostStoryPoint', points); }; //take in image gallery button data and emit to all clients - const onImageButtonTextChange = imageButtonData => { + const onImageButtonTextChange = (imageButtonData) => { socket.broadcast .to(currentRoom) .emit('button text change', imageButtonData); @@ -100,7 +104,11 @@ const onConnection = socket => { const onImageHover = imageHoverData => { socket.broadcast.to(currentRoom).emit('image hover', imageHoverData); }; - + const onGlowingObjectClick = (glowingObjectData) => { + socket.broadcast + .to(currentRoom) + .emit('socket glowing object', glowingObjectData); + //click and points broadcast from ghost image const onGhostClick = (newPosition) => { socket.to(currentRoom).emit('socket ghost click', newPosition); @@ -117,7 +125,6 @@ const onConnection = socket => { const onGlowingObjectClick = (glowingObjectData) => { socket.broadcast.to(currentRoom).emit('socket glowing object', glowingObjectData); }; - // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { deleteUser(socket, users); @@ -146,6 +153,7 @@ const onConnection = socket => { socket.on('dont click', (btnClicked) => onDontClick(btnClicked)); socket.on('glowing object click', onGlowingObjectClick); socket.on('disconnect', onDisconnect); + socket.on('game start', onGameStart); }; io.sockets.on('connection', onConnection); From fa91c97c00e7748f25e78aaf3eb0da16996b8b14 Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Wed, 16 Jun 2021 09:29:32 -0700 Subject: [PATCH 22/30] Fix/missing bracket glow function (#22) * missing curly brace * second missing curly --- server.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/server.js b/server.js index 280732e..6fda15c 100644 --- a/server.js +++ b/server.js @@ -46,6 +46,7 @@ const onConnection = (socket) => { //when 'duck' is entered into search bar duck data === TRUE const onDuckInput = (duckData) => { + }; // take in hover data from nav links (for now) const onHover = (hoverData) => { socket.to(currentRoom).emit('socket link hover', hoverData); @@ -108,7 +109,7 @@ const onConnection = (socket) => { socket.broadcast .to(currentRoom) .emit('socket glowing object', glowingObjectData); - + }; //click and points broadcast from ghost image const onGhostClick = (newPosition) => { socket.to(currentRoom).emit('socket ghost click', newPosition); @@ -121,10 +122,6 @@ const onConnection = (socket) => { const onDontClick = btnClicked => { socket.to(currentRoom).emit('dont socket', btnClicked); }; - - const onGlowingObjectClick = (glowingObjectData) => { - socket.broadcast.to(currentRoom).emit('socket glowing object', glowingObjectData); - }; // broadcast a remove cursor signal to other clients when a client disconnects, delete the user const onDisconnect = () => { deleteUser(socket, users); From 321a05c3773b59f2335cd890bf4e32ce2d658a0b Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Wed, 16 Jun 2021 10:52:33 -0700 Subject: [PATCH 23/30] Fix/user cap (#23) * missing curly brace * second missing curly * fix user cap --- lib/socket/user-utils.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/socket/user-utils.js b/lib/socket/user-utils.js index a78936e..b4a74f4 100644 --- a/lib/socket/user-utils.js +++ b/lib/socket/user-utils.js @@ -9,9 +9,8 @@ const addUser = (socket, userObj, gamesArr) => { console.log(String(roomNumber), gamesArr); if (!gamesArr.includes(String(roomNumber))) { - userObj[socket.id].room = String(roomNumber); - console.log(`new user in room ${roomNumber}: ${socket.id}`); - if (unassignedUsers >= ROOM_THRESHOLD) { + if (unassignedUsers > ROOM_THRESHOLD) { + userObj[socket.id].room = String(roomNumber); roomNumber++; unassignedUsers = 0; } @@ -19,8 +18,8 @@ const addUser = (socket, userObj, gamesArr) => { roomNumber++; unassignedUsers = 0; userObj[socket.id].room = String(roomNumber); - console.log(`new user in room ${roomNumber}: ${socket.id}`); } + console.log(`new user in room ${roomNumber}: ${socket.id}`); }; const deleteUser = (socket, userObj) => { From 8a7c4547bf27b70bd60f7b2cb9da0f92c0b8fbaf Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Wed, 16 Jun 2021 11:41:34 -0700 Subject: [PATCH 24/30] Fix/user cap 2 (#24) * missing curly brace * second missing curly * fix user cap * fix user cap again --- lib/socket/user-utils.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/socket/user-utils.js b/lib/socket/user-utils.js index b4a74f4..2ddcd02 100644 --- a/lib/socket/user-utils.js +++ b/lib/socket/user-utils.js @@ -6,23 +6,21 @@ let unassignedUsers = 0; const addUser = (socket, userObj, gamesArr) => { unassignedUsers += 1; userObj[socket.id] = socket; + userObj[socket.id].room = String(roomNumber); - console.log(String(roomNumber), gamesArr); - if (!gamesArr.includes(String(roomNumber))) { - if (unassignedUsers > ROOM_THRESHOLD) { - userObj[socket.id].room = String(roomNumber); - roomNumber++; - unassignedUsers = 0; - } - } else { + if (gamesArr.includes(String(roomNumber))) { + roomNumber++; + unassignedUsers = 0; + userObj[socket.id].room = String(Number(userObj[socket.id].room) + 1); + } else if (unassignedUsers >= ROOM_THRESHOLD) { roomNumber++; unassignedUsers = 0; - userObj[socket.id].room = String(roomNumber); } - console.log(`new user in room ${roomNumber}: ${socket.id}`); + console.log(`new user in room ${userObj[socket.id].room}: ${socket.id}`); }; const deleteUser = (socket, userObj) => { + if(unassignedUsers > 0) unassignedUsers--; console.log('user left: ', socket.id); delete userObj[socket.id]; }; From f3b08d898dfa67031befb6953989ea08d400e2a1 Mon Sep 17 00:00:00 2001 From: Julianne Vela Date: Wed, 16 Jun 2021 11:59:48 -0700 Subject: [PATCH 25/30] Dontclick2 (#25) * added dont click functionality to join us dropdown menu * added onDontClickPoints function --- server.js | 117 +++++++++++++++++++++++++++--------------------------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/server.js b/server.js index 6fda15c..d0ce388 100644 --- a/server.js +++ b/server.js @@ -13,96 +13,80 @@ const games = []; const { addUser, deleteUser } = require('./lib/socket/user-utils'); const onConnection = (socket) => { + // GAME MECHANICS // on every connection, add a user a join that user's socket to the current room addUser(socket, users, games); const currentRoom = `${users[socket.id].room}`; - socket.join(currentRoom); - socket.broadcast.to(currentRoom).emit('new user', { [socket.id]: socket.id }); - // socket.to(socket.id).emit('current users', Object.keys(users)); - // take in cursor movement data and broadcast to other clients const onMovement = (movementData) => { movementData.id = socket.id; socket.broadcast.to(currentRoom).emit('moving', movementData); }; - const onGameStart = () => { if (!games.includes(currentRoom)) games.push(currentRoom); }; + // broadcast a remove cursor signal to other clients when a client disconnects, delete the user + const onDisconnect = () => { + deleteUser(socket, users); + socket.broadcast.to(currentRoom).emit('removeCursor', socket.id); + }; + // take in chat message data and emit to all clients + const onMessage = (message) => { + socket.to(currentRoom).emit('socket message', message); + }; + + //////////////////////////////// + // SEARCH + HEADER MECHANICS // take in button state data and broadcast to other clients const onButtonClick = (buttonState) => { socket.broadcast.to(currentRoom).emit('socket search click', buttonState); }; - // take in input from search input field const onInputChange = (inputValue) => { socket.broadcast.to(currentRoom).emit('search input typing', inputValue); }; - //when 'duck' is entered into search bar duck data === TRUE const onDuckInput = (duckData) => { - + socket.to(currentRoom).emit('duck input', duckData); }; // take in hover data from nav links (for now) const onHover = (hoverData) => { socket.to(currentRoom).emit('socket link hover', hoverData); }; - - // take in message data and emit to all clients - const onMessage = (message) => { - socket.to(currentRoom).emit('socket message', message); + //take in user click on header to all users + const onHeaderClick = (clickCount) => { + socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); + }; + // When one user is hovering over Join Us, a second user clicks on "DONT" to change text to "I SAID DONT" + const onDontClick = () => { + socket.to(currentRoom).emit('SocketDontClick'); }; + //////////////////////////////// + + // MAIN BODY MECHANICS // mission section hover const onMissionHover = (hover) => { socket.to(currentRoom).emit('socket mission hover', hover); }; - - // transparent footer click - const onTransparentClick = () => { - socket.to(currentRoom).emit('socket transparent click'); - }; - - // transparent footer click points - const onTransparentPoints = () => { - socket.to(currentRoom).emit('socket transparent points'); - }; - - // take in ghost icon data and emit to all clients - const onSocialIconChange = (iconData) => { - socket.to(currentRoom).emit('icon change', iconData); - }; - - //take in user click on header to all users - const onHeaderClick = clickCount => { - socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); - }; - - //take in user click on footer to all users - const onFooterTitleClick = (titleData) => { - socket.to(currentRoom).emit('socketFooterTitleClick', titleData); - }; - // presentational event that indicates the ghost story has been flipped over by a client and should be flipped for the other clients const onGhostStoryFlip = () => { socket.to(currentRoom).emit('ghostStoryFlip'); }; - const onGhostStoryPoint = (points) => { socket.broadcast.to(currentRoom).emit('socketGhostStoryPoint', points); }; - //take in image gallery button data and emit to all clients const onImageButtonTextChange = (imageButtonData) => { socket.broadcast .to(currentRoom) .emit('button text change', imageButtonData); }; - const onImageHover = imageHoverData => { + const onImageHover = (imageHoverData) => { socket.broadcast.to(currentRoom).emit('image hover', imageHoverData); }; const onGlowingObjectClick = (glowingObjectData) => { @@ -114,43 +98,60 @@ const onConnection = (socket) => { const onGhostClick = (newPosition) => { socket.to(currentRoom).emit('socket ghost click', newPosition); }; - const onGhostPoints = () => { socket.to(currentRoom).emit('socket ghost points'); }; - // When one user is hovering over Join Us, a second user clicks on "DONT" to change text to "I SAID DONT" - const onDontClick = btnClicked => { - socket.to(currentRoom).emit('dont socket', btnClicked); + + //////////////////////////////// + + // FOOTER MECHANICS + // transparent footer click + const onTransparentClick = () => { + socket.to(currentRoom).emit('socket transparent click'); }; - // broadcast a remove cursor signal to other clients when a client disconnects, delete the user - const onDisconnect = () => { - deleteUser(socket, users); - socket.broadcast.to(currentRoom).emit('removeCursor', socket.id); + // transparent footer click points + const onTransparentPoints = () => { + socket.to(currentRoom).emit('socket transparent points'); + }; + // take in ghost icon data and emit to all clients + const onSocialIconChange = (iconData) => { + socket.to(currentRoom).emit('icon change', iconData); + }; + //take in user click on footer to all users + const onFooterTitleClick = (titleData) => { + socket.to(currentRoom).emit('socketFooterTitleClick', titleData); }; // attach functions to listeners + // GAME + CHAT MECHANICS socket.on('movement', onMovement); + socket.on('game start', onGameStart); + socket.on('disconnect', onDisconnect); + socket.on('client message', onMessage); + + // SEARCH + HEADER MECHANICS socket.on('searchSubmit', onButtonClick); socket.on('search input', onInputChange); socket.on('duck', onDuckInput); socket.on('link hover', onHover); - socket.on('client message', onMessage); - socket.on('missionHover', onMissionHover); - socket.on('transparent click', onTransparentClick); - socket.on('transparent points', onTransparentPoints); - socket.on('icon change', onSocialIconChange); socket.on('headerTextClick', onHeaderClick); - socket.on('footerTitleClick', onFooterTitleClick); + socket.on('ClientDontClick', onDontClick); + + // MAIN BODY MECHANICS + socket.on('missionHover', onMissionHover); socket.on('ghostStoryFlip', onGhostStoryFlip); socket.on('ghostStoryPoint', onGhostStoryPoint); socket.on('button text change', onImageButtonTextChange); socket.on('image hover', onImageHover); socket.on('ghost click', onGhostClick); socket.on('ghost points', onGhostPoints); - socket.on('dont click', (btnClicked) => onDontClick(btnClicked)); socket.on('glowing object click', onGlowingObjectClick); - socket.on('disconnect', onDisconnect); - socket.on('game start', onGameStart); + + // FOOTER MECHANICS + socket.on('transparent click', onTransparentClick); + socket.on('transparent points', onTransparentPoints); + socket.on('icon change', onSocialIconChange); + socket.on('footerTitleClick', onFooterTitleClick); }; io.sockets.on('connection', onConnection); From 9b618bd19c5578268c65831873ef508cadedad5a Mon Sep 17 00:00:00 2001 From: Julianne Vela Date: Wed, 16 Jun 2021 13:42:12 -0700 Subject: [PATCH 26/30] Dontclick3 (#26) * added dont click functionality to join us dropdown menu * added onDontClickPoints function * added btnClicked to client emit and socket emit to send updated values --- server.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index d0ce388..b88d8a9 100644 --- a/server.js +++ b/server.js @@ -62,8 +62,8 @@ const onConnection = (socket) => { socket.to(currentRoom).emit('socketHeaderTextClick', clickCount); }; // When one user is hovering over Join Us, a second user clicks on "DONT" to change text to "I SAID DONT" - const onDontClick = () => { - socket.to(currentRoom).emit('SocketDontClick'); + const onDontClick = (btnClicked) => { + socket.to(currentRoom).emit('SocketDontClick', btnClicked); }; //////////////////////////////// From a69588e4baefa457f2b1fc2b9068ac07b60273a7 Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Wed, 16 Jun 2021 16:28:53 -0700 Subject: [PATCH 27/30] add default user join, fiddle with other cases (#27) --- lib/socket/user-utils.js | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/socket/user-utils.js b/lib/socket/user-utils.js index 2ddcd02..f2c3dc4 100644 --- a/lib/socket/user-utils.js +++ b/lib/socket/user-utils.js @@ -1,27 +1,30 @@ const ROOM_THRESHOLD = 3; let roomNumber = 0; -let unassignedUsers = 0; +let currentUsers = 0; const addUser = (socket, userObj, gamesArr) => { - unassignedUsers += 1; + currentUsers += 1; userObj[socket.id] = socket; - userObj[socket.id].room = String(roomNumber); - + if (gamesArr.includes(String(roomNumber))) { roomNumber++; - unassignedUsers = 0; - userObj[socket.id].room = String(Number(userObj[socket.id].room) + 1); - } else if (unassignedUsers >= ROOM_THRESHOLD) { + currentUsers = 0; + userObj[socket.id].room = String(roomNumber); + } else if (currentUsers >= ROOM_THRESHOLD) { roomNumber++; - unassignedUsers = 0; + currentUsers = 0; + userObj[socket.id].room = String(roomNumber); + } else { + userObj[socket.id].room = String(roomNumber); } console.log(`new user in room ${userObj[socket.id].room}: ${socket.id}`); }; const deleteUser = (socket, userObj) => { - if(unassignedUsers > 0) unassignedUsers--; + if(currentUsers > 0) currentUsers--; console.log('user left: ', socket.id); + delete userObj[socket.id]; }; From 28c6177c5c979cbd5318f66682b8d54d5e66fe7e Mon Sep 17 00:00:00 2001 From: Cameron A Zimmerman Date: Thu, 17 Jun 2021 15:07:07 -0700 Subject: [PATCH 28/30] call finish on test end (#28) * call finish on test end * detect open handles * detect open handles for regular npm run test * try to close out http server * circumvent open handles --- __tests__/app.test.js | 34 ++++++++++++++++++++++------------ package.json | 4 ++-- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/__tests__/app.test.js b/__tests__/app.test.js index a692b43..2cba90b 100644 --- a/__tests__/app.test.js +++ b/__tests__/app.test.js @@ -6,16 +6,20 @@ const { addUser } = require('../lib/socket/user-utils.js'); const testUsers = {}; const testGames = []; -jest.setTimeout(5000); +jest.setTimeout(15000); describe('user room functionality', () => { let io, clientSocket, clientSocket2, clientSocket3, - clientSocket4; + clientSocket4, + httpServer; + beforeAll(async () => { + httpServer = await createServer(); + }); beforeAll((done) => { - const httpServer = createServer(); + io = new Server(httpServer); httpServer.listen(() => { const port = httpServer.address().port; @@ -23,7 +27,6 @@ describe('user room functionality', () => { clientSocket2 = new Client(`http://localhost:${port}`); clientSocket3 = new Client(`http://localhost:${port}`); clientSocket4 = new Client(`http://localhost:${port}`); - clientSocket4 = new Client(`http://localhost:${port}`); io.on('connection', (socket) => { addUser(socket, testUsers, testGames); @@ -43,22 +46,29 @@ describe('user room functionality', () => { }); }); - afterAll(() => { - io.close(); - clientSocket.close(); - clientSocket2.close(); - clientSocket3.close(); - clientSocket4.close(); + afterAll(async () => { + await io.close(); + await clientSocket.close(); + await clientSocket2.close(); + await clientSocket3.close(); + await clientSocket4.close(); + await httpServer.close(); + }); + + afterAll(async () => { + await new Promise(resolve => setTimeout(() => resolve(), 10000)); // avoid jest open handle error }); - test('first client should be in room 0', () => { + test('first client should be in room 0', (finish) => { const usersArr = Object.values(testUsers); expect(usersArr[1].room).toBe('0'); + finish(); }); - test('final client should be in room 1', () => { + test('final client should be in room 1', (finish) => { const usersArr = Object.values(testUsers); expect(usersArr[3].room).toBe('1'); + finish(); }); }); diff --git a/package.json b/package.json index 3c96be0..3520998 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "", "main": "server.js", "scripts": { - "test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose --runInBand --testLocationInResults --setupFiles dotenv/config", - "test:watch": "npm run test -- --watch", + "test": "NODE_OPTIONS=--experimental-vm-modules jest --verbose --runInBand --testLocationInResults --setupFiles dotenv/config --detectOpenHandles", + "test:watch": "npm run test -- --watch --detectOpenHandles", "start": "node -r dotenv/config server.js", "start:watch": "nodemon -r dotenv/config server.js" }, From 846e0aafd3ece35a08f6e10aa666d07c76833515 Mon Sep 17 00:00:00 2001 From: Katrina Cloyd Date: Thu, 17 Jun 2021 15:23:00 -0700 Subject: [PATCH 29/30] add image, links, and description to readme (#29) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Katrina Cloyd <‘Katrina.cloyd@yahoo.com’> --- README.md | 13 +++++++++---- public/readmeImg.png | Bin 0 -> 282820 bytes 2 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 public/readmeImg.png diff --git a/README.md b/README.md index 10c371d..f70b7b9 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,13 @@ _"Commited to providing the best industrial supplies for your company"_ _One day, while cleaning the server trays, a kind young soul was thrust into a strange fate.. Their soul now lives within the server and needs your help to be set free..._ -The repository for the front end can be found [here](https://github.com/GIM-LLC/GIM) +GIM LLC is an escape room inspired website where players work together to find clues to free the ghost! +Server side built using node.js, express, and socket.io for player interactivity. + +The repository for the front end can be found [here](https://github.com/GIM-LLC/GIM-server). + +![alt text](public/readmeImg.png) ### Group Members - Katrina Cloyd [GitHub](https://github.com/KatrinaCloyd) | [LinkedIn](https://www.linkedin.com/in/katrinacloyd/) @@ -19,10 +24,10 @@ The repository for the front end can be found [here](https://github.com/GIM-LLC/ - Cameron Zimmerman [GitHub](https://github.com/CameronZimmerman) | [LinkedIn](https://www.linkedin.com/in/cameron-zimmerman/) -## add actual netlify and heroku sites here -GIM, LLC is hosted on [Netlify]() +## delpoyed site links +GIM, LLC is hosted on [Netlify](https://www.escapegim.com/) -The GIM, LLC server is hosted on [Heroku]() +The GIM, LLC server is hosted on [Heroku](https://gim-server.herokuapp.com) Project planning can be seen on our [Miro board](https://miro.com/app/board/o9J_lA3sn-w=/?utm_source=notification&utm_medium=email&utm_campaign=daily-updates&utm_content=go-to-board). \ No newline at end of file diff --git a/public/readmeImg.png b/public/readmeImg.png new file mode 100644 index 0000000000000000000000000000000000000000..b0edc0e68ce77848b22aa276dfd81d2107417185 GIT binary patch literal 282820 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 Date: Fri, 18 Jun 2021 09:20:54 -0700 Subject: [PATCH 30/30] server refactor and comments (#31) --- lib/socket/user-utils.js | 22 +++++++++++++++------- server.js | 5 ++++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/lib/socket/user-utils.js b/lib/socket/user-utils.js index f2c3dc4..991ea41 100644 --- a/lib/socket/user-utils.js +++ b/lib/socket/user-utils.js @@ -1,30 +1,38 @@ const ROOM_THRESHOLD = 3; +// track current room, and number of connected users in the current room let roomNumber = 0; let currentUsers = 0; +//step to the next room, and set current users back to 0 +const incrementRoom = () => { + roomNumber++; + currentUsers = 0; +}; + +//called whenever there is a new socket connection const addUser = (socket, userObj, gamesArr) => { + //keep an ongoing record of how many users are in a given room, and each user globally currentUsers += 1; userObj[socket.id] = socket; + //does the current room have an ongoing game? if so join the next room if (gamesArr.includes(String(roomNumber))) { - roomNumber++; - currentUsers = 0; + incrementRoom(); userObj[socket.id].room = String(roomNumber); + // if there is no ongoing game, but we have exceeded the max room size join the next room } else if (currentUsers >= ROOM_THRESHOLD) { - roomNumber++; - currentUsers = 0; + incrementRoom(); userObj[socket.id].room = String(roomNumber); + // if there's no ongoing game, and enough spaces in the room join this current room } else { userObj[socket.id].room = String(roomNumber); } - console.log(`new user in room ${userObj[socket.id].room}: ${socket.id}`); }; +// called once a user disconnects, remove their tracked socket and decrement current users in the room const deleteUser = (socket, userObj) => { if(currentUsers > 0) currentUsers--; - console.log('user left: ', socket.id); - delete userObj[socket.id]; }; diff --git a/server.js b/server.js index b88d8a9..e637f98 100644 --- a/server.js +++ b/server.js @@ -7,6 +7,7 @@ const io = new Server(server, { cors: true }); const PORT = process.env.PORT || 8080; +//global state management for active users and ongoing games const users = {}; const games = []; @@ -19,12 +20,13 @@ const onConnection = (socket) => { const currentRoom = `${users[socket.id].room}`; socket.join(currentRoom); socket.broadcast.to(currentRoom).emit('new user', { [socket.id]: socket.id }); - // socket.to(socket.id).emit('current users', Object.keys(users)); + // take in cursor movement data and broadcast to other clients const onMovement = (movementData) => { movementData.id = socket.id; socket.broadcast.to(currentRoom).emit('moving', movementData); }; + // once game has started, add to ongoing games state const onGameStart = () => { if (!games.includes(currentRoom)) games.push(currentRoom); }; @@ -154,6 +156,7 @@ const onConnection = (socket) => { socket.on('footerTitleClick', onFooterTitleClick); }; +//runs when a client connects io.sockets.on('connection', onConnection); server.listen(PORT, () => {