├── .gitignore ├── config ├── prod.env └── dev.env ├── public └── index.html ├── examples ├── example-client1.js ├── example-client2.js └── signaling-channel.js ├── LICENSE ├── package.json ├── server.js ├── README.md └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /config/prod.env: -------------------------------------------------------------------------------- 1 | TOKEN="SIGNALING123" -------------------------------------------------------------------------------- /config/dev.env: -------------------------------------------------------------------------------- 1 | PORT=3030 2 | NODE_ENV=development 3 | TOKEN="SIGNALING123" -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | WebRTC Signaling Server 7 | 8 | 9 |

Running well

10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /examples/example-client1.js: -------------------------------------------------------------------------------- 1 | const SignalingChannel = require("./signaling-channel"); 2 | const peerId = "testPeer1"; 3 | // Where the signaling server is hosted, for a local server the port must match the one set in the .env files inside the config directory 4 | const port = process.env.PORT || 3030; 5 | const signalingServerUrl = "http://localhost:" + port; 6 | // Token must match the value defined in the .env filed inside the config directory 7 | const token = "SIGNALING123"; 8 | 9 | const channel = new SignalingChannel(peerId, signalingServerUrl, token); 10 | channel.onMessage = (message) => { 11 | console.log(message); 12 | }; 13 | channel.connect(); 14 | channel.send("Hello from the first peer"); 15 | channel.sendTo("testPeer2", { this: "is a test" }); 16 | -------------------------------------------------------------------------------- /examples/example-client2.js: -------------------------------------------------------------------------------- 1 | const SignalingChannel = require("./signaling-channel"); 2 | const peerId = "testPeer2"; 3 | // Where the signaling server is hosted, for a local server the port must match the one set in the .env files inside the config directory 4 | const port = process.env.PORT || 3030; 5 | const signalingServerUrl = "http://localhost:" + port; 6 | // Token must match the value defined in the .env filed inside the config directory 7 | const token = "SIGNALING123"; 8 | 9 | const channel = new SignalingChannel(peerId, signalingServerUrl, token); 10 | channel.onMessage = (message) => { 11 | console.log("A message has been recieved", message); 12 | }; 13 | channel.connect(); 14 | channel.send({ data: "1234" }); 15 | channel.sendTo("testPeer1", { this: "is not a test" }); 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Mustafa Al-Janabi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple_webrtc_signaling_server", 3 | "version": "1.0.0", 4 | "description": "WebRTC signalling server using Socket.io with option for rooms and deployment instructions", 5 | "main": "server.js", 6 | "repository": "git@github.com:aljanabim/simple_webrtc_signaling_server.git", 7 | "author": "Mustafa Al-Janabi", 8 | "license": "MIT", 9 | "scripts": { 10 | "start": "env-cmd -f ./config/prod.env node server.js", 11 | "dev": "env-cmd -f ./config/dev.env nodemon server.js", 12 | "client1": "nodemon ./examples/example-client1.js", 13 | "client2": "nodemon ./examples/example-client2.js" 14 | }, 15 | "dependencies": { 16 | "cors": "^2.8.5", 17 | "express": "^4.17.1", 18 | "sirv": "^1.0.5", 19 | "socket.io": "^4.0.1", 20 | "socket.io-client": "^4.0.1", 21 | "env-cmd": "^10.1.0" 22 | }, 23 | "devDependencies": { 24 | "nodemon": "^2.0.4" 25 | }, 26 | "keywords": [ 27 | "signaling server", 28 | "webrtc", 29 | "peer-to-peer", 30 | "signaling", 31 | "socket.io", 32 | "websocket" 33 | ], 34 | "engines": { 35 | "node": ">=14.x" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /examples/signaling-channel.js: -------------------------------------------------------------------------------- 1 | const io = require("socket.io-client"); 2 | // This is a bare minimum example of how one might setup a signaling channel as a class 3 | class SignalingChannel { 4 | constructor(peerId, signalingServerUrl, token) { 5 | this.peerId = peerId; 6 | this.socket = new io(signalingServerUrl, { 7 | auth: { token }, 8 | autoConnect: false, // disables auto connection, by default the client would connect to the server as soon as the io() object is instatiated 9 | reconnection: false, // disables auto reconnection, this can occur when for example the host server disconnects. When set to true, the client would keep trying to reconnect 10 | // for a complete list of the available options, see https://socket.io/docs/v4/client-api/#new-Manager-url-options 11 | }); 12 | this.onMessage = () => {}; 13 | } 14 | connect() { 15 | this.socket.on("connect", () => { 16 | console.log("Connected with id", this.socket.id); 17 | this.socket.emit("ready", this.peerId); 18 | }); 19 | this.socket.on("disconnect", () => { 20 | console.log("Disconnected"); 21 | }); 22 | this.socket.on("connect_error", (error) => { 23 | console.log("Connection error", error.message); 24 | }); 25 | this.socket.on("message", this.onMessage); 26 | this.socket.on("uniquenessError", (message) => { 27 | console.error(`Error: ${message.error}`); 28 | // process.exit(1); 29 | }); 30 | this.socket.connect(); 31 | } 32 | send(message) { 33 | this.socket.emit("message", { from: this.peerId, target: "all", message }); 34 | } 35 | sendTo(targetPeerId, message) { 36 | this.socket.emit("messageOne", { from: this.peerId, target: targetPeerId, message }); 37 | } 38 | disconnect() { 39 | if (this.socket) { 40 | this.socket.disconnect(); 41 | } 42 | } 43 | } 44 | 45 | module.exports = SignalingChannel; 46 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | // IMPORTS 2 | const http = require("http"); 3 | const express = require("express"); 4 | const socketio = require("socket.io"); 5 | const cors = require("cors"); 6 | const sirv = require("sirv"); 7 | 8 | // ENVIRONMENT VARIABLES 9 | const PORT = process.env.PORT || 3030; 10 | const DEV = process.env.NODE_ENV === "development"; 11 | const TOKEN = process.env.TOKEN; 12 | 13 | // SETUP SERVERS 14 | const app = express(); 15 | app.use(express.json(), cors()); 16 | const server = http.createServer(app); 17 | const io = socketio(server, { cors: {} }); 18 | 19 | // AUTHENTICATION MIDDLEWARE 20 | io.use((socket, next) => { 21 | const token = socket.handshake.auth.token; // check the auth token provided by the client upon connection 22 | if (token === TOKEN) { 23 | next(); 24 | } else { 25 | next(new Error("Authentication error")); 26 | } 27 | }); 28 | 29 | // API ENDPOINT TO DISPLAY THE CONNECTION TO THE SIGNALING SERVER 30 | let connections = {}; 31 | app.get("/connections", (req, res) => { 32 | res.json(Object.values(connections)); 33 | }); 34 | 35 | // MESSAGING LOGIC 36 | io.on("connection", (socket) => { 37 | console.log("User connected with id", socket.id); 38 | 39 | socket.on("ready", (peerId, peerType) => { 40 | // Make sure that the hostname is unique, if the hostname is already in connections, send an error and disconnect 41 | if (peerId in connections) { 42 | socket.emit("uniquenessError", { 43 | message: `${peerId} is already connected to the signalling server. Please change your peer ID and try again.`, 44 | }); 45 | socket.disconnect(true); 46 | } else { 47 | console.log(`Added ${peerId} to connections`); 48 | // Let new peer know about all exisiting peers 49 | socket.send({ from: "all", target: peerId, payload: { action: "open", connections: Object.values(connections), bePolite: false } }); // The new peer doesn't need to be polite. 50 | // Create new peer 51 | const newPeer = { socketId: socket.id, peerId, peerType }; 52 | // Updates connections object 53 | connections[peerId] = newPeer; 54 | // Let all other peers know about new peer 55 | socket.broadcast.emit("message", { 56 | from: peerId, 57 | target: "all", 58 | payload: { action: "open", connections: [newPeer], bePolite: true }, // send connections object with an array containing the only new peer and make all exisiting peers polite. 59 | }); 60 | } 61 | }); 62 | socket.on("message", (message) => { 63 | // Send message to all peers expect the sender 64 | socket.broadcast.emit("message", message); 65 | }); 66 | socket.on("messageOne", (message) => { 67 | // Send message to a specific targeted peer 68 | const { target } = message; 69 | const targetPeer = connections[target]; 70 | if (targetPeer) { 71 | io.to(targetPeer.socketId).emit("message", { ...message }); 72 | } else { 73 | console.log(`Target ${target} not found`); 74 | } 75 | }); 76 | socket.on("disconnect", () => { 77 | const disconnectingPeer = Object.values(connections).find((peer) => peer.socketId === socket.id); 78 | if (disconnectingPeer) { 79 | console.log("Disconnected", socket.id, "with peerId", disconnectingPeer.peerId); 80 | // Make all peers close their peer channels 81 | socket.broadcast.emit("message", { 82 | from: disconnectingPeer.peerId, 83 | target: "all", 84 | payload: { action: "close", message: "Peer has left the signaling server" }, 85 | }); 86 | // remove disconnecting peer from connections 87 | delete connections[disconnectingPeer.peerId]; 88 | } else { 89 | console.log(socket.id, "has disconnected"); 90 | } 91 | }); 92 | }); 93 | 94 | // SERVE STATIC FILES 95 | app.use(sirv("public", { DEV })); 96 | 97 | // RUN APP 98 | server.listen(PORT, console.log(`Listening on PORT ${PORT}`)); 99 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Simple WebRTC Signaling Server 2 | 3 | WebRTC is an evolving technology for peer-to-peer communication on the web. To establish a succesfull WebRTC connection, the peers need to exchange ICE candidates and session description protocol (SDP). This can be done using any method of data transport. Once that connection is established, the peers no longer need to stay connected to the signalling server. Read more [here](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Signaling_and_video_calling). In this repository, we will use **socket.io** to implement the simplest possible signaling logic. 4 | 5 | #### Table of Contents 6 | 7 | - [Installation](#Installation) 8 | - [Usage](#Usage) 9 | - [Examples](#Examples) 10 | - [Deployment](#Deployment) 11 | - [API](#API) 12 | 13 | ## Installation 14 | 15 | Make sure to have both [Node.js](https://nodejs.org/en/download/) and [Yarn](https://classic.yarnpkg.com/en/docs/install) installed. 16 | 17 | ```bash 18 | git clone https://github.com/aljanabim/simple_webrtc_signaling_server.git 19 | cd simple_webrtc_signaling_server 20 | yarn install 21 | ``` 22 | 23 | ## Usage 24 | 25 | The signaling server can be used in development and in production. You can use it locally to develop your WebRTC logic or deploy it on the web using your deployment service of choice (see [Deployment](##Deployment)) see Deployment. Be sure to checkout [Simple WebRTC Node.js Client](https://github.com/aljanabim/simple_webrtc_nodejs_client) for client implemenation that is compatable with the [API](##API) of this signaling server. 26 | 27 | ### Development 28 | 29 | For **development** signlaing server make sure to update the environment variables, in [/config/dev.env](/config/dev.env), according to your desires. Then run: 30 | 31 | ```bash 32 | yarn dev 33 | ``` 34 | 35 | ### Production 36 | 37 | For a **production** signaling server, run 38 | 39 | ```bash 40 | yarn start 41 | ``` 42 | 43 | ## Examples 44 | 45 | For an actual implementation of a Node.js WebRTC client that utilizes the API of this signaling server, checkout [Simple WebRTC Node.js Client](https://github.com/aljanabim/simple_webrtc_nodejs_client). Otherwise, you can find starter code for a signaling channel which interacts with the signaling server in [/examples/signaling-channel.js](/examples/signaling-channel.js). To see an **example** of how a client might utilize the signaling server as a signaling channel, run 46 | 47 | ```bash 48 | yarn client1 49 | ``` 50 | 51 | and in another terminal window run 52 | 53 | ```bash 54 | yarn client2 55 | ``` 56 | 57 | you will see console logs of what the siganling server and the clients are doing, according to the API (see below). All the code for the examples is found in the [/examples](/examples) directory. 58 | 59 | ## Deployment 60 | 61 | You can deploy this signaling server on whichever deployment service you are comfortable with, eg. Heroku, GCP, AWS, Azure, Vercel, Netlify, etc. In this section we will see an example of how to deploy the signaling server on **Heroku**. Follow these steps: 62 | 63 | 1. Do the steps in the **Prerequisites** section in [this](https://devcenter.heroku.com/articles/deploying-nodejs#prerequisites) article and come back once you are done. 64 | 2. In a terminal window run each of the following lines separately (ie. don't copy-paste all the commands at once) 65 | 66 | ```bash 67 | heroku login 68 | heroku create [name] 69 | git push heroku main 70 | heroku open 71 | ``` 72 | 73 | The `[name]` argument allows you to give your signaling server a unique name. You can leave out the `[name]` argument to let Heroku generate a random name. 74 | 75 | 3. Save the URL you get in the new browser window, which opens once you run `heroku open`, and use it as the **SIGNALING_SERVER_URL** in [/examples/signaling-channel.js](/examples/signaling-channel.js) or [Simple WebRTC Node.js Client](https://github.com/aljanabim/simple_webrtc_nodejs_client). 76 | 77 | ## API 78 | 79 | The signaling server listens to the following events 80 | 81 | 1. `"connection"`: Fired when a client sucessfully connects to the server. 82 | 2. `"disconnect"`: Fired when the client disconnects from the server. When fired, the message is broadcasted to all other peers in the following format: 83 | 84 | ```javascript 85 | { 86 | from: peerId, // the client that fired the `ready` event 87 | target: "all", // all other clients are informed 88 | payload: { action: "close", message: "Peer has left the signaling server" }, 89 | } 90 | ``` 91 | 92 | 3. `"message"`: Fired when a client sends a message to the server. When fired, the message is broadcasted to all other clients in the following message format 93 | 94 | ```javascript 95 | { 96 | from: peerId, // id of sender 97 | target: "all", // sent to all other peers, 98 | payload: message, // the content of the message 99 | } 100 | ``` 101 | 102 | 4. `"messageOne"`: Fired when a client emits a _messageOne_ event. When fired, the message is broadcasted only to the client that is specified in the message target. The message has the following format 103 | 104 | ```javascript 105 | { 106 | from: peerId, // id of sender 107 | target: targetPeerId, // id of recieving peer, 108 | payload: message, // the content of the message 109 | } 110 | ``` 111 | 112 | 5. `"ready"`: Fired when a client emits a _ready_ event. When fired, the client peerId and socketId are added to the object of connections in the server. Furthermore, a message is broadcasted to all already connected clients in the following format: 113 | 114 | ```javascript 115 | { 116 | from: peerId, // the client that fired the `ready` event 117 | target: "all", // all other clients are informed 118 | payload: { 119 | action: "open", 120 | connections: [newPeer], 121 | bePolite: true 122 | } 123 | } 124 | ``` 125 | 126 | and the connecting client recieves information about the exising connections in the following format: 127 | 128 | ```javascript 129 | { 130 | from: "all", // all other conneted clients 131 | target: peerId, // the newely connected client 132 | payload: { 133 | action: "open", 134 | connections: Object.values(connections), 135 | bePolite: false 136 | } 137 | } 138 | ``` 139 | 140 | ### Connections API 141 | 142 | The server also exposes an API Endpoint which return a JSON object containing all the connections registered in the server. It can be accessed on `[SIGNALING_SERVER_URL]/connections`. Ie. whichever URL is used to indicate where signaling server is hosted, concatenated with "/connections". For localhost at port 3000, this becomes `http://localhost:3000/connections`. 143 | 144 | --- 145 | 146 | Best of Luck with your WebRTC adventures. If you have any feedback, don't hestitate to reach out ☺. 147 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@polka/url@^1.0.0-next.9": 6 | version "1.0.0-next.12" 7 | resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.12.tgz#431ec342a7195622f86688bbda82e3166ce8cb28" 8 | integrity sha512-6RglhutqrGFMO1MNUXp95RBuYIuc8wTnMAV5MUhLmjTOy78ncwOw7RgeQ/HeymkKXRhZd0s2DNrM1rL7unk3MQ== 9 | 10 | "@sindresorhus/is@^0.14.0": 11 | version "0.14.0" 12 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 13 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 14 | 15 | "@szmarczak/http-timer@^1.1.2": 16 | version "1.1.2" 17 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 18 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 19 | dependencies: 20 | defer-to-connect "^1.0.1" 21 | 22 | "@types/component-emitter@^1.2.10": 23 | version "1.2.10" 24 | resolved "https://registry.yarnpkg.com/@types/component-emitter/-/component-emitter-1.2.10.tgz#ef5b1589b9f16544642e473db5ea5639107ef3ea" 25 | integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== 26 | 27 | "@types/cookie@^0.4.0": 28 | version "0.4.0" 29 | resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.0.tgz#14f854c0f93d326e39da6e3b6f34f7d37513d108" 30 | integrity sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg== 31 | 32 | "@types/cors@^2.8.8": 33 | version "2.8.10" 34 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" 35 | integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== 36 | 37 | "@types/node@>=10.0.0": 38 | version "15.0.2" 39 | resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.2.tgz#51e9c0920d1b45936ea04341aa3e2e58d339fb67" 40 | integrity sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA== 41 | 42 | abbrev@1: 43 | version "1.1.1" 44 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 45 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 46 | 47 | accepts@~1.3.4, accepts@~1.3.7: 48 | version "1.3.7" 49 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 50 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 51 | dependencies: 52 | mime-types "~2.1.24" 53 | negotiator "0.6.2" 54 | 55 | ansi-align@^3.0.0: 56 | version "3.0.0" 57 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" 58 | integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== 59 | dependencies: 60 | string-width "^3.0.0" 61 | 62 | ansi-regex@^4.1.0: 63 | version "4.1.0" 64 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 65 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 66 | 67 | ansi-regex@^5.0.0: 68 | version "5.0.0" 69 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 70 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 71 | 72 | ansi-styles@^4.1.0: 73 | version "4.3.0" 74 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 75 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 76 | dependencies: 77 | color-convert "^2.0.1" 78 | 79 | anymatch@~3.1.1: 80 | version "3.1.2" 81 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 82 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 83 | dependencies: 84 | normalize-path "^3.0.0" 85 | picomatch "^2.0.4" 86 | 87 | array-flatten@1.1.1: 88 | version "1.1.1" 89 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 90 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 91 | 92 | backo2@~1.0.2: 93 | version "1.0.2" 94 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 95 | integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= 96 | 97 | balanced-match@^1.0.0: 98 | version "1.0.2" 99 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 100 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 101 | 102 | base64-arraybuffer@0.1.4: 103 | version "0.1.4" 104 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" 105 | integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= 106 | 107 | base64id@2.0.0, base64id@~2.0.0: 108 | version "2.0.0" 109 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" 110 | integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== 111 | 112 | binary-extensions@^2.0.0: 113 | version "2.2.0" 114 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 115 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 116 | 117 | body-parser@1.19.0: 118 | version "1.19.0" 119 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 120 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 121 | dependencies: 122 | bytes "3.1.0" 123 | content-type "~1.0.4" 124 | debug "2.6.9" 125 | depd "~1.1.2" 126 | http-errors "1.7.2" 127 | iconv-lite "0.4.24" 128 | on-finished "~2.3.0" 129 | qs "6.7.0" 130 | raw-body "2.4.0" 131 | type-is "~1.6.17" 132 | 133 | boxen@^4.2.0: 134 | version "4.2.0" 135 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" 136 | integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== 137 | dependencies: 138 | ansi-align "^3.0.0" 139 | camelcase "^5.3.1" 140 | chalk "^3.0.0" 141 | cli-boxes "^2.2.0" 142 | string-width "^4.1.0" 143 | term-size "^2.1.0" 144 | type-fest "^0.8.1" 145 | widest-line "^3.1.0" 146 | 147 | brace-expansion@^1.1.7: 148 | version "1.1.11" 149 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 150 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 151 | dependencies: 152 | balanced-match "^1.0.0" 153 | concat-map "0.0.1" 154 | 155 | braces@~3.0.2: 156 | version "3.0.2" 157 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 158 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 159 | dependencies: 160 | fill-range "^7.0.1" 161 | 162 | bytes@3.1.0: 163 | version "3.1.0" 164 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 165 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 166 | 167 | cacheable-request@^6.0.0: 168 | version "6.1.0" 169 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 170 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 171 | dependencies: 172 | clone-response "^1.0.2" 173 | get-stream "^5.1.0" 174 | http-cache-semantics "^4.0.0" 175 | keyv "^3.0.0" 176 | lowercase-keys "^2.0.0" 177 | normalize-url "^4.1.0" 178 | responselike "^1.0.2" 179 | 180 | camelcase@^5.3.1: 181 | version "5.3.1" 182 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 183 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 184 | 185 | chalk@^3.0.0: 186 | version "3.0.0" 187 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" 188 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== 189 | dependencies: 190 | ansi-styles "^4.1.0" 191 | supports-color "^7.1.0" 192 | 193 | chokidar@^3.2.2: 194 | version "3.5.1" 195 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 196 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 197 | dependencies: 198 | anymatch "~3.1.1" 199 | braces "~3.0.2" 200 | glob-parent "~5.1.0" 201 | is-binary-path "~2.1.0" 202 | is-glob "~4.0.1" 203 | normalize-path "~3.0.0" 204 | readdirp "~3.5.0" 205 | optionalDependencies: 206 | fsevents "~2.3.1" 207 | 208 | ci-info@^2.0.0: 209 | version "2.0.0" 210 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 211 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 212 | 213 | cli-boxes@^2.2.0: 214 | version "2.2.1" 215 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 216 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 217 | 218 | clone-response@^1.0.2: 219 | version "1.0.2" 220 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 221 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 222 | dependencies: 223 | mimic-response "^1.0.0" 224 | 225 | color-convert@^2.0.1: 226 | version "2.0.1" 227 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 228 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 229 | dependencies: 230 | color-name "~1.1.4" 231 | 232 | color-name@~1.1.4: 233 | version "1.1.4" 234 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 235 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 236 | 237 | commander@^4.0.0: 238 | version "4.1.1" 239 | resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" 240 | integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== 241 | 242 | component-emitter@~1.3.0: 243 | version "1.3.0" 244 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 245 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 246 | 247 | concat-map@0.0.1: 248 | version "0.0.1" 249 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 250 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 251 | 252 | configstore@^5.0.1: 253 | version "5.0.1" 254 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 255 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 256 | dependencies: 257 | dot-prop "^5.2.0" 258 | graceful-fs "^4.1.2" 259 | make-dir "^3.0.0" 260 | unique-string "^2.0.0" 261 | write-file-atomic "^3.0.0" 262 | xdg-basedir "^4.0.0" 263 | 264 | content-disposition@0.5.3: 265 | version "0.5.3" 266 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 267 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 268 | dependencies: 269 | safe-buffer "5.1.2" 270 | 271 | content-type@~1.0.4: 272 | version "1.0.4" 273 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 274 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 275 | 276 | cookie-signature@1.0.6: 277 | version "1.0.6" 278 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 279 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 280 | 281 | cookie@0.4.0: 282 | version "0.4.0" 283 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 284 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 285 | 286 | cookie@~0.4.1: 287 | version "0.4.1" 288 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" 289 | integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== 290 | 291 | cors@^2.8.5, cors@~2.8.5: 292 | version "2.8.5" 293 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 294 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 295 | dependencies: 296 | object-assign "^4" 297 | vary "^1" 298 | 299 | cross-spawn@^7.0.0: 300 | version "7.0.3" 301 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 302 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 303 | dependencies: 304 | path-key "^3.1.0" 305 | shebang-command "^2.0.0" 306 | which "^2.0.1" 307 | 308 | crypto-random-string@^2.0.0: 309 | version "2.0.0" 310 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 311 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 312 | 313 | debug@2.6.9, debug@^2.2.0: 314 | version "2.6.9" 315 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 316 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 317 | dependencies: 318 | ms "2.0.0" 319 | 320 | debug@^3.2.6: 321 | version "3.2.7" 322 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 323 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 324 | dependencies: 325 | ms "^2.1.1" 326 | 327 | debug@~4.3.1: 328 | version "4.3.1" 329 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 330 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 331 | dependencies: 332 | ms "2.1.2" 333 | 334 | decompress-response@^3.3.0: 335 | version "3.3.0" 336 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 337 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 338 | dependencies: 339 | mimic-response "^1.0.0" 340 | 341 | deep-extend@^0.6.0: 342 | version "0.6.0" 343 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 344 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 345 | 346 | defer-to-connect@^1.0.1: 347 | version "1.1.3" 348 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 349 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 350 | 351 | depd@~1.1.2: 352 | version "1.1.2" 353 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 354 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 355 | 356 | destroy@~1.0.4: 357 | version "1.0.4" 358 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 359 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 360 | 361 | dot-prop@^5.2.0: 362 | version "5.3.0" 363 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 364 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 365 | dependencies: 366 | is-obj "^2.0.0" 367 | 368 | duplexer3@^0.1.4: 369 | version "0.1.4" 370 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 371 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 372 | 373 | ee-first@1.1.1: 374 | version "1.1.1" 375 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 376 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 377 | 378 | emoji-regex@^7.0.1: 379 | version "7.0.3" 380 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 381 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 382 | 383 | emoji-regex@^8.0.0: 384 | version "8.0.0" 385 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 386 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 387 | 388 | encodeurl@~1.0.2: 389 | version "1.0.2" 390 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 391 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 392 | 393 | end-of-stream@^1.1.0: 394 | version "1.4.4" 395 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 396 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 397 | dependencies: 398 | once "^1.4.0" 399 | 400 | engine.io-client@~5.0.0: 401 | version "5.0.1" 402 | resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-5.0.1.tgz#9470fc6655c9789c5c0aa1a0e7e7d9ae9753a798" 403 | integrity sha512-CQtGN3YwfvbxVwpPugcsHe5rHT4KgT49CEcQppNtu9N7WxbPN0MAG27lGaem7bvtCFtGNLSL+GEqXsFSz36jTg== 404 | dependencies: 405 | base64-arraybuffer "0.1.4" 406 | component-emitter "~1.3.0" 407 | debug "~4.3.1" 408 | engine.io-parser "~4.0.1" 409 | has-cors "1.1.0" 410 | parseqs "0.0.6" 411 | parseuri "0.0.6" 412 | ws "~7.4.2" 413 | yeast "0.1.2" 414 | 415 | engine.io-parser@~4.0.0, engine.io-parser@~4.0.1: 416 | version "4.0.2" 417 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-4.0.2.tgz#e41d0b3fb66f7bf4a3671d2038a154024edb501e" 418 | integrity sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg== 419 | dependencies: 420 | base64-arraybuffer "0.1.4" 421 | 422 | engine.io@~5.0.0: 423 | version "5.0.0" 424 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-5.0.0.tgz#470dc94a8a4907fa4d2cd1fa6611426afcee61bf" 425 | integrity sha512-BATIdDV3H1SrE9/u2BAotvsmjJg0t1P4+vGedImSs1lkFAtQdvk4Ev1y4LDiPF7BPWgXWEG+NDY+nLvW3UrMWw== 426 | dependencies: 427 | accepts "~1.3.4" 428 | base64id "2.0.0" 429 | cookie "~0.4.1" 430 | cors "~2.8.5" 431 | debug "~4.3.1" 432 | engine.io-parser "~4.0.0" 433 | ws "~7.4.2" 434 | 435 | env-cmd@^10.1.0: 436 | version "10.1.0" 437 | resolved "https://registry.yarnpkg.com/env-cmd/-/env-cmd-10.1.0.tgz#c7f5d3b550c9519f137fdac4dd8fb6866a8c8c4b" 438 | integrity sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA== 439 | dependencies: 440 | commander "^4.0.0" 441 | cross-spawn "^7.0.0" 442 | 443 | escape-goat@^2.0.0: 444 | version "2.1.1" 445 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 446 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 447 | 448 | escape-html@~1.0.3: 449 | version "1.0.3" 450 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 451 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 452 | 453 | etag@~1.8.1: 454 | version "1.8.1" 455 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 456 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 457 | 458 | express@^4.17.1: 459 | version "4.17.1" 460 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 461 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 462 | dependencies: 463 | accepts "~1.3.7" 464 | array-flatten "1.1.1" 465 | body-parser "1.19.0" 466 | content-disposition "0.5.3" 467 | content-type "~1.0.4" 468 | cookie "0.4.0" 469 | cookie-signature "1.0.6" 470 | debug "2.6.9" 471 | depd "~1.1.2" 472 | encodeurl "~1.0.2" 473 | escape-html "~1.0.3" 474 | etag "~1.8.1" 475 | finalhandler "~1.1.2" 476 | fresh "0.5.2" 477 | merge-descriptors "1.0.1" 478 | methods "~1.1.2" 479 | on-finished "~2.3.0" 480 | parseurl "~1.3.3" 481 | path-to-regexp "0.1.7" 482 | proxy-addr "~2.0.5" 483 | qs "6.7.0" 484 | range-parser "~1.2.1" 485 | safe-buffer "5.1.2" 486 | send "0.17.1" 487 | serve-static "1.14.1" 488 | setprototypeof "1.1.1" 489 | statuses "~1.5.0" 490 | type-is "~1.6.18" 491 | utils-merge "1.0.1" 492 | vary "~1.1.2" 493 | 494 | fill-range@^7.0.1: 495 | version "7.0.1" 496 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 497 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 498 | dependencies: 499 | to-regex-range "^5.0.1" 500 | 501 | finalhandler@~1.1.2: 502 | version "1.1.2" 503 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 504 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 505 | dependencies: 506 | debug "2.6.9" 507 | encodeurl "~1.0.2" 508 | escape-html "~1.0.3" 509 | on-finished "~2.3.0" 510 | parseurl "~1.3.3" 511 | statuses "~1.5.0" 512 | unpipe "~1.0.0" 513 | 514 | forwarded@~0.1.2: 515 | version "0.1.2" 516 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 517 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 518 | 519 | fresh@0.5.2: 520 | version "0.5.2" 521 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 522 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 523 | 524 | fsevents@~2.3.1: 525 | version "2.3.2" 526 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 527 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 528 | 529 | get-stream@^4.1.0: 530 | version "4.1.0" 531 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 532 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 533 | dependencies: 534 | pump "^3.0.0" 535 | 536 | get-stream@^5.1.0: 537 | version "5.2.0" 538 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 539 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 540 | dependencies: 541 | pump "^3.0.0" 542 | 543 | glob-parent@~5.1.0: 544 | version "5.1.2" 545 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 546 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 547 | dependencies: 548 | is-glob "^4.0.1" 549 | 550 | global-dirs@^2.0.1: 551 | version "2.1.0" 552 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" 553 | integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== 554 | dependencies: 555 | ini "1.3.7" 556 | 557 | got@^9.6.0: 558 | version "9.6.0" 559 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 560 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 561 | dependencies: 562 | "@sindresorhus/is" "^0.14.0" 563 | "@szmarczak/http-timer" "^1.1.2" 564 | cacheable-request "^6.0.0" 565 | decompress-response "^3.3.0" 566 | duplexer3 "^0.1.4" 567 | get-stream "^4.1.0" 568 | lowercase-keys "^1.0.1" 569 | mimic-response "^1.0.1" 570 | p-cancelable "^1.0.0" 571 | to-readable-stream "^1.0.0" 572 | url-parse-lax "^3.0.0" 573 | 574 | graceful-fs@^4.1.2: 575 | version "4.2.6" 576 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 577 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 578 | 579 | has-cors@1.1.0: 580 | version "1.1.0" 581 | resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" 582 | integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= 583 | 584 | has-flag@^3.0.0: 585 | version "3.0.0" 586 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 587 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 588 | 589 | has-flag@^4.0.0: 590 | version "4.0.0" 591 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 592 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 593 | 594 | has-yarn@^2.1.0: 595 | version "2.1.0" 596 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 597 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 598 | 599 | http-cache-semantics@^4.0.0: 600 | version "4.1.0" 601 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 602 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 603 | 604 | http-errors@1.7.2: 605 | version "1.7.2" 606 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 607 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 608 | dependencies: 609 | depd "~1.1.2" 610 | inherits "2.0.3" 611 | setprototypeof "1.1.1" 612 | statuses ">= 1.5.0 < 2" 613 | toidentifier "1.0.0" 614 | 615 | http-errors@~1.7.2: 616 | version "1.7.3" 617 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 618 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 619 | dependencies: 620 | depd "~1.1.2" 621 | inherits "2.0.4" 622 | setprototypeof "1.1.1" 623 | statuses ">= 1.5.0 < 2" 624 | toidentifier "1.0.0" 625 | 626 | iconv-lite@0.4.24: 627 | version "0.4.24" 628 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 629 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 630 | dependencies: 631 | safer-buffer ">= 2.1.2 < 3" 632 | 633 | ignore-by-default@^1.0.1: 634 | version "1.0.1" 635 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 636 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 637 | 638 | import-lazy@^2.1.0: 639 | version "2.1.0" 640 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 641 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 642 | 643 | imurmurhash@^0.1.4: 644 | version "0.1.4" 645 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 646 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 647 | 648 | inherits@2.0.3: 649 | version "2.0.3" 650 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 651 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 652 | 653 | inherits@2.0.4: 654 | version "2.0.4" 655 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 656 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 657 | 658 | ini@1.3.7: 659 | version "1.3.7" 660 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" 661 | integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== 662 | 663 | ini@~1.3.0: 664 | version "1.3.8" 665 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 666 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 667 | 668 | ipaddr.js@1.9.1: 669 | version "1.9.1" 670 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 671 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 672 | 673 | is-binary-path@~2.1.0: 674 | version "2.1.0" 675 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 676 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 677 | dependencies: 678 | binary-extensions "^2.0.0" 679 | 680 | is-ci@^2.0.0: 681 | version "2.0.0" 682 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 683 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 684 | dependencies: 685 | ci-info "^2.0.0" 686 | 687 | is-extglob@^2.1.1: 688 | version "2.1.1" 689 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 690 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 691 | 692 | is-fullwidth-code-point@^2.0.0: 693 | version "2.0.0" 694 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 695 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 696 | 697 | is-fullwidth-code-point@^3.0.0: 698 | version "3.0.0" 699 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 700 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 701 | 702 | is-glob@^4.0.1, is-glob@~4.0.1: 703 | version "4.0.1" 704 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 705 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 706 | dependencies: 707 | is-extglob "^2.1.1" 708 | 709 | is-installed-globally@^0.3.1: 710 | version "0.3.2" 711 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" 712 | integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== 713 | dependencies: 714 | global-dirs "^2.0.1" 715 | is-path-inside "^3.0.1" 716 | 717 | is-npm@^4.0.0: 718 | version "4.0.0" 719 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" 720 | integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== 721 | 722 | is-number@^7.0.0: 723 | version "7.0.0" 724 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 725 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 726 | 727 | is-obj@^2.0.0: 728 | version "2.0.0" 729 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 730 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 731 | 732 | is-path-inside@^3.0.1: 733 | version "3.0.3" 734 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 735 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 736 | 737 | is-typedarray@^1.0.0: 738 | version "1.0.0" 739 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 740 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 741 | 742 | is-yarn-global@^0.3.0: 743 | version "0.3.0" 744 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 745 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 746 | 747 | isexe@^2.0.0: 748 | version "2.0.0" 749 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 750 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 751 | 752 | json-buffer@3.0.0: 753 | version "3.0.0" 754 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 755 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 756 | 757 | keyv@^3.0.0: 758 | version "3.1.0" 759 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 760 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 761 | dependencies: 762 | json-buffer "3.0.0" 763 | 764 | latest-version@^5.0.0: 765 | version "5.1.0" 766 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 767 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 768 | dependencies: 769 | package-json "^6.3.0" 770 | 771 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 772 | version "1.0.1" 773 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 774 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 775 | 776 | lowercase-keys@^2.0.0: 777 | version "2.0.0" 778 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 779 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 780 | 781 | make-dir@^3.0.0: 782 | version "3.1.0" 783 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 784 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 785 | dependencies: 786 | semver "^6.0.0" 787 | 788 | media-typer@0.3.0: 789 | version "0.3.0" 790 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 791 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 792 | 793 | merge-descriptors@1.0.1: 794 | version "1.0.1" 795 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 796 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 797 | 798 | methods@~1.1.2: 799 | version "1.1.2" 800 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 801 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 802 | 803 | mime-db@1.47.0: 804 | version "1.47.0" 805 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" 806 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== 807 | 808 | mime-types@~2.1.24: 809 | version "2.1.30" 810 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" 811 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== 812 | dependencies: 813 | mime-db "1.47.0" 814 | 815 | mime@1.6.0: 816 | version "1.6.0" 817 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 818 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 819 | 820 | mime@^2.3.1: 821 | version "2.5.2" 822 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" 823 | integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== 824 | 825 | mimic-response@^1.0.0, mimic-response@^1.0.1: 826 | version "1.0.1" 827 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 828 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 829 | 830 | minimatch@^3.0.4: 831 | version "3.0.4" 832 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 833 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 834 | dependencies: 835 | brace-expansion "^1.1.7" 836 | 837 | minimist@^1.2.0: 838 | version "1.2.5" 839 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 840 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 841 | 842 | ms@2.0.0: 843 | version "2.0.0" 844 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 845 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 846 | 847 | ms@2.1.1: 848 | version "2.1.1" 849 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 850 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 851 | 852 | ms@2.1.2: 853 | version "2.1.2" 854 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 855 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 856 | 857 | ms@^2.1.1: 858 | version "2.1.3" 859 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 860 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 861 | 862 | negotiator@0.6.2: 863 | version "0.6.2" 864 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 865 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 866 | 867 | nodemon@^2.0.4: 868 | version "2.0.7" 869 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" 870 | integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== 871 | dependencies: 872 | chokidar "^3.2.2" 873 | debug "^3.2.6" 874 | ignore-by-default "^1.0.1" 875 | minimatch "^3.0.4" 876 | pstree.remy "^1.1.7" 877 | semver "^5.7.1" 878 | supports-color "^5.5.0" 879 | touch "^3.1.0" 880 | undefsafe "^2.0.3" 881 | update-notifier "^4.1.0" 882 | 883 | nopt@~1.0.10: 884 | version "1.0.10" 885 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 886 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 887 | dependencies: 888 | abbrev "1" 889 | 890 | normalize-path@^3.0.0, normalize-path@~3.0.0: 891 | version "3.0.0" 892 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 893 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 894 | 895 | normalize-url@^4.1.0: 896 | version "4.5.0" 897 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" 898 | integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== 899 | 900 | object-assign@^4: 901 | version "4.1.1" 902 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 903 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 904 | 905 | on-finished@~2.3.0: 906 | version "2.3.0" 907 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 908 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 909 | dependencies: 910 | ee-first "1.1.1" 911 | 912 | once@^1.3.1, once@^1.4.0: 913 | version "1.4.0" 914 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 915 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 916 | dependencies: 917 | wrappy "1" 918 | 919 | p-cancelable@^1.0.0: 920 | version "1.1.0" 921 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 922 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 923 | 924 | package-json@^6.3.0: 925 | version "6.5.0" 926 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 927 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 928 | dependencies: 929 | got "^9.6.0" 930 | registry-auth-token "^4.0.0" 931 | registry-url "^5.0.0" 932 | semver "^6.2.0" 933 | 934 | parseqs@0.0.6: 935 | version "0.0.6" 936 | resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" 937 | integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== 938 | 939 | parseuri@0.0.6: 940 | version "0.0.6" 941 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" 942 | integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== 943 | 944 | parseurl@~1.3.3: 945 | version "1.3.3" 946 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 947 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 948 | 949 | path-key@^3.1.0: 950 | version "3.1.1" 951 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 952 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 953 | 954 | path-to-regexp@0.1.7: 955 | version "0.1.7" 956 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 957 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 958 | 959 | picomatch@^2.0.4, picomatch@^2.2.1: 960 | version "2.2.3" 961 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" 962 | integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== 963 | 964 | prepend-http@^2.0.0: 965 | version "2.0.0" 966 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 967 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 968 | 969 | proxy-addr@~2.0.5: 970 | version "2.0.6" 971 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 972 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 973 | dependencies: 974 | forwarded "~0.1.2" 975 | ipaddr.js "1.9.1" 976 | 977 | pstree.remy@^1.1.7: 978 | version "1.1.8" 979 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 980 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 981 | 982 | pump@^3.0.0: 983 | version "3.0.0" 984 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 985 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 986 | dependencies: 987 | end-of-stream "^1.1.0" 988 | once "^1.3.1" 989 | 990 | pupa@^2.0.1: 991 | version "2.1.1" 992 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 993 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 994 | dependencies: 995 | escape-goat "^2.0.0" 996 | 997 | qs@6.7.0: 998 | version "6.7.0" 999 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 1000 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 1001 | 1002 | range-parser@~1.2.1: 1003 | version "1.2.1" 1004 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1005 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1006 | 1007 | raw-body@2.4.0: 1008 | version "2.4.0" 1009 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 1010 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 1011 | dependencies: 1012 | bytes "3.1.0" 1013 | http-errors "1.7.2" 1014 | iconv-lite "0.4.24" 1015 | unpipe "1.0.0" 1016 | 1017 | rc@^1.2.8: 1018 | version "1.2.8" 1019 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1020 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1021 | dependencies: 1022 | deep-extend "^0.6.0" 1023 | ini "~1.3.0" 1024 | minimist "^1.2.0" 1025 | strip-json-comments "~2.0.1" 1026 | 1027 | readdirp@~3.5.0: 1028 | version "3.5.0" 1029 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 1030 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 1031 | dependencies: 1032 | picomatch "^2.2.1" 1033 | 1034 | registry-auth-token@^4.0.0: 1035 | version "4.2.1" 1036 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 1037 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 1038 | dependencies: 1039 | rc "^1.2.8" 1040 | 1041 | registry-url@^5.0.0: 1042 | version "5.1.0" 1043 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 1044 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 1045 | dependencies: 1046 | rc "^1.2.8" 1047 | 1048 | responselike@^1.0.2: 1049 | version "1.0.2" 1050 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 1051 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 1052 | dependencies: 1053 | lowercase-keys "^1.0.0" 1054 | 1055 | safe-buffer@5.1.2: 1056 | version "5.1.2" 1057 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1058 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1059 | 1060 | "safer-buffer@>= 2.1.2 < 3": 1061 | version "2.1.2" 1062 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1063 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1064 | 1065 | semver-diff@^3.1.1: 1066 | version "3.1.1" 1067 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 1068 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 1069 | dependencies: 1070 | semver "^6.3.0" 1071 | 1072 | semver@^5.7.1: 1073 | version "5.7.1" 1074 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1075 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1076 | 1077 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 1078 | version "6.3.0" 1079 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1080 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1081 | 1082 | send@0.17.1: 1083 | version "0.17.1" 1084 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 1085 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 1086 | dependencies: 1087 | debug "2.6.9" 1088 | depd "~1.1.2" 1089 | destroy "~1.0.4" 1090 | encodeurl "~1.0.2" 1091 | escape-html "~1.0.3" 1092 | etag "~1.8.1" 1093 | fresh "0.5.2" 1094 | http-errors "~1.7.2" 1095 | mime "1.6.0" 1096 | ms "2.1.1" 1097 | on-finished "~2.3.0" 1098 | range-parser "~1.2.1" 1099 | statuses "~1.5.0" 1100 | 1101 | serve-static@1.14.1: 1102 | version "1.14.1" 1103 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 1104 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 1105 | dependencies: 1106 | encodeurl "~1.0.2" 1107 | escape-html "~1.0.3" 1108 | parseurl "~1.3.3" 1109 | send "0.17.1" 1110 | 1111 | setprototypeof@1.1.1: 1112 | version "1.1.1" 1113 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 1114 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 1115 | 1116 | shebang-command@^2.0.0: 1117 | version "2.0.0" 1118 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1119 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1120 | dependencies: 1121 | shebang-regex "^3.0.0" 1122 | 1123 | shebang-regex@^3.0.0: 1124 | version "3.0.0" 1125 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1126 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1127 | 1128 | signal-exit@^3.0.2: 1129 | version "3.0.3" 1130 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1131 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1132 | 1133 | sirv@^1.0.5: 1134 | version "1.0.11" 1135 | resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.11.tgz#81c19a29202048507d6ec0d8ba8910fda52eb5a4" 1136 | integrity sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg== 1137 | dependencies: 1138 | "@polka/url" "^1.0.0-next.9" 1139 | mime "^2.3.1" 1140 | totalist "^1.0.0" 1141 | 1142 | socket.io-adapter@~2.2.0: 1143 | version "2.2.0" 1144 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz#43af9157c4609e74b8addc6867873ac7eb48fda2" 1145 | integrity sha512-rG49L+FwaVEwuAdeBRq49M97YI3ElVabJPzvHT9S6a2CWhDKnjSFasvwAwSYPRhQzfn4NtDIbCaGYgOCOU/rlg== 1146 | 1147 | socket.io-client@^4.0.1: 1148 | version "4.0.1" 1149 | resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.0.1.tgz#8f3bf4ce9282dda1741a4ed0f726b412944e012b" 1150 | integrity sha512-6AkaEG5zrVuSVW294cH1chioag9i1OqnCYjKwTc3EBGXbnyb98Lw7yMa40ifLjFj3y6fsFKsd0llbUZUCRf3Qw== 1151 | dependencies: 1152 | "@types/component-emitter" "^1.2.10" 1153 | backo2 "~1.0.2" 1154 | component-emitter "~1.3.0" 1155 | debug "~4.3.1" 1156 | engine.io-client "~5.0.0" 1157 | parseuri "0.0.6" 1158 | socket.io-parser "~4.0.4" 1159 | 1160 | socket.io-parser@~4.0.3, socket.io-parser@~4.0.4: 1161 | version "4.0.4" 1162 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.0.4.tgz#9ea21b0d61508d18196ef04a2c6b9ab630f4c2b0" 1163 | integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== 1164 | dependencies: 1165 | "@types/component-emitter" "^1.2.10" 1166 | component-emitter "~1.3.0" 1167 | debug "~4.3.1" 1168 | 1169 | socket.io@^4.0.1: 1170 | version "4.0.1" 1171 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.0.1.tgz#d2e01cf3780d810b66182b3fbef08a04a4ccf924" 1172 | integrity sha512-g8eZB9lV0f4X4gndG0k7YZAywOg1VxYgCUspS4V+sDqsgI/duqd0AW84pKkbGj/wQwxrqrEq+VZrspRfTbHTAQ== 1173 | dependencies: 1174 | "@types/cookie" "^0.4.0" 1175 | "@types/cors" "^2.8.8" 1176 | "@types/node" ">=10.0.0" 1177 | accepts "~1.3.4" 1178 | base64id "~2.0.0" 1179 | debug "~4.3.1" 1180 | engine.io "~5.0.0" 1181 | socket.io-adapter "~2.2.0" 1182 | socket.io-parser "~4.0.3" 1183 | 1184 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 1185 | version "1.5.0" 1186 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1187 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1188 | 1189 | string-width@^3.0.0: 1190 | version "3.1.0" 1191 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1192 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1193 | dependencies: 1194 | emoji-regex "^7.0.1" 1195 | is-fullwidth-code-point "^2.0.0" 1196 | strip-ansi "^5.1.0" 1197 | 1198 | string-width@^4.0.0, string-width@^4.1.0: 1199 | version "4.2.2" 1200 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 1201 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1202 | dependencies: 1203 | emoji-regex "^8.0.0" 1204 | is-fullwidth-code-point "^3.0.0" 1205 | strip-ansi "^6.0.0" 1206 | 1207 | strip-ansi@^5.1.0: 1208 | version "5.2.0" 1209 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1210 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1211 | dependencies: 1212 | ansi-regex "^4.1.0" 1213 | 1214 | strip-ansi@^6.0.0: 1215 | version "6.0.0" 1216 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1217 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1218 | dependencies: 1219 | ansi-regex "^5.0.0" 1220 | 1221 | strip-json-comments@~2.0.1: 1222 | version "2.0.1" 1223 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1224 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1225 | 1226 | supports-color@^5.5.0: 1227 | version "5.5.0" 1228 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1229 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1230 | dependencies: 1231 | has-flag "^3.0.0" 1232 | 1233 | supports-color@^7.1.0: 1234 | version "7.2.0" 1235 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1236 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1237 | dependencies: 1238 | has-flag "^4.0.0" 1239 | 1240 | term-size@^2.1.0: 1241 | version "2.2.1" 1242 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 1243 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 1244 | 1245 | to-readable-stream@^1.0.0: 1246 | version "1.0.0" 1247 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 1248 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 1249 | 1250 | to-regex-range@^5.0.1: 1251 | version "5.0.1" 1252 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1253 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1254 | dependencies: 1255 | is-number "^7.0.0" 1256 | 1257 | toidentifier@1.0.0: 1258 | version "1.0.0" 1259 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 1260 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 1261 | 1262 | totalist@^1.0.0: 1263 | version "1.1.0" 1264 | resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" 1265 | integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== 1266 | 1267 | touch@^3.1.0: 1268 | version "3.1.0" 1269 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 1270 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 1271 | dependencies: 1272 | nopt "~1.0.10" 1273 | 1274 | type-fest@^0.8.1: 1275 | version "0.8.1" 1276 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1277 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1278 | 1279 | type-is@~1.6.17, type-is@~1.6.18: 1280 | version "1.6.18" 1281 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1282 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1283 | dependencies: 1284 | media-typer "0.3.0" 1285 | mime-types "~2.1.24" 1286 | 1287 | typedarray-to-buffer@^3.1.5: 1288 | version "3.1.5" 1289 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 1290 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 1291 | dependencies: 1292 | is-typedarray "^1.0.0" 1293 | 1294 | undefsafe@^2.0.3: 1295 | version "2.0.3" 1296 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" 1297 | integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== 1298 | dependencies: 1299 | debug "^2.2.0" 1300 | 1301 | unique-string@^2.0.0: 1302 | version "2.0.0" 1303 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 1304 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 1305 | dependencies: 1306 | crypto-random-string "^2.0.0" 1307 | 1308 | unpipe@1.0.0, unpipe@~1.0.0: 1309 | version "1.0.0" 1310 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1311 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1312 | 1313 | update-notifier@^4.1.0: 1314 | version "4.1.3" 1315 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" 1316 | integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== 1317 | dependencies: 1318 | boxen "^4.2.0" 1319 | chalk "^3.0.0" 1320 | configstore "^5.0.1" 1321 | has-yarn "^2.1.0" 1322 | import-lazy "^2.1.0" 1323 | is-ci "^2.0.0" 1324 | is-installed-globally "^0.3.1" 1325 | is-npm "^4.0.0" 1326 | is-yarn-global "^0.3.0" 1327 | latest-version "^5.0.0" 1328 | pupa "^2.0.1" 1329 | semver-diff "^3.1.1" 1330 | xdg-basedir "^4.0.0" 1331 | 1332 | url-parse-lax@^3.0.0: 1333 | version "3.0.0" 1334 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 1335 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 1336 | dependencies: 1337 | prepend-http "^2.0.0" 1338 | 1339 | utils-merge@1.0.1: 1340 | version "1.0.1" 1341 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1342 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 1343 | 1344 | vary@^1, vary@~1.1.2: 1345 | version "1.1.2" 1346 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1347 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1348 | 1349 | which@^2.0.1: 1350 | version "2.0.2" 1351 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1352 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1353 | dependencies: 1354 | isexe "^2.0.0" 1355 | 1356 | widest-line@^3.1.0: 1357 | version "3.1.0" 1358 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 1359 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 1360 | dependencies: 1361 | string-width "^4.0.0" 1362 | 1363 | wrappy@1: 1364 | version "1.0.2" 1365 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1366 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1367 | 1368 | write-file-atomic@^3.0.0: 1369 | version "3.0.3" 1370 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 1371 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 1372 | dependencies: 1373 | imurmurhash "^0.1.4" 1374 | is-typedarray "^1.0.0" 1375 | signal-exit "^3.0.2" 1376 | typedarray-to-buffer "^3.1.5" 1377 | 1378 | ws@~7.4.2: 1379 | version "7.4.5" 1380 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" 1381 | integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== 1382 | 1383 | xdg-basedir@^4.0.0: 1384 | version "4.0.0" 1385 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 1386 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 1387 | 1388 | yeast@0.1.2: 1389 | version "0.1.2" 1390 | resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" 1391 | integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= 1392 | --------------------------------------------------------------------------------