├── .gitignore ├── README.md ├── auth ├── app.js ├── oauth │ ├── model.js │ └── server.js ├── public │ ├── clientApp.html │ ├── clientAuthenticate.html │ └── oauthAuthenticate.html ├── routes │ ├── auth.js │ ├── client.js │ └── secure.js ├── tests │ ├── routes │ │ └── index.js │ └── setup.js └── utilities │ └── debug.js ├── package.json ├── resources └── images │ ├── AuthorizationCode.png │ ├── ProtectedResources.png │ └── RefreshToken.png └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ``` 2 | ___ _ _ _ ____ ___ 3 | / _ \ / \ _ _| |_| |__ |___ \ / _ \ 4 | | | | |/ _ \| | | | __| '_ \ __) || | | | 5 | | |_| / ___ \ |_| | |_| | | | / __/ | |_| | 6 | \___/_/ \_\__,_|\__|_| |_| |_____(_)___/ 7 | 8 | _____ _ 9 | | ____|_ ____ _ _ __ ___ _ __ | | ___ 10 | | _| \ \/ / _` | '_ ` _ \| '_ \| |/ _ \ 11 | | |___ > < (_| | | | | | | |_) | | __/ 12 | |_____/_/\_\__,_|_| |_| |_| .__/|_|\___| 13 | |_| 14 | ``` 15 | 16 | # Table of Contents 17 | 18 | 1. [Installation and Setup](#install) 19 | 1. [Important Links](#links) 20 | 1. [Oauth2.0 Things to Know](#thingsToKnow) 21 | - [State](#thingsToKnow-state) 22 | - [Scope](#thingsToKnow-scope) 23 | 1. [Flows](#flow) 24 | - Authorization Code Grant 25 | - [0. Overview](#flow-overview) 26 | - [1. Authorization](#flow-authorization) 27 | - [2. Token](#flow-token) 28 | - [3. Authentication](#flow-authentication) 29 | - Refresh Token 30 | - [0. Overview](#refresh-overview) 31 | 1. [Database](#database) 32 | - [Client](#database-authorization) 33 | - [User](#database-user) 34 | - [Authorization Code](#database-code) 35 | - [Token](#database-token) 36 | 1. [URL Queries](#url) 37 | - [Authorization Code](#url-code) 38 | - [Token](#url-token) 39 | - [Access Protected Resource](#url-resource) 40 | 41 | 42 | # Installation and Setup 43 | 44 | 1. Clone this Repo 45 | 1. `cd` into the project root folder, and run `yarn` 46 | - If `yarn` is not installed, install it and then run `yarn` 47 | 1. Run `yarn authServer` to boot up the oauth 2.0 server 48 | 1. Run `yarn devAuth` to boot up the oauth 2.0 server in dev mode. This will enable hot reloading when your code changes. 49 | 1. Run `yarn test` to run unit tests that cover all implemented grants 50 | - For verbose output, modify `level` in `auth/tests/setup.js` to be `DebugControl.levels.ALL` 51 | 52 | [back](#top) 53 | 54 | 55 | # Important Links 56 | Checkout 57 | [Oauth-server-github](https://github.com/oauthjs/node-oauth2-server) 58 | if you are running into any weird errors. Tutorials are seriously lacking 59 | on this implementation of the Oauth2.0 protocol as most people use 60 | an external service for it. Luckily, the errors are pretty specific, 61 | so you can go through their code to figure out what is happening. 62 | 63 | Also, if you want to see how the middleware is generated, checkout 64 | [this](https://github.com/oauthjs/express-oauth-server) 65 | to see the middleware stuff. Their examples are out of date, so 66 | ignore them. 67 | 68 | [back](#top) 69 | 70 | 71 | # Things To Know 72 | OAuth has a few parameters that are important to understand. Here is a list of good things to know: 73 | 74 | 75 | ### State 76 | State is an optional string provided by the client. It helps the client to protect against Cross Forgery requests and should not be used to transmit private data as it may be openly exposed and changed. 77 | 78 | 79 | ### Scope 80 | 81 | 82 | 83 | # Flow 84 | First, some definitions and reminders: 85 | - *Client*: The application wanting to have access to your resources 86 | - *User*: The person wanting to use your resources on the Client 87 | - *Authorization*: The process of determining whether something has access to protected resources 88 | - *Authentication*: The process of determining a person's identity. 89 | - *OAuth2.0*: A protocol outlining how authorization should happen. It is NOT an authentication library. You will need to provide that yourself. 90 | 91 | Each of the grants provide a token which enables the user to access resources like the following diagram shows: 92 | 93 | 1. Token is passed up in the authorization header 94 | 2. Oauth Server validates the token 95 | 3. Protected Resources are sent back down 96 | 97 | ![Protected Resources](/resources/images/ProtectedResources.png) 98 | 99 | [back](#top) 100 | 101 | ### Authorization Code Grant 102 | 103 | 104 | ##### 0. Overview 105 | 106 | Aight, with those out of the way, we need to cover the basic flow with the authorization code grant. 107 | 108 | 1. Authorization 109 | - Client application contacts the Server and requests access 110 | - Client application provides a client_id (unique string identifier) 111 | - Client provides a redirect uri to send the user after the code is delivered 112 | - Client may provide user data for authentication purposes 113 | - Server validates information and sends back an authorization code 114 | 2. Token 115 | - Client uses received authorization code to request a token 116 | - Client sends client_id, client_secret (if applicable) 117 | - Server validates request, and sends a token. 118 | 3. Authentication 119 | - Client uses token to gain access to Server's protected resources 120 | 121 | ![Authorization Code Grant Flow](/resources/images/AuthorizationCode.png) 122 | 123 | In the OAuth2.0 library, each of the above areas are handled within 124 | dedicated urls. Specific details on how to handle the different things 125 | are added to the `model` object within the OAuth server. 126 | 127 | Now, we will explore each of the above 3 areas in depth. 128 | 129 | [back](#top) 130 | 131 | 132 | ##### 1. Authorization 133 | 134 | After hitting the Authorization url, the following calls are made within 135 | the model object in this order: 136 | 137 | 1. `getClient`: This will extract the `client_id` from the request's query or body parameter. You can then go through and verify that the client is indeed a good client, what redirects are permitted for the Client, and what grants they have access to (in this example, just 'authorization_code'). Upon verification, return a valid Client object. 138 | - After calling `getClient`, if you passed an `authenticateHandler` to the `authorize` method call, this will then be called. If you return some non-falsy object, that object will be the User and will assume the User was able to authenticate. If you return a falsy object, we will assume that the user failed to authenticate, and must be booted. So, in short, this is where you authenticate the user. 139 | 1. `saveAuthorizationCode`: This will give you an authorization code, the retrieved Client Object from `getClient`, and the user from the `authenticateHandler`. This information needs to be stored in your database. Once stored, return the information 140 | 141 | After making the above calls, the server redirects you to the provided `redirect_uri` with the authorization code present as a url query parameter. 142 | 143 | [back](#top) 144 | 145 | 146 | ##### 2. Token 147 | 148 | After hitting the token url, the following calls are made within the model object in this order: 149 | 150 | 1. `getClient`: Same as before, but will now allow you set the `client_secret` to ensure the client is a valid client. 151 | 1. `getAuthorizationCode`: using the `authorizationCode` the client provides, look up in the database for the client, user, and code information for that code, and return it. If none, return false to stop the request as it is invalid. 152 | 1. `revokeAuthorizationCode`: using the `authorizationCode` the client provides, delete from the database where the code exists. Return true if the code was deleted, false otherwise. Each authorization code can only be used once. 153 | 1. `generateAccessToken (optional)`: using the client and user provided, generate an access token. If not provided, the library will use its in-built library to generate a token. If you want to use JWTs, this is where that would happen. 154 | 1. `saveToken`: using the client, code, and token generated earlier, save this information in the database. 155 | 156 | The token is then sent as a json response like this: 157 | ```js 158 | { 159 | access_token: "38a72b9262f931a74377dc4f8c0d1d906a89af35", 160 | token_type: "Bearer", 161 | expires_in: 86399 162 | } 163 | ``` 164 | 165 | [back](#top) 166 | 167 | 168 | ##### 3. Authentication 169 | 170 | Use the token type and token code to add an authorization header like this: `${token_type $token_code}`. This will allow the token to be transmitted securely. 171 | 172 | After hitting an authenticate url, the following calls are made within the model object in this order: 173 | 174 | 1. `getAccessToken`: using the token code provided by the client, return the token, client, and user associated with the token code. If not valid, return false. 175 | 176 | If you want to access this information in your routes, it is found in `res.locals.oauth.token`, so you immediately have access to the client and user information associated with the token. 177 | 178 | [back](#top) 179 | 180 | 181 | ### Refresh 182 | ##### Overview 183 | The refresh token flow is one of the simplest of the grants. After any successful grant flow is completed and a token is generated, a refresh token is created along-side. If the refresh token is then returned with the other information, the client will be able to use the `refresh_token` with its `client_id`, `client_secret`, and `grant_type` of refresh_token in a post to the /token route to get access to a new valid token. 184 | 185 | ![Refresh Token Gran](/resources/images/RefreshToken.png) 186 | 187 | 188 | # Database 189 | 190 | There are four tables that should be stored in the database: 191 | 192 | - Client 193 | - User 194 | - Authorization Code 195 | - Token 196 | 197 | The server will make use of the stored value in these for authorization and authentication purposes. Ideally, the database system used would be promise-based such that they can just be returned. If this is not available, you can make use of the callback parameter in each of the model functions. 198 | 199 | [back](#top) 200 | 201 | 202 | ### Client 203 | 204 | This stores information on the client. 205 | 206 | - id: unsigned long primary key auto_increment. // For Relations 207 | - client_id: String unique // Client knows 208 | - client_secret: String // Client knows 209 | - data_uris: [String] // Array of acceptable redirect locations 210 | - grants: [String] // Array of grants client has access to (authorization_code being one) 211 | 212 | [back](#top) 213 | 214 | 215 | ### User 216 | 217 | This stores information about the user. 218 | 219 | - id: unsigned long primary key auto_increment. // For Relations 220 | - Anything else you want / need for your server 221 | 222 | [back](#top) 223 | 224 | 225 | ### Authorization Code 226 | 227 | This stores information related to the authorization code 228 | 229 | - authorization_code: String primary key // string with a valid code 230 | - expires_at: Date // When the code expires 231 | - redirect_uri: String // String with a valid uri 232 | - client_id: unsigned long references Client(id) 233 | - user_id: unsigned long references User(id) 234 | 235 | [back](#top) 236 | 237 | 238 | ### Token 239 | 240 | This stores information related to your tokens 241 | 242 | - access_token: String primary key // string with a valid access token 243 | - access_token_expires_at: Date // When token expires 244 | - client_id: unsigned long references Client(id) 245 | - user_id: unsigned long references User(id) 246 | 247 | [back](#top) 248 | 249 | 250 | # URL Queries and Formatting 251 | 252 | Once everything is set up the way you want it, you are ready to start making requests to the server. As a reminder, there are three categories of requests that are possible: 253 | 254 | 1. Get Authorization Code 255 | 1. Get Token 256 | 1. Get Access to Protected Resource 257 | 258 | This section will outline how each of these requests ought to be formatted to successfully go through. 259 | 260 | [back](#top) 261 | 262 | 263 | ### Authorization Code 264 | 265 | The request for an authorization code requires the following information: 266 | 267 | - client_id // The unique string identifying a client 268 | - redirect_uri // The place to redirect after receiving the code 269 | - response_type // what the client is expecting. Should be `code` 270 | 271 | These parameters can be included within the body of a POST request, or be sent as URL Query Parameters like this: `/request/authorization?client_id=&redirect_uri=&response_type=code` 272 | 273 | You can additionally send up other information to help validate the user within the authentication handler. 274 | 275 | You know this has handled things successfully when you redirect to the uri you provided. 276 | 277 | [back](#top) 278 | 279 | 280 | ### Token 281 | 282 | The request for an access token requires the following information: 283 | 284 | - client_id // Unique string of client 285 | - client_secret (if applicable) // client secret key 286 | - grant_type // authorization_code in this example 287 | 288 | The request should additionally have the following header: 289 | 290 | `'Content-Type': 'application/x-www-form-urlencoded'` 291 | 292 | and the data should be provided within the body of a post request. 293 | 294 | This will send back a json response as outlined earlier. 295 | 296 | [back](#top) 297 | 298 | 299 | ### Access Protected Resource 300 | 301 | Requesting access to protected resources consists of making the request as usual, but adding the following header: 302 | 303 | ```js 304 | { 305 | Authorization: `${tokenType} ${token}`, 306 | } 307 | ``` 308 | 309 | with the tokenType and token coming from the json response in the token request. 310 | 311 | [back](#top) 312 | -------------------------------------------------------------------------------- /auth/app.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | 3 | const app = express() 4 | const port = 3030 5 | const bodyParser = require('body-parser') 6 | const oauthServer = require('./oauth/server.js') 7 | 8 | const DebugControl = require('./utilities/debug.js') 9 | 10 | //Here we are configuring express to use body-parser as middle-ware. 11 | app.use(bodyParser.urlencoded({ extended: false })) 12 | app.use(bodyParser.json()) 13 | app.use(DebugControl.log.request()) 14 | 15 | app.use('/client', require('./routes/client.js')) // Client routes 16 | app.use('/oauth', require('./routes/auth.js')) // routes to access the auth stuff 17 | // Note that the next router uses middleware. That protects all routes within this middleware 18 | app.use('/secure', (req,res,next) => { 19 | DebugControl.log.flow('Authentication') 20 | return next() 21 | },oauthServer.authenticate(), require('./routes/secure.js')) // routes to access the protected stuff 22 | app.use('/', (req,res) => res.redirect('/client')) 23 | 24 | 25 | app.listen(port) 26 | console.log("Oauth Server listening on port ", port) 27 | 28 | module.exports = app // For testing 29 | -------------------------------------------------------------------------------- /auth/oauth/model.js: -------------------------------------------------------------------------------- 1 | // See https://oauth2-server.readthedocs.io/en/latest/model/spec.html for what you can do with this 2 | const crypto = require('crypto') 3 | const db = { // Here is a fast overview of what your db model should look like 4 | authorizationCode: { 5 | authorizationCode: '', // A string that contains the code 6 | expiresAt: new Date(), // A date when the code expires 7 | redirectUri: '', // A string of where to redirect to with this code 8 | client: null, // See the client section 9 | user: null, // Whatever you want... This is where you can be flexible with the protocol 10 | }, 11 | client: { // Application wanting to authenticate with this server 12 | clientId: '', // Unique string representing the client 13 | clientSecret: '', // Secret of the client; Can be null 14 | grants: [], // Array of grants that the client can use (ie, `authorization_code`) 15 | redirectUris: [], // Array of urls the client is allowed to redirect to 16 | }, 17 | token: { 18 | accessToken: '', // Access token that the server created 19 | accessTokenExpiresAt: new Date(), // Date the token expires 20 | client: null, // Client associated with this token 21 | user: null, // User associated with this token 22 | }, 23 | } 24 | 25 | const DebugControl = require('../utilities/debug.js') 26 | 27 | module.exports = { 28 | getClient: function (clientId, clientSecret) { 29 | // query db for details with client 30 | log({ 31 | title: 'Get Client', 32 | parameters: [ 33 | { name: 'clientId', value: clientId }, 34 | { name: 'clientSecret', value: clientSecret }, 35 | ] 36 | }) 37 | db.client = { // Retrieved from the database 38 | clientId: clientId, 39 | clientSecret: clientSecret, 40 | grants: ['authorization_code', 'refresh_token'], 41 | redirectUris: ['http://localhost:3030/client/app'], 42 | } 43 | return new Promise(resolve => { 44 | resolve(db.client) 45 | }) 46 | }, 47 | // generateAccessToken: (client, user, scope) => { // generates access tokens 48 | // log({ 49 | // title: 'Generate Access Token', 50 | // parameters: [ 51 | // {name: 'client', value: client}, 52 | // {name: 'user', value: user}, 53 | // ], 54 | // }) 55 | // 56 | // }, 57 | saveToken: (token, client, user) => { 58 | /* This is where you insert the token into the database */ 59 | log({ 60 | title: 'Save Token', 61 | parameters: [ 62 | { name: 'token', value: token }, 63 | { name: 'client', value: client }, 64 | { name: 'user', value: user }, 65 | ], 66 | }) 67 | db.token = { 68 | accessToken: token.accessToken, 69 | accessTokenExpiresAt: token.accessTokenExpiresAt, 70 | refreshToken: token.refreshToken, // NOTE this is only needed if you need refresh tokens down the line 71 | refreshTokenExpiresAt: token.refreshTokenExpiresAt, 72 | client: client, 73 | user: user, 74 | } 75 | return new Promise(resolve => resolve(db.token)) 76 | 77 | }, 78 | getAccessToken: token => { 79 | /* This is where you select the token from the database where the code matches */ 80 | log({ 81 | title: 'Get Access Token', 82 | parameters: [ 83 | { name: 'token', value: token }, 84 | ] 85 | }) 86 | if (!token || token === 'undefined') return false 87 | return new Promise(resolve => resolve(db.token)) 88 | }, 89 | getRefreshToken: token => { 90 | /* Retrieves the token from the database */ 91 | log({ 92 | title: 'Get Refresh Token', 93 | parameters: [ 94 | { name: 'token', value: token }, 95 | ], 96 | }) 97 | DebugControl.log.variable({ name: 'db.token', value: db.token }) 98 | return new Promise(resolve => resolve(db.token)) 99 | }, 100 | revokeToken: token => { 101 | /* Delete the token from the database */ 102 | log({ 103 | title: 'Revoke Token', 104 | parameters: [ 105 | { name: 'token', value: token }, 106 | ] 107 | }) 108 | if (!token || token === 'undefined') return false 109 | return new Promise(resolve => resolve(true)) 110 | }, 111 | generateAuthorizationCode: (client, user, scope) => { 112 | /* 113 | For this to work, you are going have to hack this a little bit: 114 | 1. navigate to the node_modules folder 115 | 2. find the oauth_server folder. (node_modules/express-oauth-server/node_modules/oauth2-server) 116 | 3. open lib/handlers/authorize-handler.js 117 | 4. Make the following change (around line 136): 118 | 119 | AuthorizeHandler.prototype.generateAuthorizationCode = function (client, user, scope) { 120 | if (this.model.generateAuthorizationCode) { 121 | // Replace this 122 | //return promisify(this.model.generateAuthorizationCode).call(this.model, client, user, scope); 123 | // With this 124 | return this.model.generateAuthorizationCode(client, user, scope) 125 | } 126 | return tokenUtil.generateRandomToken(); 127 | }; 128 | */ 129 | 130 | log({ 131 | title: 'Generate Authorization Code', 132 | parameters: [ 133 | { name: 'client', value: client }, 134 | { name: 'user', value: user }, 135 | ], 136 | }) 137 | 138 | const seed = crypto.randomBytes(256) 139 | const code = crypto 140 | .createHash('sha1') 141 | .update(seed) 142 | .digest('hex') 143 | return code 144 | }, 145 | saveAuthorizationCode: (code, client, user) => { 146 | /* This is where you store the access code data into the database */ 147 | log({ 148 | title: 'Save Authorization Code', 149 | parameters: [ 150 | { name: 'code', value: code }, 151 | { name: 'client', value: client }, 152 | { name: 'user', value: user }, 153 | ], 154 | }) 155 | db.authorizationCode = { 156 | authorizationCode: code.authorizationCode, 157 | expiresAt: code.expiresAt, 158 | client: client, 159 | user: user, 160 | } 161 | return new Promise(resolve => resolve(Object.assign({ 162 | redirectUri: `${code.redirectUri}`, 163 | }, db.authorizationCode))) 164 | }, 165 | getAuthorizationCode: authorizationCode => { 166 | /* this is where we fetch the stored data from the code */ 167 | log({ 168 | title: 'Get Authorization code', 169 | parameters: [ 170 | { name: 'authorizationCode', value: authorizationCode }, 171 | ], 172 | }) 173 | return new Promise(resolve => { 174 | resolve(db.authorizationCode) 175 | }) 176 | }, 177 | revokeAuthorizationCode: authorizationCode => { 178 | /* This is where we delete codes */ 179 | log({ 180 | title: 'Revoke Authorization Code', 181 | parameters: [ 182 | { name: 'authorizationCode', value: authorizationCode }, 183 | ], 184 | }) 185 | db.authorizationCode = { // DB Delete in this in memory example :) 186 | authorizationCode: '', // A string that contains the code 187 | expiresAt: new Date(), // A date when the code expires 188 | redirectUri: '', // A string of where to redirect to with this code 189 | client: null, // See the client section 190 | user: null, // Whatever you want... This is where you can be flexible with the protocol 191 | } 192 | const codeWasFoundAndDeleted = true // Return true if code found and deleted, false otherwise 193 | return new Promise(resolve => resolve(codeWasFoundAndDeleted)) 194 | }, 195 | verifyScope: (token, scope) => { 196 | /* This is where we check to make sure the client has access to this scope */ 197 | log({ 198 | title: 'Verify Scope', 199 | parameters: [ 200 | { name: 'token', value: token }, 201 | { name: 'scope', value: scope }, 202 | ], 203 | }) 204 | const userHasAccess = true // return true if this user / client combo has access to this resource 205 | return new Promise(resolve => resolve(userHasAccess)) 206 | } 207 | } 208 | 209 | function log({ title, parameters }) { 210 | DebugControl.log.functionName(title) 211 | DebugControl.log.parameters(parameters) 212 | } 213 | -------------------------------------------------------------------------------- /auth/oauth/server.js: -------------------------------------------------------------------------------- 1 | const OAuthServer = require('express-oauth-server') 2 | const model = require('./model') 3 | 4 | module.exports = new OAuthServer({ 5 | model: model, 6 | grants: ['authorization_code', 'refresh_token'], 7 | accessTokenLifetime: 60 * 60 * 24, // 24 hours, or 1 day 8 | allowEmptyState: true, 9 | allowExtendedTokenAttributes: true, 10 | }) 11 | -------------------------------------------------------------------------------- /auth/public/clientApp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Logged In Client 6 | 7 | 8 | 9 |

Part 1: Get Token from Code

10 |

The client needs to use the provided authorization_code to get a valid token

11 | 12 |

Authorization Code:

13 |

Token:

14 |

Refresh Token:

15 |

Part 2: Access Protected Resources from Token

16 |

If the client has a valid access token, client will be able to access protected resources

17 | 18 |

Success?

19 |

Part 3: Refresh Token

20 |

If client has a valid refresh token, send it up to get a new token

21 | 22 | 23 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /auth/public/clientAuthenticate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Client Authenticate 6 | 7 | 8 | 9 |

Authentication

10 |

Client app will attempt to access oauth server authentication via oauth

11 |

For this example, the following parameters will be included in the request query parameters:

12 | 19 | Login with Oauth Server 20 | 21 | 22 | -------------------------------------------------------------------------------- /auth/public/oauthAuthenticate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | OAuth Authenticate 6 | 7 | 8 | 9 |

Authentication On Our Server

10 |
11 |

These inputs should be hidden in production

12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 |
21 | 22 | 23 |
24 |
25 | 26 | 27 |
28 |
29 | 30 | 31 |
32 |

Any other inputs are used to help validate the client, run other custom actions on the server, etc...

33 |

34 | The defaults for this will successfully login. Anything else will fail. 35 | This behavior is NOT handled by OAuth, but must be included in your middleware. 36 |

37 |
38 | 39 | 40 |
41 |
42 | 43 | 44 |
45 | 46 |
47 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /auth/routes/auth.js: -------------------------------------------------------------------------------- 1 | const path = require('path') // has path and __dirname 2 | const express = require('express') 3 | const oauthServer = require('../oauth/server.js') 4 | 5 | const DebugControl = require('../utilities/debug.js') 6 | 7 | 8 | const router = express.Router() // Instantiate a new router 9 | 10 | const filePath = path.join(__dirname, '../public/oauthAuthenticate.html') 11 | 12 | router.get('/', (req,res) => { // send back a simple form for the oauth 13 | res.sendFile(filePath) 14 | }) 15 | 16 | 17 | router.post('/authorize', (req,res,next) => { 18 | DebugControl.log.flow('Initial User Authentication') 19 | const {username, password} = req.body 20 | if(username === 'username' && password === 'password') { 21 | req.body.user = {user: 1} 22 | return next() 23 | } 24 | const params = [ // Send params back down 25 | 'client_id', 26 | 'redirect_uri', 27 | 'response_type', 28 | 'grant_type', 29 | 'state', 30 | ] 31 | .map(a => `${a}=${req.body[a]}`) 32 | .join('&') 33 | return res.redirect(`/oauth?success=false&${params}`) 34 | }, (req,res, next) => { // sends us to our redirect with an authorization code in our url 35 | DebugControl.log.flow('Authorization') 36 | return next() 37 | }, oauthServer.authorize({ 38 | authenticateHandler: { 39 | handle: req => { 40 | DebugControl.log.functionName('Authenticate Handler') 41 | DebugControl.log.parameters(Object.keys(req.body).map(k => ({name: k, value: req.body[k]}))) 42 | return req.body.user 43 | } 44 | } 45 | })) 46 | 47 | router.post('/token', (req,res,next) => { 48 | DebugControl.log.flow('Token') 49 | next() 50 | },oauthServer.token({ 51 | requireClientAuthentication: { // whether client needs to provide client_secret 52 | // 'authorization_code': false, 53 | }, 54 | })) // Sends back token 55 | 56 | 57 | module.exports = router 58 | -------------------------------------------------------------------------------- /auth/routes/client.js: -------------------------------------------------------------------------------- 1 | const path = require('path') // has path and __dirname 2 | const express = require('express') 3 | const router = express.Router() 4 | 5 | router.get('/', (req,res) => res.sendFile(path.join(__dirname, '../public/clientAuthenticate.html'))) 6 | 7 | router.get('/app', (req,res) => res.sendFile(path.join(__dirname, '../public/clientApp.html'))) 8 | 9 | module.exports = router 10 | -------------------------------------------------------------------------------- /auth/routes/secure.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const router = express.Router() // Instantiate a new router 3 | const DebugControl = require('../utilities/debug.js') 4 | 5 | router.get('/', (req,res) => { // Successfully reached if can hit this :) 6 | DebugControl.log.variable({name: 'res.locals.oauth.token', value: res.locals.oauth.token}) 7 | res.json({success: true}) 8 | }) 9 | 10 | module.exports = router 11 | -------------------------------------------------------------------------------- /auth/tests/routes/index.js: -------------------------------------------------------------------------------- 1 | let chai = require('chai') 2 | let should = require('chai').should() 3 | let chaiHttp = require('chai-http') 4 | 5 | chai.use(chaiHttp) 6 | 7 | const {server} = require('../setup.js') 8 | 9 | let validData = { 10 | code: '', 11 | tokenFrom: { 12 | code: '', 13 | refresh: '', 14 | refreshedRefresh: '', 15 | }, 16 | refreshToken: '', 17 | } 18 | 19 | const userTypes = [ 20 | {valid: true, type:'valid', username: 'username', password: 'password'}, 21 | {valid: false, type:'invalid', username: 'user', password: 'pass'}, 22 | ] 23 | 24 | describe('/oauth', () => { 25 | const base = '/oauth' 26 | describe('/', () => { 27 | const url = `${base}/authorize` 28 | describe('GET', () => { 29 | it('Should return a file', () => { 30 | return chai.request(server) 31 | .get(url) 32 | .then(res => res.status.should.equal(200)) 33 | }) 34 | }) 35 | describe('POST', () => { 36 | userTypes.forEach(user => { 37 | it(`${user.type} user should${user.valid ? '' : ' not'} send a redirect to the proper location`, () => { 38 | return chai.request(server) 39 | .post(url) 40 | .set('Content-Type', 'application/x-www-form-urlencoded') 41 | .send({ 42 | client_id: 'test_client_id', 43 | response_type: 'code', 44 | redirect_uri: 'http://localhost:3030/client/app', 45 | state: 'test_state', 46 | username: user.username, 47 | password: user.password, 48 | }) 49 | .then(res => { 50 | res.status.should.equal(200) 51 | res.redirects.should.be.an('array') 52 | res.redirects.length.should.equal(1) 53 | const newLocation = res.redirects[0] 54 | 55 | if(user.valid) { 56 | const beginning = 'http://localhost:3030/client/app?code=' 57 | newLocation.should.include(beginning) 58 | const expectedState = 'state=test_state' 59 | newLocation.should.include(expectedState) 60 | validData.code = newLocation.replace(beginning, '') 61 | validData.code.should.not.equal('') 62 | } else { 63 | newLocation.should.include('/oauth') 64 | newLocation.should.include('success=false') 65 | } 66 | }) 67 | }) 68 | }) 69 | }) 70 | }) 71 | 72 | describe('/token', () => { 73 | const url = `${base}/token` 74 | describe('POST => authorization_code', () => { 75 | it('Should return an object with a valid token', () => { 76 | return chai.request(server) 77 | .post(url) 78 | .set('Content-Type', 'application/x-www-form-urlencoded') 79 | .send({ 80 | client_id: 'test_client_id', 81 | client_secret: 'test_client_secret', 82 | grant_type: 'authorization_code', 83 | code: validData.code, 84 | }) 85 | .then(res => { 86 | validData.tokenFrom.code = `${res.body.token_type} ${res.body.access_token}` 87 | validData.refreshToken = res.body.refresh_token 88 | res.should.have.status(200) 89 | res.body.should.have.own.property('expires_in') 90 | res.body.should.have.own.property('access_token') 91 | res.body.should.have.own.property('token_type') 92 | res.body.should.have.own.property('refresh_token') 93 | res.body.access_token.should.not.be.null 94 | res.body.token_type.should.equal('Bearer') 95 | }) 96 | }) 97 | }) 98 | 99 | describe('POST => refresh_token', () => { 100 | it('Should return an object with a valid token', () => { 101 | return chai.request(server) 102 | .post(url) 103 | .set('Content-Type', 'application/x-www-form-urlencoded') 104 | .send({ 105 | client_id: 'test_client_id', 106 | client_secret: 'test_client_secret', 107 | grant_type: 'refresh_token', 108 | refresh_token: validData.refreshToken, 109 | }) 110 | .then(res => { 111 | validData.tokenFrom.refresh = `${res.body.token_type} ${res.body.access_token}` 112 | validData.refreshToken = res.body.refresh_token 113 | res.should.have.status(200) 114 | res.body.should.have.own.property('expires_in') 115 | res.body.should.have.own.property('access_token') 116 | res.body.should.have.own.property('token_type') 117 | res.body.should.have.own.property('refresh_token') 118 | res.body.access_token.should.not.be.null 119 | res.body.token_type.should.equal('Bearer') 120 | }) 121 | }) 122 | }) 123 | 124 | describe('POST => refresh_token => refresh_token', () => { 125 | it('Should return an object with a valid token', () => { 126 | return chai.request(server) 127 | .post(url) 128 | .set('Content-Type', 'application/x-www-form-urlencoded') 129 | .send({ 130 | client_id: 'test_client_id', 131 | client_secret: 'test_client_secret', 132 | grant_type: 'refresh_token', 133 | refresh_token: validData.refreshToken, 134 | }) 135 | .then(res => { 136 | validData.tokenFrom.refreshedRefresh = `${res.body.token_type} ${res.body.access_token}` 137 | res.should.have.status(200) 138 | res.body.should.have.own.property('expires_in') 139 | res.body.should.have.own.property('access_token') 140 | res.body.should.have.own.property('token_type') 141 | res.body.should.have.own.property('refresh_token') 142 | res.body.access_token.should.not.be.null 143 | res.body.token_type.should.equal('Bearer') 144 | }) 145 | }) 146 | }) 147 | }) 148 | }) 149 | 150 | describe('/secure Routes', () => { 151 | const base = '/secure' 152 | describe('GET', () => { 153 | it('Returns valid response with a token (Authorization Code)', () => { 154 | return chai.request(server) 155 | .get(base) 156 | .set('Authorization', validData.tokenFrom.code) 157 | .then(res => { 158 | res.should.have.status(200) // Unauthorized 159 | res.body.should.deep.equal({success: true}) 160 | }) 161 | }) 162 | 163 | it('Returns valid response with a token (Refresh Token)', () => { 164 | return chai.request(server) 165 | .get(base) 166 | .set('Authorization', validData.tokenFrom.refresh) 167 | .then(res => { 168 | res.should.have.status(200) // Unauthorized 169 | res.body.should.deep.equal({success: true}) 170 | }) 171 | }) 172 | 173 | it('Returns valid response with a token (Refreshed Refresh Token)', () => { 174 | return chai.request(server) 175 | .get(base) 176 | .set('Authorization', validData.tokenFrom.refreshedRefresh) 177 | .then(res => { 178 | res.should.have.status(200) // Unauthorized 179 | res.body.should.deep.equal({success: true}) 180 | }) 181 | }) 182 | 183 | it('Returns an invalid response with a bad token', () => { 184 | return chai.request(server) 185 | .get(base) 186 | .set('Authorization', '') 187 | .then(res => { 188 | res.should.have.status(401) // Unauthorized 189 | }) 190 | }) 191 | }) 192 | }) 193 | -------------------------------------------------------------------------------- /auth/tests/setup.js: -------------------------------------------------------------------------------- 1 | const DebugControl = require('../utilities/debug.js') 2 | DebugControl.setLevel(DebugControl.levels.NONE) 3 | 4 | module.exports = { 5 | server: require('../app.js') 6 | } 7 | -------------------------------------------------------------------------------- /auth/utilities/debug.js: -------------------------------------------------------------------------------- 1 | const levels = { 2 | NONE: 0, 3 | LOW: 1, 4 | MEDIUM: 2, 5 | HIGH: 3, 6 | } 7 | 8 | let level = levels.HIGH 9 | 10 | module.exports = { 11 | levels, 12 | setLevel: l => level = l, 13 | log: { 14 | parameters: parameters => { 15 | if(levels.HIGH > level) return 16 | console.group() 17 | parameters.forEach(p => console.log(`${p.name}:`, p.value)) 18 | console.groupEnd() 19 | }, 20 | functionName: name => { 21 | if(levels.MEDIUM > level) return 22 | console.log(`\nEXECUTING: ${name}\n`) 23 | }, 24 | flow: flow => { 25 | if(levels.LOW > level) return 26 | console.log(`\n\n\nBEGIN FLOW: ${flow}\n\n\n`) 27 | }, 28 | variable: ({name, value}) => { 29 | if(levels.HIGH > level) return 30 | console.group() 31 | console.group() 32 | console.log(`VARIABLE ${name}:`, value) 33 | console.groupEnd() 34 | console.groupEnd() 35 | }, 36 | request: () => (req,res,next) => { 37 | if(levels.HIGH > level) return next() 38 | console.log('Hit URL', req.url, 'with following:') 39 | console.group() 40 | console.log('Query:', req.query) 41 | console.log('Body:', req.body) 42 | console.groupEnd() 43 | return next() 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "oauthexample", 3 | "version": "1.0.0", 4 | "description": "An example of how oauth works", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "npx mocha auth/tests/**/*.js --exit", 8 | "test-dev": "nodemon --exec 'yarn test || exit 1'", 9 | "authServer": "node auth/app.js", 10 | "devAuth": "npx nodemon auth/app.js" 11 | }, 12 | "author": "Asher", 13 | "license": "ISC", 14 | "dependencies": { 15 | "body-parser": "^1.19.0", 16 | "express": "^4.17.1", 17 | "express-oauth-server": "^2.0.0", 18 | "oauth2-server": "^3.0.1" 19 | }, 20 | "devDependencies": { 21 | "chai": "^4.2.0", 22 | "chai-http": "^4.3.0", 23 | "nodemon": "^1.19.1", 24 | "mocha": "^6.1.4" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /resources/images/AuthorizationCode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/14gasher/oauth-example/e51401e7f3139f37bd28ddda4e5cf1763835bc9d/resources/images/AuthorizationCode.png -------------------------------------------------------------------------------- /resources/images/ProtectedResources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/14gasher/oauth-example/e51401e7f3139f37bd28ddda4e5cf1763835bc9d/resources/images/ProtectedResources.png -------------------------------------------------------------------------------- /resources/images/RefreshToken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/14gasher/oauth-example/e51401e7f3139f37bd28ddda4e5cf1763835bc9d/resources/images/RefreshToken.png -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/chai@4": 6 | version "4.1.7" 7 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.7.tgz#1b8e33b61a8c09cbe1f85133071baa0dbf9fa71a" 8 | integrity sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA== 9 | 10 | "@types/cookiejar@*": 11 | version "2.1.1" 12 | resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.1.tgz#90b68446364baf9efd8e8349bb36bd3852b75b80" 13 | integrity sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw== 14 | 15 | "@types/node@*": 16 | version "12.0.10" 17 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.10.tgz#51babf9c7deadd5343620055fc8aff7995c8b031" 18 | integrity sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ== 19 | 20 | "@types/superagent@^3.8.3": 21 | version "3.8.7" 22 | resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-3.8.7.tgz#1f1ed44634d5459b3a672eb7235a8e7cfd97704c" 23 | integrity sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA== 24 | dependencies: 25 | "@types/cookiejar" "*" 26 | "@types/node" "*" 27 | 28 | abbrev@1: 29 | version "1.1.1" 30 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 31 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 32 | 33 | accepts@~1.3.7: 34 | version "1.3.7" 35 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 36 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 37 | dependencies: 38 | mime-types "~2.1.24" 39 | negotiator "0.6.2" 40 | 41 | ansi-align@^2.0.0: 42 | version "2.0.0" 43 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" 44 | integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= 45 | dependencies: 46 | string-width "^2.0.0" 47 | 48 | ansi-colors@3.2.3: 49 | version "3.2.3" 50 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 51 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 52 | 53 | ansi-regex@^2.0.0: 54 | version "2.1.1" 55 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 56 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 57 | 58 | ansi-regex@^3.0.0: 59 | version "3.0.0" 60 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 61 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 62 | 63 | ansi-regex@^4.1.0: 64 | version "4.1.0" 65 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 66 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 67 | 68 | ansi-styles@^3.2.1: 69 | version "3.2.1" 70 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 71 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 72 | dependencies: 73 | color-convert "^1.9.0" 74 | 75 | anymatch@^2.0.0: 76 | version "2.0.0" 77 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" 78 | integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== 79 | dependencies: 80 | micromatch "^3.1.4" 81 | normalize-path "^2.1.1" 82 | 83 | aproba@^1.0.3: 84 | version "1.2.0" 85 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 86 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 87 | 88 | are-we-there-yet@~1.1.2: 89 | version "1.1.5" 90 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 91 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 92 | dependencies: 93 | delegates "^1.0.0" 94 | readable-stream "^2.0.6" 95 | 96 | argparse@^1.0.7: 97 | version "1.0.10" 98 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 99 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 100 | dependencies: 101 | sprintf-js "~1.0.2" 102 | 103 | arr-diff@^4.0.0: 104 | version "4.0.0" 105 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 106 | integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= 107 | 108 | arr-flatten@^1.1.0: 109 | version "1.1.0" 110 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 111 | integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== 112 | 113 | arr-union@^3.1.0: 114 | version "3.1.0" 115 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 116 | integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= 117 | 118 | array-flatten@1.1.1: 119 | version "1.1.1" 120 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 121 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 122 | 123 | array-unique@^0.3.2: 124 | version "0.3.2" 125 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 126 | integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= 127 | 128 | assertion-error@^1.1.0: 129 | version "1.1.0" 130 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 131 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 132 | 133 | assign-symbols@^1.0.0: 134 | version "1.0.0" 135 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 136 | integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= 137 | 138 | async-each@^1.0.1: 139 | version "1.0.3" 140 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" 141 | integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== 142 | 143 | asynckit@^0.4.0: 144 | version "0.4.0" 145 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 146 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 147 | 148 | atob@^2.1.1: 149 | version "2.1.2" 150 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 151 | integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 152 | 153 | balanced-match@^1.0.0: 154 | version "1.0.0" 155 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 156 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 157 | 158 | base@^0.11.1: 159 | version "0.11.2" 160 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 161 | integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== 162 | dependencies: 163 | cache-base "^1.0.1" 164 | class-utils "^0.3.5" 165 | component-emitter "^1.2.1" 166 | define-property "^1.0.0" 167 | isobject "^3.0.1" 168 | mixin-deep "^1.2.0" 169 | pascalcase "^0.1.1" 170 | 171 | basic-auth@1.1.0: 172 | version "1.1.0" 173 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884" 174 | integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ= 175 | 176 | basic-auth@^2.0.0: 177 | version "2.0.1" 178 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" 179 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== 180 | dependencies: 181 | safe-buffer "5.1.2" 182 | 183 | binary-extensions@^1.0.0: 184 | version "1.13.1" 185 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" 186 | integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== 187 | 188 | bluebird@3.5.0: 189 | version "3.5.0" 190 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" 191 | integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= 192 | 193 | bluebird@^2.10.0: 194 | version "2.11.0" 195 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" 196 | integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= 197 | 198 | bluebird@^3.0.5, bluebird@^3.5.1: 199 | version "3.5.5" 200 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" 201 | integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== 202 | 203 | body-parser@1.19.0, body-parser@^1.19.0: 204 | version "1.19.0" 205 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 206 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 207 | dependencies: 208 | bytes "3.1.0" 209 | content-type "~1.0.4" 210 | debug "2.6.9" 211 | depd "~1.1.2" 212 | http-errors "1.7.2" 213 | iconv-lite "0.4.24" 214 | on-finished "~2.3.0" 215 | qs "6.7.0" 216 | raw-body "2.4.0" 217 | type-is "~1.6.17" 218 | 219 | boxen@^1.2.1: 220 | version "1.3.0" 221 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" 222 | integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== 223 | dependencies: 224 | ansi-align "^2.0.0" 225 | camelcase "^4.0.0" 226 | chalk "^2.0.1" 227 | cli-boxes "^1.0.0" 228 | string-width "^2.0.0" 229 | term-size "^1.2.0" 230 | widest-line "^2.0.0" 231 | 232 | brace-expansion@^1.1.7: 233 | version "1.1.11" 234 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 235 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 236 | dependencies: 237 | balanced-match "^1.0.0" 238 | concat-map "0.0.1" 239 | 240 | braces@^2.3.1, braces@^2.3.2: 241 | version "2.3.2" 242 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 243 | integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== 244 | dependencies: 245 | arr-flatten "^1.1.0" 246 | array-unique "^0.3.2" 247 | extend-shallow "^2.0.1" 248 | fill-range "^4.0.0" 249 | isobject "^3.0.1" 250 | repeat-element "^1.1.2" 251 | snapdragon "^0.8.1" 252 | snapdragon-node "^2.0.1" 253 | split-string "^3.0.2" 254 | to-regex "^3.0.1" 255 | 256 | browser-stdout@1.3.1: 257 | version "1.3.1" 258 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 259 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 260 | 261 | bytes@3.1.0: 262 | version "3.1.0" 263 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 264 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 265 | 266 | cache-base@^1.0.1: 267 | version "1.0.1" 268 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 269 | integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== 270 | dependencies: 271 | collection-visit "^1.0.0" 272 | component-emitter "^1.2.1" 273 | get-value "^2.0.6" 274 | has-value "^1.0.0" 275 | isobject "^3.0.1" 276 | set-value "^2.0.0" 277 | to-object-path "^0.3.0" 278 | union-value "^1.0.0" 279 | unset-value "^1.0.0" 280 | 281 | camelcase@^4.0.0: 282 | version "4.1.0" 283 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 284 | integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= 285 | 286 | camelcase@^5.0.0: 287 | version "5.3.1" 288 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 289 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 290 | 291 | capture-stack-trace@^1.0.0: 292 | version "1.0.1" 293 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" 294 | integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== 295 | 296 | chai-http@^4.3.0: 297 | version "4.3.0" 298 | resolved "https://registry.yarnpkg.com/chai-http/-/chai-http-4.3.0.tgz#3c37c675c1f4fe685185a307e345de7599337c1a" 299 | integrity sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg== 300 | dependencies: 301 | "@types/chai" "4" 302 | "@types/superagent" "^3.8.3" 303 | cookiejar "^2.1.1" 304 | is-ip "^2.0.0" 305 | methods "^1.1.2" 306 | qs "^6.5.1" 307 | superagent "^3.7.0" 308 | 309 | chai@^4.2.0: 310 | version "4.2.0" 311 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" 312 | integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== 313 | dependencies: 314 | assertion-error "^1.1.0" 315 | check-error "^1.0.2" 316 | deep-eql "^3.0.1" 317 | get-func-name "^2.0.0" 318 | pathval "^1.1.0" 319 | type-detect "^4.0.5" 320 | 321 | chalk@^2.0.1: 322 | version "2.4.2" 323 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 324 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 325 | dependencies: 326 | ansi-styles "^3.2.1" 327 | escape-string-regexp "^1.0.5" 328 | supports-color "^5.3.0" 329 | 330 | check-error@^1.0.2: 331 | version "1.0.2" 332 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 333 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= 334 | 335 | chokidar@^2.1.5: 336 | version "2.1.6" 337 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" 338 | integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== 339 | dependencies: 340 | anymatch "^2.0.0" 341 | async-each "^1.0.1" 342 | braces "^2.3.2" 343 | glob-parent "^3.1.0" 344 | inherits "^2.0.3" 345 | is-binary-path "^1.0.0" 346 | is-glob "^4.0.0" 347 | normalize-path "^3.0.0" 348 | path-is-absolute "^1.0.0" 349 | readdirp "^2.2.1" 350 | upath "^1.1.1" 351 | optionalDependencies: 352 | fsevents "^1.2.7" 353 | 354 | chownr@^1.1.1: 355 | version "1.1.1" 356 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 357 | integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== 358 | 359 | ci-info@^1.5.0: 360 | version "1.6.0" 361 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" 362 | integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== 363 | 364 | class-utils@^0.3.5: 365 | version "0.3.6" 366 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 367 | integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== 368 | dependencies: 369 | arr-union "^3.1.0" 370 | define-property "^0.2.5" 371 | isobject "^3.0.0" 372 | static-extend "^0.1.1" 373 | 374 | cli-boxes@^1.0.0: 375 | version "1.0.0" 376 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 377 | integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= 378 | 379 | cliui@^4.0.0: 380 | version "4.1.0" 381 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" 382 | integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== 383 | dependencies: 384 | string-width "^2.1.1" 385 | strip-ansi "^4.0.0" 386 | wrap-ansi "^2.0.0" 387 | 388 | co-bluebird@^1.1.0: 389 | version "1.1.0" 390 | resolved "https://registry.yarnpkg.com/co-bluebird/-/co-bluebird-1.1.0.tgz#c8b9f3a9320a7ed30987dcca1a5c3cff59655c7c" 391 | integrity sha1-yLnzqTIKftMJh9zKGlw8/1llXHw= 392 | dependencies: 393 | bluebird "^2.10.0" 394 | co-use "^1.1.0" 395 | 396 | co-use@^1.1.0: 397 | version "1.1.0" 398 | resolved "https://registry.yarnpkg.com/co-use/-/co-use-1.1.0.tgz#c6bb3cdf10cb735ecaa9daeeda46d725c94a4e62" 399 | integrity sha1-xrs83xDLc17Kqdru2kbXJclKTmI= 400 | 401 | code-point-at@^1.0.0: 402 | version "1.1.0" 403 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 404 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 405 | 406 | collection-visit@^1.0.0: 407 | version "1.0.0" 408 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 409 | integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= 410 | dependencies: 411 | map-visit "^1.0.0" 412 | object-visit "^1.0.0" 413 | 414 | color-convert@^1.9.0: 415 | version "1.9.3" 416 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 417 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 418 | dependencies: 419 | color-name "1.1.3" 420 | 421 | color-name@1.1.3: 422 | version "1.1.3" 423 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 424 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 425 | 426 | combined-stream@^1.0.6: 427 | version "1.0.8" 428 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 429 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 430 | dependencies: 431 | delayed-stream "~1.0.0" 432 | 433 | component-emitter@^1.2.0, component-emitter@^1.2.1: 434 | version "1.3.0" 435 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 436 | integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== 437 | 438 | concat-map@0.0.1: 439 | version "0.0.1" 440 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 441 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 442 | 443 | configstore@^3.0.0: 444 | version "3.1.2" 445 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" 446 | integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw== 447 | dependencies: 448 | dot-prop "^4.1.0" 449 | graceful-fs "^4.1.2" 450 | make-dir "^1.0.0" 451 | unique-string "^1.0.0" 452 | write-file-atomic "^2.0.0" 453 | xdg-basedir "^3.0.0" 454 | 455 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 456 | version "1.1.0" 457 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 458 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 459 | 460 | content-disposition@0.5.3: 461 | version "0.5.3" 462 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 463 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 464 | dependencies: 465 | safe-buffer "5.1.2" 466 | 467 | content-type@~1.0.4: 468 | version "1.0.4" 469 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 470 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 471 | 472 | cookie-signature@1.0.6: 473 | version "1.0.6" 474 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 475 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 476 | 477 | cookie@0.4.0: 478 | version "0.4.0" 479 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 480 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 481 | 482 | cookiejar@^2.1.0, cookiejar@^2.1.1: 483 | version "2.1.2" 484 | resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" 485 | integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== 486 | 487 | copy-descriptor@^0.1.0: 488 | version "0.1.1" 489 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 490 | integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= 491 | 492 | core-util-is@~1.0.0: 493 | version "1.0.2" 494 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 495 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 496 | 497 | create-error-class@^3.0.0: 498 | version "3.0.2" 499 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 500 | integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= 501 | dependencies: 502 | capture-stack-trace "^1.0.0" 503 | 504 | cross-spawn@^5.0.1: 505 | version "5.1.0" 506 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 507 | integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= 508 | dependencies: 509 | lru-cache "^4.0.1" 510 | shebang-command "^1.2.0" 511 | which "^1.2.9" 512 | 513 | cross-spawn@^6.0.0: 514 | version "6.0.5" 515 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 516 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 517 | dependencies: 518 | nice-try "^1.0.4" 519 | path-key "^2.0.1" 520 | semver "^5.5.0" 521 | shebang-command "^1.2.0" 522 | which "^1.2.9" 523 | 524 | crypto-random-string@^1.0.0: 525 | version "1.0.0" 526 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 527 | integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= 528 | 529 | debug@2.6.9, debug@^2.2.0, debug@^2.3.3: 530 | version "2.6.9" 531 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 532 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 533 | dependencies: 534 | ms "2.0.0" 535 | 536 | debug@3.2.6, debug@^3.1.0, debug@^3.2.6: 537 | version "3.2.6" 538 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 539 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 540 | dependencies: 541 | ms "^2.1.1" 542 | 543 | decamelize@^1.2.0: 544 | version "1.2.0" 545 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 546 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 547 | 548 | decode-uri-component@^0.2.0: 549 | version "0.2.0" 550 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 551 | integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= 552 | 553 | deep-eql@^3.0.1: 554 | version "3.0.1" 555 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 556 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 557 | dependencies: 558 | type-detect "^4.0.0" 559 | 560 | deep-extend@^0.6.0: 561 | version "0.6.0" 562 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 563 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 564 | 565 | define-properties@^1.1.2: 566 | version "1.1.3" 567 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 568 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 569 | dependencies: 570 | object-keys "^1.0.12" 571 | 572 | define-property@^0.2.5: 573 | version "0.2.5" 574 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 575 | integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= 576 | dependencies: 577 | is-descriptor "^0.1.0" 578 | 579 | define-property@^1.0.0: 580 | version "1.0.0" 581 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 582 | integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= 583 | dependencies: 584 | is-descriptor "^1.0.0" 585 | 586 | define-property@^2.0.2: 587 | version "2.0.2" 588 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 589 | integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== 590 | dependencies: 591 | is-descriptor "^1.0.2" 592 | isobject "^3.0.1" 593 | 594 | delayed-stream@~1.0.0: 595 | version "1.0.0" 596 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 597 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 598 | 599 | delegates@^1.0.0: 600 | version "1.0.0" 601 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 602 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 603 | 604 | depd@~1.1.2: 605 | version "1.1.2" 606 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 607 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 608 | 609 | destroy@~1.0.4: 610 | version "1.0.4" 611 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 612 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 613 | 614 | detect-libc@^1.0.2: 615 | version "1.0.3" 616 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 617 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 618 | 619 | diff@3.5.0: 620 | version "3.5.0" 621 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 622 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 623 | 624 | dot-prop@^4.1.0: 625 | version "4.2.0" 626 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" 627 | integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== 628 | dependencies: 629 | is-obj "^1.0.0" 630 | 631 | duplexer3@^0.1.4: 632 | version "0.1.4" 633 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 634 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 635 | 636 | ee-first@1.1.1: 637 | version "1.1.1" 638 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 639 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 640 | 641 | emoji-regex@^7.0.1: 642 | version "7.0.3" 643 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 644 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 645 | 646 | encodeurl@~1.0.2: 647 | version "1.0.2" 648 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 649 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 650 | 651 | end-of-stream@^1.1.0: 652 | version "1.4.1" 653 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 654 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 655 | dependencies: 656 | once "^1.4.0" 657 | 658 | es-abstract@^1.5.1: 659 | version "1.13.0" 660 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 661 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== 662 | dependencies: 663 | es-to-primitive "^1.2.0" 664 | function-bind "^1.1.1" 665 | has "^1.0.3" 666 | is-callable "^1.1.4" 667 | is-regex "^1.0.4" 668 | object-keys "^1.0.12" 669 | 670 | es-to-primitive@^1.2.0: 671 | version "1.2.0" 672 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 673 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== 674 | dependencies: 675 | is-callable "^1.1.4" 676 | is-date-object "^1.0.1" 677 | is-symbol "^1.0.2" 678 | 679 | escape-html@~1.0.3: 680 | version "1.0.3" 681 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 682 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 683 | 684 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 685 | version "1.0.5" 686 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 687 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 688 | 689 | esprima@^4.0.0: 690 | version "4.0.1" 691 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 692 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 693 | 694 | etag@~1.8.1: 695 | version "1.8.1" 696 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 697 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 698 | 699 | execa@^0.7.0: 700 | version "0.7.0" 701 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 702 | integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= 703 | dependencies: 704 | cross-spawn "^5.0.1" 705 | get-stream "^3.0.0" 706 | is-stream "^1.1.0" 707 | npm-run-path "^2.0.0" 708 | p-finally "^1.0.0" 709 | signal-exit "^3.0.0" 710 | strip-eof "^1.0.0" 711 | 712 | execa@^1.0.0: 713 | version "1.0.0" 714 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 715 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 716 | dependencies: 717 | cross-spawn "^6.0.0" 718 | get-stream "^4.0.0" 719 | is-stream "^1.1.0" 720 | npm-run-path "^2.0.0" 721 | p-finally "^1.0.0" 722 | signal-exit "^3.0.0" 723 | strip-eof "^1.0.0" 724 | 725 | expand-brackets@^2.1.4: 726 | version "2.1.4" 727 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 728 | integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= 729 | dependencies: 730 | debug "^2.3.3" 731 | define-property "^0.2.5" 732 | extend-shallow "^2.0.1" 733 | posix-character-classes "^0.1.0" 734 | regex-not "^1.0.0" 735 | snapdragon "^0.8.1" 736 | to-regex "^3.0.1" 737 | 738 | express-oauth-server@^2.0.0: 739 | version "2.0.0" 740 | resolved "https://registry.yarnpkg.com/express-oauth-server/-/express-oauth-server-2.0.0.tgz#57b08665c1201532f52c4c02f19709238b99a48d" 741 | integrity sha1-V7CGZcEgFTL1LEwC8ZcJI4uZpI0= 742 | dependencies: 743 | bluebird "^3.0.5" 744 | express "^4.13.3" 745 | oauth2-server "3.0.0" 746 | 747 | express@^4.13.3, express@^4.17.1: 748 | version "4.17.1" 749 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 750 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 751 | dependencies: 752 | accepts "~1.3.7" 753 | array-flatten "1.1.1" 754 | body-parser "1.19.0" 755 | content-disposition "0.5.3" 756 | content-type "~1.0.4" 757 | cookie "0.4.0" 758 | cookie-signature "1.0.6" 759 | debug "2.6.9" 760 | depd "~1.1.2" 761 | encodeurl "~1.0.2" 762 | escape-html "~1.0.3" 763 | etag "~1.8.1" 764 | finalhandler "~1.1.2" 765 | fresh "0.5.2" 766 | merge-descriptors "1.0.1" 767 | methods "~1.1.2" 768 | on-finished "~2.3.0" 769 | parseurl "~1.3.3" 770 | path-to-regexp "0.1.7" 771 | proxy-addr "~2.0.5" 772 | qs "6.7.0" 773 | range-parser "~1.2.1" 774 | safe-buffer "5.1.2" 775 | send "0.17.1" 776 | serve-static "1.14.1" 777 | setprototypeof "1.1.1" 778 | statuses "~1.5.0" 779 | type-is "~1.6.18" 780 | utils-merge "1.0.1" 781 | vary "~1.1.2" 782 | 783 | extend-shallow@^2.0.1: 784 | version "2.0.1" 785 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 786 | integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= 787 | dependencies: 788 | is-extendable "^0.1.0" 789 | 790 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 791 | version "3.0.2" 792 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 793 | integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= 794 | dependencies: 795 | assign-symbols "^1.0.0" 796 | is-extendable "^1.0.1" 797 | 798 | extend@^3.0.0: 799 | version "3.0.2" 800 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 801 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 802 | 803 | extglob@^2.0.4: 804 | version "2.0.4" 805 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 806 | integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== 807 | dependencies: 808 | array-unique "^0.3.2" 809 | define-property "^1.0.0" 810 | expand-brackets "^2.1.4" 811 | extend-shallow "^2.0.1" 812 | fragment-cache "^0.2.1" 813 | regex-not "^1.0.0" 814 | snapdragon "^0.8.1" 815 | to-regex "^3.0.1" 816 | 817 | fill-range@^4.0.0: 818 | version "4.0.0" 819 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 820 | integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= 821 | dependencies: 822 | extend-shallow "^2.0.1" 823 | is-number "^3.0.0" 824 | repeat-string "^1.6.1" 825 | to-regex-range "^2.1.0" 826 | 827 | finalhandler@~1.1.2: 828 | version "1.1.2" 829 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 830 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 831 | dependencies: 832 | debug "2.6.9" 833 | encodeurl "~1.0.2" 834 | escape-html "~1.0.3" 835 | on-finished "~2.3.0" 836 | parseurl "~1.3.3" 837 | statuses "~1.5.0" 838 | unpipe "~1.0.0" 839 | 840 | find-up@3.0.0, find-up@^3.0.0: 841 | version "3.0.0" 842 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 843 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 844 | dependencies: 845 | locate-path "^3.0.0" 846 | 847 | flat@^4.1.0: 848 | version "4.1.0" 849 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 850 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 851 | dependencies: 852 | is-buffer "~2.0.3" 853 | 854 | for-in@^1.0.2: 855 | version "1.0.2" 856 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 857 | integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= 858 | 859 | form-data@^2.3.1: 860 | version "2.4.0" 861 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.4.0.tgz#4902b831b051e0db5612a35e1a098376f7b13ad8" 862 | integrity sha512-4FinE8RfqYnNim20xDwZZE0V2kOs/AuElIjFUbPuegQSaoZM+vUT5FnwSl10KPugH4voTg1bEQlcbCG9ka75TA== 863 | dependencies: 864 | asynckit "^0.4.0" 865 | combined-stream "^1.0.6" 866 | mime-types "^2.1.12" 867 | 868 | formidable@^1.2.0: 869 | version "1.2.1" 870 | resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" 871 | integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg== 872 | 873 | forwarded@~0.1.2: 874 | version "0.1.2" 875 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 876 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 877 | 878 | fragment-cache@^0.2.1: 879 | version "0.2.1" 880 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 881 | integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= 882 | dependencies: 883 | map-cache "^0.2.2" 884 | 885 | fresh@0.5.2: 886 | version "0.5.2" 887 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 888 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 889 | 890 | fs-minipass@^1.2.5: 891 | version "1.2.6" 892 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" 893 | integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== 894 | dependencies: 895 | minipass "^2.2.1" 896 | 897 | fs.realpath@^1.0.0: 898 | version "1.0.0" 899 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 900 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 901 | 902 | fsevents@^1.2.7: 903 | version "1.2.9" 904 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" 905 | integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== 906 | dependencies: 907 | nan "^2.12.1" 908 | node-pre-gyp "^0.12.0" 909 | 910 | function-bind@^1.1.1: 911 | version "1.1.1" 912 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 913 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 914 | 915 | gauge@~2.7.3: 916 | version "2.7.4" 917 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 918 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 919 | dependencies: 920 | aproba "^1.0.3" 921 | console-control-strings "^1.0.0" 922 | has-unicode "^2.0.0" 923 | object-assign "^4.1.0" 924 | signal-exit "^3.0.0" 925 | string-width "^1.0.1" 926 | strip-ansi "^3.0.1" 927 | wide-align "^1.1.0" 928 | 929 | get-caller-file@^1.0.1: 930 | version "1.0.3" 931 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 932 | integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 933 | 934 | get-caller-file@^2.0.1: 935 | version "2.0.5" 936 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 937 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 938 | 939 | get-func-name@^2.0.0: 940 | version "2.0.0" 941 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 942 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= 943 | 944 | get-stream@^3.0.0: 945 | version "3.0.0" 946 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 947 | integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= 948 | 949 | get-stream@^4.0.0: 950 | version "4.1.0" 951 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 952 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 953 | dependencies: 954 | pump "^3.0.0" 955 | 956 | get-value@^2.0.3, get-value@^2.0.6: 957 | version "2.0.6" 958 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 959 | integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= 960 | 961 | glob-parent@^3.1.0: 962 | version "3.1.0" 963 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 964 | integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= 965 | dependencies: 966 | is-glob "^3.1.0" 967 | path-dirname "^1.0.0" 968 | 969 | glob@7.1.3: 970 | version "7.1.3" 971 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 972 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 973 | dependencies: 974 | fs.realpath "^1.0.0" 975 | inflight "^1.0.4" 976 | inherits "2" 977 | minimatch "^3.0.4" 978 | once "^1.3.0" 979 | path-is-absolute "^1.0.0" 980 | 981 | glob@^7.1.3: 982 | version "7.1.4" 983 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 984 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 985 | dependencies: 986 | fs.realpath "^1.0.0" 987 | inflight "^1.0.4" 988 | inherits "2" 989 | minimatch "^3.0.4" 990 | once "^1.3.0" 991 | path-is-absolute "^1.0.0" 992 | 993 | global-dirs@^0.1.0: 994 | version "0.1.1" 995 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" 996 | integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= 997 | dependencies: 998 | ini "^1.3.4" 999 | 1000 | got@^6.7.1: 1001 | version "6.7.1" 1002 | resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 1003 | integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= 1004 | dependencies: 1005 | create-error-class "^3.0.0" 1006 | duplexer3 "^0.1.4" 1007 | get-stream "^3.0.0" 1008 | is-redirect "^1.0.0" 1009 | is-retry-allowed "^1.0.0" 1010 | is-stream "^1.0.0" 1011 | lowercase-keys "^1.0.0" 1012 | safe-buffer "^5.0.1" 1013 | timed-out "^4.0.0" 1014 | unzip-response "^2.0.1" 1015 | url-parse-lax "^1.0.0" 1016 | 1017 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 1018 | version "4.2.0" 1019 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" 1020 | integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== 1021 | 1022 | growl@1.10.5: 1023 | version "1.10.5" 1024 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1025 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1026 | 1027 | has-flag@^3.0.0: 1028 | version "3.0.0" 1029 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1030 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1031 | 1032 | has-symbols@^1.0.0: 1033 | version "1.0.0" 1034 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 1035 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= 1036 | 1037 | has-unicode@^2.0.0: 1038 | version "2.0.1" 1039 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1040 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 1041 | 1042 | has-value@^0.3.1: 1043 | version "0.3.1" 1044 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1045 | integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= 1046 | dependencies: 1047 | get-value "^2.0.3" 1048 | has-values "^0.1.4" 1049 | isobject "^2.0.0" 1050 | 1051 | has-value@^1.0.0: 1052 | version "1.0.0" 1053 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1054 | integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= 1055 | dependencies: 1056 | get-value "^2.0.6" 1057 | has-values "^1.0.0" 1058 | isobject "^3.0.0" 1059 | 1060 | has-values@^0.1.4: 1061 | version "0.1.4" 1062 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1063 | integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= 1064 | 1065 | has-values@^1.0.0: 1066 | version "1.0.0" 1067 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1068 | integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= 1069 | dependencies: 1070 | is-number "^3.0.0" 1071 | kind-of "^4.0.0" 1072 | 1073 | has@^1.0.1, has@^1.0.3: 1074 | version "1.0.3" 1075 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1076 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1077 | dependencies: 1078 | function-bind "^1.1.1" 1079 | 1080 | he@1.2.0: 1081 | version "1.2.0" 1082 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1083 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1084 | 1085 | http-errors@1.7.2: 1086 | version "1.7.2" 1087 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 1088 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 1089 | dependencies: 1090 | depd "~1.1.2" 1091 | inherits "2.0.3" 1092 | setprototypeof "1.1.1" 1093 | statuses ">= 1.5.0 < 2" 1094 | toidentifier "1.0.0" 1095 | 1096 | http-errors@~1.7.2: 1097 | version "1.7.3" 1098 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 1099 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 1100 | dependencies: 1101 | depd "~1.1.2" 1102 | inherits "2.0.4" 1103 | setprototypeof "1.1.1" 1104 | statuses ">= 1.5.0 < 2" 1105 | toidentifier "1.0.0" 1106 | 1107 | iconv-lite@0.4.24, iconv-lite@^0.4.4: 1108 | version "0.4.24" 1109 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1110 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1111 | dependencies: 1112 | safer-buffer ">= 2.1.2 < 3" 1113 | 1114 | ignore-by-default@^1.0.1: 1115 | version "1.0.1" 1116 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 1117 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 1118 | 1119 | ignore-walk@^3.0.1: 1120 | version "3.0.1" 1121 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 1122 | integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== 1123 | dependencies: 1124 | minimatch "^3.0.4" 1125 | 1126 | import-lazy@^2.1.0: 1127 | version "2.1.0" 1128 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 1129 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 1130 | 1131 | imurmurhash@^0.1.4: 1132 | version "0.1.4" 1133 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1134 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1135 | 1136 | inflight@^1.0.4: 1137 | version "1.0.6" 1138 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1139 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1140 | dependencies: 1141 | once "^1.3.0" 1142 | wrappy "1" 1143 | 1144 | inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: 1145 | version "2.0.4" 1146 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1147 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1148 | 1149 | inherits@2.0.3: 1150 | version "2.0.3" 1151 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1152 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1153 | 1154 | ini@^1.3.4, ini@~1.3.0: 1155 | version "1.3.5" 1156 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1157 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== 1158 | 1159 | invert-kv@^2.0.0: 1160 | version "2.0.0" 1161 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 1162 | integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== 1163 | 1164 | ip-regex@^2.0.0: 1165 | version "2.1.0" 1166 | resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" 1167 | integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= 1168 | 1169 | ipaddr.js@1.9.0: 1170 | version "1.9.0" 1171 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" 1172 | integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== 1173 | 1174 | is-accessor-descriptor@^0.1.6: 1175 | version "0.1.6" 1176 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1177 | integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= 1178 | dependencies: 1179 | kind-of "^3.0.2" 1180 | 1181 | is-accessor-descriptor@^1.0.0: 1182 | version "1.0.0" 1183 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1184 | integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== 1185 | dependencies: 1186 | kind-of "^6.0.0" 1187 | 1188 | is-binary-path@^1.0.0: 1189 | version "1.0.1" 1190 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1191 | integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= 1192 | dependencies: 1193 | binary-extensions "^1.0.0" 1194 | 1195 | is-buffer@^1.1.5: 1196 | version "1.1.6" 1197 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1198 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 1199 | 1200 | is-buffer@~2.0.3: 1201 | version "2.0.3" 1202 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" 1203 | integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== 1204 | 1205 | is-callable@^1.1.4: 1206 | version "1.1.4" 1207 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1208 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 1209 | 1210 | is-ci@^1.0.10: 1211 | version "1.2.1" 1212 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" 1213 | integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== 1214 | dependencies: 1215 | ci-info "^1.5.0" 1216 | 1217 | is-data-descriptor@^0.1.4: 1218 | version "0.1.4" 1219 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1220 | integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= 1221 | dependencies: 1222 | kind-of "^3.0.2" 1223 | 1224 | is-data-descriptor@^1.0.0: 1225 | version "1.0.0" 1226 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1227 | integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== 1228 | dependencies: 1229 | kind-of "^6.0.0" 1230 | 1231 | is-date-object@^1.0.1: 1232 | version "1.0.1" 1233 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1234 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 1235 | 1236 | is-descriptor@^0.1.0: 1237 | version "0.1.6" 1238 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1239 | integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== 1240 | dependencies: 1241 | is-accessor-descriptor "^0.1.6" 1242 | is-data-descriptor "^0.1.4" 1243 | kind-of "^5.0.0" 1244 | 1245 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1246 | version "1.0.2" 1247 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1248 | integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== 1249 | dependencies: 1250 | is-accessor-descriptor "^1.0.0" 1251 | is-data-descriptor "^1.0.0" 1252 | kind-of "^6.0.2" 1253 | 1254 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1255 | version "0.1.1" 1256 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1257 | integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= 1258 | 1259 | is-extendable@^1.0.1: 1260 | version "1.0.1" 1261 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1262 | integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== 1263 | dependencies: 1264 | is-plain-object "^2.0.4" 1265 | 1266 | is-extglob@^2.1.0, is-extglob@^2.1.1: 1267 | version "2.1.1" 1268 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1269 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1270 | 1271 | is-fullwidth-code-point@^1.0.0: 1272 | version "1.0.0" 1273 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1274 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1275 | dependencies: 1276 | number-is-nan "^1.0.0" 1277 | 1278 | is-fullwidth-code-point@^2.0.0: 1279 | version "2.0.0" 1280 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1281 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1282 | 1283 | is-generator@^1.0.2: 1284 | version "1.0.3" 1285 | resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" 1286 | integrity sha1-wUwhBX7TbjKNuANHlmxpP4hjifM= 1287 | 1288 | is-glob@^3.1.0: 1289 | version "3.1.0" 1290 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1291 | integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= 1292 | dependencies: 1293 | is-extglob "^2.1.0" 1294 | 1295 | is-glob@^4.0.0: 1296 | version "4.0.1" 1297 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1298 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1299 | dependencies: 1300 | is-extglob "^2.1.1" 1301 | 1302 | is-installed-globally@^0.1.0: 1303 | version "0.1.0" 1304 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" 1305 | integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= 1306 | dependencies: 1307 | global-dirs "^0.1.0" 1308 | is-path-inside "^1.0.0" 1309 | 1310 | is-ip@^2.0.0: 1311 | version "2.0.0" 1312 | resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-2.0.0.tgz#68eea07e8a0a0a94c2d080dd674c731ab2a461ab" 1313 | integrity sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas= 1314 | dependencies: 1315 | ip-regex "^2.0.0" 1316 | 1317 | is-npm@^1.0.0: 1318 | version "1.0.0" 1319 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 1320 | integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= 1321 | 1322 | is-number@^3.0.0: 1323 | version "3.0.0" 1324 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1325 | integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= 1326 | dependencies: 1327 | kind-of "^3.0.2" 1328 | 1329 | is-obj@^1.0.0: 1330 | version "1.0.1" 1331 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1332 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 1333 | 1334 | is-path-inside@^1.0.0: 1335 | version "1.0.1" 1336 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1337 | integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= 1338 | dependencies: 1339 | path-is-inside "^1.0.1" 1340 | 1341 | is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1342 | version "2.0.4" 1343 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1344 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1345 | dependencies: 1346 | isobject "^3.0.1" 1347 | 1348 | is-redirect@^1.0.0: 1349 | version "1.0.0" 1350 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 1351 | integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= 1352 | 1353 | is-regex@^1.0.4: 1354 | version "1.0.4" 1355 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1356 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= 1357 | dependencies: 1358 | has "^1.0.1" 1359 | 1360 | is-retry-allowed@^1.0.0: 1361 | version "1.1.0" 1362 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 1363 | integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= 1364 | 1365 | is-stream@^1.0.0, is-stream@^1.1.0: 1366 | version "1.1.0" 1367 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1368 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1369 | 1370 | is-symbol@^1.0.2: 1371 | version "1.0.2" 1372 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 1373 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== 1374 | dependencies: 1375 | has-symbols "^1.0.0" 1376 | 1377 | is-windows@^1.0.2: 1378 | version "1.0.2" 1379 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1380 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 1381 | 1382 | isarray@1.0.0, isarray@~1.0.0: 1383 | version "1.0.0" 1384 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1385 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1386 | 1387 | isexe@^2.0.0: 1388 | version "2.0.0" 1389 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1390 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1391 | 1392 | isobject@^2.0.0: 1393 | version "2.1.0" 1394 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1395 | integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 1396 | dependencies: 1397 | isarray "1.0.0" 1398 | 1399 | isobject@^3.0.0, isobject@^3.0.1: 1400 | version "3.0.1" 1401 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1402 | integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= 1403 | 1404 | js-yaml@3.13.1: 1405 | version "3.13.1" 1406 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1407 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1408 | dependencies: 1409 | argparse "^1.0.7" 1410 | esprima "^4.0.0" 1411 | 1412 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1413 | version "3.2.2" 1414 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1415 | integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= 1416 | dependencies: 1417 | is-buffer "^1.1.5" 1418 | 1419 | kind-of@^4.0.0: 1420 | version "4.0.0" 1421 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1422 | integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= 1423 | dependencies: 1424 | is-buffer "^1.1.5" 1425 | 1426 | kind-of@^5.0.0: 1427 | version "5.1.0" 1428 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1429 | integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== 1430 | 1431 | kind-of@^6.0.0, kind-of@^6.0.2: 1432 | version "6.0.2" 1433 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1434 | integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== 1435 | 1436 | latest-version@^3.0.0: 1437 | version "3.1.0" 1438 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" 1439 | integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= 1440 | dependencies: 1441 | package-json "^4.0.0" 1442 | 1443 | lcid@^2.0.0: 1444 | version "2.0.0" 1445 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 1446 | integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== 1447 | dependencies: 1448 | invert-kv "^2.0.0" 1449 | 1450 | locate-path@^3.0.0: 1451 | version "3.0.0" 1452 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1453 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1454 | dependencies: 1455 | p-locate "^3.0.0" 1456 | path-exists "^3.0.0" 1457 | 1458 | lodash@4.17.4: 1459 | version "4.17.4" 1460 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1461 | integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= 1462 | 1463 | lodash@^4.17.10, lodash@^4.17.11: 1464 | version "4.17.15" 1465 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 1466 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 1467 | 1468 | log-symbols@2.2.0: 1469 | version "2.2.0" 1470 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1471 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1472 | dependencies: 1473 | chalk "^2.0.1" 1474 | 1475 | lowercase-keys@^1.0.0: 1476 | version "1.0.1" 1477 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 1478 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 1479 | 1480 | lru-cache@^4.0.1: 1481 | version "4.1.5" 1482 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1483 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1484 | dependencies: 1485 | pseudomap "^1.0.2" 1486 | yallist "^2.1.2" 1487 | 1488 | make-dir@^1.0.0: 1489 | version "1.3.0" 1490 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 1491 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== 1492 | dependencies: 1493 | pify "^3.0.0" 1494 | 1495 | map-age-cleaner@^0.1.1: 1496 | version "0.1.3" 1497 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 1498 | integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== 1499 | dependencies: 1500 | p-defer "^1.0.0" 1501 | 1502 | map-cache@^0.2.2: 1503 | version "0.2.2" 1504 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1505 | integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= 1506 | 1507 | map-visit@^1.0.0: 1508 | version "1.0.0" 1509 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1510 | integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= 1511 | dependencies: 1512 | object-visit "^1.0.0" 1513 | 1514 | media-typer@0.3.0: 1515 | version "0.3.0" 1516 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1517 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1518 | 1519 | mem@^4.0.0: 1520 | version "4.3.0" 1521 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" 1522 | integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== 1523 | dependencies: 1524 | map-age-cleaner "^0.1.1" 1525 | mimic-fn "^2.0.0" 1526 | p-is-promise "^2.0.0" 1527 | 1528 | merge-descriptors@1.0.1: 1529 | version "1.0.1" 1530 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1531 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1532 | 1533 | methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: 1534 | version "1.1.2" 1535 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1536 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1537 | 1538 | micromatch@^3.1.10, micromatch@^3.1.4: 1539 | version "3.1.10" 1540 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 1541 | integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== 1542 | dependencies: 1543 | arr-diff "^4.0.0" 1544 | array-unique "^0.3.2" 1545 | braces "^2.3.1" 1546 | define-property "^2.0.2" 1547 | extend-shallow "^3.0.2" 1548 | extglob "^2.0.4" 1549 | fragment-cache "^0.2.1" 1550 | kind-of "^6.0.2" 1551 | nanomatch "^1.2.9" 1552 | object.pick "^1.3.0" 1553 | regex-not "^1.0.0" 1554 | snapdragon "^0.8.1" 1555 | to-regex "^3.0.2" 1556 | 1557 | mime-db@1.40.0: 1558 | version "1.40.0" 1559 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" 1560 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== 1561 | 1562 | mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.24: 1563 | version "2.1.24" 1564 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" 1565 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== 1566 | dependencies: 1567 | mime-db "1.40.0" 1568 | 1569 | mime@1.6.0, mime@^1.4.1: 1570 | version "1.6.0" 1571 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1572 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1573 | 1574 | mimic-fn@^2.0.0: 1575 | version "2.1.0" 1576 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1577 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1578 | 1579 | minimatch@3.0.4, minimatch@^3.0.4: 1580 | version "3.0.4" 1581 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1582 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1583 | dependencies: 1584 | brace-expansion "^1.1.7" 1585 | 1586 | minimist@0.0.8: 1587 | version "0.0.8" 1588 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1589 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1590 | 1591 | minimist@^1.2.0: 1592 | version "1.2.0" 1593 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1594 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1595 | 1596 | minipass@^2.2.1, minipass@^2.3.5: 1597 | version "2.3.5" 1598 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" 1599 | integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== 1600 | dependencies: 1601 | safe-buffer "^5.1.2" 1602 | yallist "^3.0.0" 1603 | 1604 | minizlib@^1.2.1: 1605 | version "1.2.1" 1606 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" 1607 | integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== 1608 | dependencies: 1609 | minipass "^2.2.1" 1610 | 1611 | mixin-deep@^1.2.0: 1612 | version "1.3.2" 1613 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" 1614 | integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== 1615 | dependencies: 1616 | for-in "^1.0.2" 1617 | is-extendable "^1.0.1" 1618 | 1619 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: 1620 | version "0.5.1" 1621 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1622 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1623 | dependencies: 1624 | minimist "0.0.8" 1625 | 1626 | mocha@^6.1.4: 1627 | version "6.2.0" 1628 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.0.tgz#f896b642843445d1bb8bca60eabd9206b8916e56" 1629 | integrity sha512-qwfFgY+7EKAAUAdv7VYMZQknI7YJSGesxHyhn6qD52DV8UcSZs5XwCifcZGMVIE4a5fbmhvbotxC0DLQ0oKohQ== 1630 | dependencies: 1631 | ansi-colors "3.2.3" 1632 | browser-stdout "1.3.1" 1633 | debug "3.2.6" 1634 | diff "3.5.0" 1635 | escape-string-regexp "1.0.5" 1636 | find-up "3.0.0" 1637 | glob "7.1.3" 1638 | growl "1.10.5" 1639 | he "1.2.0" 1640 | js-yaml "3.13.1" 1641 | log-symbols "2.2.0" 1642 | minimatch "3.0.4" 1643 | mkdirp "0.5.1" 1644 | ms "2.1.1" 1645 | node-environment-flags "1.0.5" 1646 | object.assign "4.1.0" 1647 | strip-json-comments "2.0.1" 1648 | supports-color "6.0.0" 1649 | which "1.3.1" 1650 | wide-align "1.1.3" 1651 | yargs "13.2.2" 1652 | yargs-parser "13.0.0" 1653 | yargs-unparser "1.5.0" 1654 | 1655 | ms@2.0.0: 1656 | version "2.0.0" 1657 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1658 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1659 | 1660 | ms@2.1.1: 1661 | version "2.1.1" 1662 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1663 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1664 | 1665 | ms@^2.1.1: 1666 | version "2.1.2" 1667 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1668 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1669 | 1670 | nan@^2.12.1: 1671 | version "2.14.0" 1672 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" 1673 | integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== 1674 | 1675 | nanomatch@^1.2.9: 1676 | version "1.2.13" 1677 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 1678 | integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== 1679 | dependencies: 1680 | arr-diff "^4.0.0" 1681 | array-unique "^0.3.2" 1682 | define-property "^2.0.2" 1683 | extend-shallow "^3.0.2" 1684 | fragment-cache "^0.2.1" 1685 | is-windows "^1.0.2" 1686 | kind-of "^6.0.2" 1687 | object.pick "^1.3.0" 1688 | regex-not "^1.0.0" 1689 | snapdragon "^0.8.1" 1690 | to-regex "^3.0.1" 1691 | 1692 | needle@^2.2.1: 1693 | version "2.4.0" 1694 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" 1695 | integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== 1696 | dependencies: 1697 | debug "^3.2.6" 1698 | iconv-lite "^0.4.4" 1699 | sax "^1.2.4" 1700 | 1701 | negotiator@0.6.2: 1702 | version "0.6.2" 1703 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1704 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1705 | 1706 | nice-try@^1.0.4: 1707 | version "1.0.5" 1708 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1709 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1710 | 1711 | node-environment-flags@1.0.5: 1712 | version "1.0.5" 1713 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 1714 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 1715 | dependencies: 1716 | object.getownpropertydescriptors "^2.0.3" 1717 | semver "^5.7.0" 1718 | 1719 | node-pre-gyp@^0.12.0: 1720 | version "0.12.0" 1721 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" 1722 | integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== 1723 | dependencies: 1724 | detect-libc "^1.0.2" 1725 | mkdirp "^0.5.1" 1726 | needle "^2.2.1" 1727 | nopt "^4.0.1" 1728 | npm-packlist "^1.1.6" 1729 | npmlog "^4.0.2" 1730 | rc "^1.2.7" 1731 | rimraf "^2.6.1" 1732 | semver "^5.3.0" 1733 | tar "^4" 1734 | 1735 | nodemon@^1.19.1: 1736 | version "1.19.1" 1737 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.1.tgz#576f0aad0f863aabf8c48517f6192ff987cd5071" 1738 | integrity sha512-/DXLzd/GhiaDXXbGId5BzxP1GlsqtMGM9zTmkWrgXtSqjKmGSbLicM/oAy4FR0YWm14jCHRwnR31AHS2dYFHrg== 1739 | dependencies: 1740 | chokidar "^2.1.5" 1741 | debug "^3.1.0" 1742 | ignore-by-default "^1.0.1" 1743 | minimatch "^3.0.4" 1744 | pstree.remy "^1.1.6" 1745 | semver "^5.5.0" 1746 | supports-color "^5.2.0" 1747 | touch "^3.1.0" 1748 | undefsafe "^2.0.2" 1749 | update-notifier "^2.5.0" 1750 | 1751 | nopt@^4.0.1: 1752 | version "4.0.1" 1753 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1754 | integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= 1755 | dependencies: 1756 | abbrev "1" 1757 | osenv "^0.1.4" 1758 | 1759 | nopt@~1.0.10: 1760 | version "1.0.10" 1761 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 1762 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 1763 | dependencies: 1764 | abbrev "1" 1765 | 1766 | normalize-path@^2.1.1: 1767 | version "2.1.1" 1768 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1769 | integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= 1770 | dependencies: 1771 | remove-trailing-separator "^1.0.1" 1772 | 1773 | normalize-path@^3.0.0: 1774 | version "3.0.0" 1775 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1776 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1777 | 1778 | npm-bundled@^1.0.1: 1779 | version "1.0.6" 1780 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" 1781 | integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== 1782 | 1783 | npm-packlist@^1.1.6: 1784 | version "1.4.1" 1785 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" 1786 | integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== 1787 | dependencies: 1788 | ignore-walk "^3.0.1" 1789 | npm-bundled "^1.0.1" 1790 | 1791 | npm-run-path@^2.0.0: 1792 | version "2.0.2" 1793 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1794 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 1795 | dependencies: 1796 | path-key "^2.0.0" 1797 | 1798 | npmlog@^4.0.2: 1799 | version "4.1.2" 1800 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1801 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 1802 | dependencies: 1803 | are-we-there-yet "~1.1.2" 1804 | console-control-strings "~1.1.0" 1805 | gauge "~2.7.3" 1806 | set-blocking "~2.0.0" 1807 | 1808 | number-is-nan@^1.0.0: 1809 | version "1.0.1" 1810 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1811 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1812 | 1813 | oauth2-server@3.0.0: 1814 | version "3.0.0" 1815 | resolved "https://registry.yarnpkg.com/oauth2-server/-/oauth2-server-3.0.0.tgz#c46276b74c3d28634d59ee981f76b58a6459cc28" 1816 | integrity sha1-xGJ2t0w9KGNNWe6YH3a1imRZzCg= 1817 | dependencies: 1818 | basic-auth "1.1.0" 1819 | bluebird "3.5.0" 1820 | lodash "4.17.4" 1821 | promisify-any "2.0.1" 1822 | statuses "1.3.1" 1823 | type-is "1.6.15" 1824 | 1825 | oauth2-server@^3.0.1: 1826 | version "3.0.1" 1827 | resolved "https://registry.yarnpkg.com/oauth2-server/-/oauth2-server-3.0.1.tgz#8fdb7eb78f107832f75c554cb42e59a3f37e41ea" 1828 | integrity sha512-LFAT4MeTaOgdW+b8YMVMsPhJ8LrbSfVkYZRPgRmELJEJoXcchb/L4b9/lEmgpeNtjH8PlFiqof+YwI+y/oJuOg== 1829 | dependencies: 1830 | basic-auth "^2.0.0" 1831 | bluebird "^3.5.1" 1832 | lodash "^4.17.10" 1833 | promisify-any "^2.0.1" 1834 | statuses "^1.5.0" 1835 | type-is "^1.6.16" 1836 | 1837 | object-assign@^4.1.0: 1838 | version "4.1.1" 1839 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1840 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1841 | 1842 | object-copy@^0.1.0: 1843 | version "0.1.0" 1844 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 1845 | integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= 1846 | dependencies: 1847 | copy-descriptor "^0.1.0" 1848 | define-property "^0.2.5" 1849 | kind-of "^3.0.3" 1850 | 1851 | object-keys@^1.0.11, object-keys@^1.0.12: 1852 | version "1.1.1" 1853 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1854 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1855 | 1856 | object-visit@^1.0.0: 1857 | version "1.0.1" 1858 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 1859 | integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= 1860 | dependencies: 1861 | isobject "^3.0.0" 1862 | 1863 | object.assign@4.1.0: 1864 | version "4.1.0" 1865 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 1866 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 1867 | dependencies: 1868 | define-properties "^1.1.2" 1869 | function-bind "^1.1.1" 1870 | has-symbols "^1.0.0" 1871 | object-keys "^1.0.11" 1872 | 1873 | object.getownpropertydescriptors@^2.0.3: 1874 | version "2.0.3" 1875 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" 1876 | integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= 1877 | dependencies: 1878 | define-properties "^1.1.2" 1879 | es-abstract "^1.5.1" 1880 | 1881 | object.pick@^1.3.0: 1882 | version "1.3.0" 1883 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 1884 | integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= 1885 | dependencies: 1886 | isobject "^3.0.1" 1887 | 1888 | on-finished@~2.3.0: 1889 | version "2.3.0" 1890 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1891 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1892 | dependencies: 1893 | ee-first "1.1.1" 1894 | 1895 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1896 | version "1.4.0" 1897 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1898 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1899 | dependencies: 1900 | wrappy "1" 1901 | 1902 | os-homedir@^1.0.0: 1903 | version "1.0.2" 1904 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1905 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1906 | 1907 | os-locale@^3.0.0, os-locale@^3.1.0: 1908 | version "3.1.0" 1909 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" 1910 | integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== 1911 | dependencies: 1912 | execa "^1.0.0" 1913 | lcid "^2.0.0" 1914 | mem "^4.0.0" 1915 | 1916 | os-tmpdir@^1.0.0: 1917 | version "1.0.2" 1918 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1919 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1920 | 1921 | osenv@^0.1.4: 1922 | version "0.1.5" 1923 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 1924 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 1925 | dependencies: 1926 | os-homedir "^1.0.0" 1927 | os-tmpdir "^1.0.0" 1928 | 1929 | p-defer@^1.0.0: 1930 | version "1.0.0" 1931 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 1932 | integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= 1933 | 1934 | p-finally@^1.0.0: 1935 | version "1.0.0" 1936 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1937 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 1938 | 1939 | p-is-promise@^2.0.0: 1940 | version "2.1.0" 1941 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" 1942 | integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== 1943 | 1944 | p-limit@^2.0.0: 1945 | version "2.2.0" 1946 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" 1947 | integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== 1948 | dependencies: 1949 | p-try "^2.0.0" 1950 | 1951 | p-locate@^3.0.0: 1952 | version "3.0.0" 1953 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1954 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1955 | dependencies: 1956 | p-limit "^2.0.0" 1957 | 1958 | p-try@^2.0.0: 1959 | version "2.2.0" 1960 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1961 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1962 | 1963 | package-json@^4.0.0: 1964 | version "4.0.1" 1965 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" 1966 | integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= 1967 | dependencies: 1968 | got "^6.7.1" 1969 | registry-auth-token "^3.0.1" 1970 | registry-url "^3.0.3" 1971 | semver "^5.1.0" 1972 | 1973 | parseurl@~1.3.3: 1974 | version "1.3.3" 1975 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1976 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1977 | 1978 | pascalcase@^0.1.1: 1979 | version "0.1.1" 1980 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 1981 | integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= 1982 | 1983 | path-dirname@^1.0.0: 1984 | version "1.0.2" 1985 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 1986 | integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= 1987 | 1988 | path-exists@^3.0.0: 1989 | version "3.0.0" 1990 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1991 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1992 | 1993 | path-is-absolute@^1.0.0: 1994 | version "1.0.1" 1995 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1996 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1997 | 1998 | path-is-inside@^1.0.1: 1999 | version "1.0.2" 2000 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 2001 | integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= 2002 | 2003 | path-key@^2.0.0, path-key@^2.0.1: 2004 | version "2.0.1" 2005 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2006 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 2007 | 2008 | path-to-regexp@0.1.7: 2009 | version "0.1.7" 2010 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2011 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 2012 | 2013 | pathval@^1.1.0: 2014 | version "1.1.0" 2015 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" 2016 | integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= 2017 | 2018 | pify@^3.0.0: 2019 | version "3.0.0" 2020 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2021 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 2022 | 2023 | posix-character-classes@^0.1.0: 2024 | version "0.1.1" 2025 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2026 | integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= 2027 | 2028 | prepend-http@^1.0.1: 2029 | version "1.0.4" 2030 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 2031 | integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= 2032 | 2033 | process-nextick-args@~2.0.0: 2034 | version "2.0.1" 2035 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2036 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2037 | 2038 | promisify-any@2.0.1, promisify-any@^2.0.1: 2039 | version "2.0.1" 2040 | resolved "https://registry.yarnpkg.com/promisify-any/-/promisify-any-2.0.1.tgz#403e00a8813f175242ab50fe33a69f8eece47305" 2041 | integrity sha1-QD4AqIE/F1JCq1D+M6afjuzkcwU= 2042 | dependencies: 2043 | bluebird "^2.10.0" 2044 | co-bluebird "^1.1.0" 2045 | is-generator "^1.0.2" 2046 | 2047 | proxy-addr@~2.0.5: 2048 | version "2.0.5" 2049 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" 2050 | integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== 2051 | dependencies: 2052 | forwarded "~0.1.2" 2053 | ipaddr.js "1.9.0" 2054 | 2055 | pseudomap@^1.0.2: 2056 | version "1.0.2" 2057 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2058 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 2059 | 2060 | pstree.remy@^1.1.6: 2061 | version "1.1.7" 2062 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.7.tgz#c76963a28047ed61542dc361aa26ee55a7fa15f3" 2063 | integrity sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A== 2064 | 2065 | pump@^3.0.0: 2066 | version "3.0.0" 2067 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2068 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 2069 | dependencies: 2070 | end-of-stream "^1.1.0" 2071 | once "^1.3.1" 2072 | 2073 | qs@6.7.0, qs@^6.5.1: 2074 | version "6.7.0" 2075 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 2076 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 2077 | 2078 | range-parser@~1.2.1: 2079 | version "1.2.1" 2080 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 2081 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 2082 | 2083 | raw-body@2.4.0: 2084 | version "2.4.0" 2085 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 2086 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 2087 | dependencies: 2088 | bytes "3.1.0" 2089 | http-errors "1.7.2" 2090 | iconv-lite "0.4.24" 2091 | unpipe "1.0.0" 2092 | 2093 | rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: 2094 | version "1.2.8" 2095 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 2096 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 2097 | dependencies: 2098 | deep-extend "^0.6.0" 2099 | ini "~1.3.0" 2100 | minimist "^1.2.0" 2101 | strip-json-comments "~2.0.1" 2102 | 2103 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.3.5: 2104 | version "2.3.6" 2105 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2106 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 2107 | dependencies: 2108 | core-util-is "~1.0.0" 2109 | inherits "~2.0.3" 2110 | isarray "~1.0.0" 2111 | process-nextick-args "~2.0.0" 2112 | safe-buffer "~5.1.1" 2113 | string_decoder "~1.1.1" 2114 | util-deprecate "~1.0.1" 2115 | 2116 | readdirp@^2.2.1: 2117 | version "2.2.1" 2118 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 2119 | integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== 2120 | dependencies: 2121 | graceful-fs "^4.1.11" 2122 | micromatch "^3.1.10" 2123 | readable-stream "^2.0.2" 2124 | 2125 | regex-not@^1.0.0, regex-not@^1.0.2: 2126 | version "1.0.2" 2127 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2128 | integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== 2129 | dependencies: 2130 | extend-shallow "^3.0.2" 2131 | safe-regex "^1.1.0" 2132 | 2133 | registry-auth-token@^3.0.1: 2134 | version "3.4.0" 2135 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" 2136 | integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== 2137 | dependencies: 2138 | rc "^1.1.6" 2139 | safe-buffer "^5.0.1" 2140 | 2141 | registry-url@^3.0.3: 2142 | version "3.1.0" 2143 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 2144 | integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= 2145 | dependencies: 2146 | rc "^1.0.1" 2147 | 2148 | remove-trailing-separator@^1.0.1: 2149 | version "1.1.0" 2150 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2151 | integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= 2152 | 2153 | repeat-element@^1.1.2: 2154 | version "1.1.3" 2155 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2156 | integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== 2157 | 2158 | repeat-string@^1.6.1: 2159 | version "1.6.1" 2160 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2161 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= 2162 | 2163 | require-directory@^2.1.1: 2164 | version "2.1.1" 2165 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2166 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2167 | 2168 | require-main-filename@^1.0.1: 2169 | version "1.0.1" 2170 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2171 | integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 2172 | 2173 | require-main-filename@^2.0.0: 2174 | version "2.0.0" 2175 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2176 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 2177 | 2178 | resolve-url@^0.2.1: 2179 | version "0.2.1" 2180 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2181 | integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= 2182 | 2183 | ret@~0.1.10: 2184 | version "0.1.15" 2185 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2186 | integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== 2187 | 2188 | rimraf@^2.6.1: 2189 | version "2.6.3" 2190 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 2191 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 2192 | dependencies: 2193 | glob "^7.1.3" 2194 | 2195 | safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2196 | version "5.1.2" 2197 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2198 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2199 | 2200 | safe-regex@^1.1.0: 2201 | version "1.1.0" 2202 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2203 | integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= 2204 | dependencies: 2205 | ret "~0.1.10" 2206 | 2207 | "safer-buffer@>= 2.1.2 < 3": 2208 | version "2.1.2" 2209 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2210 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2211 | 2212 | sax@^1.2.4: 2213 | version "1.2.4" 2214 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 2215 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 2216 | 2217 | semver-diff@^2.0.0: 2218 | version "2.1.0" 2219 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 2220 | integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= 2221 | dependencies: 2222 | semver "^5.0.3" 2223 | 2224 | semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.7.0: 2225 | version "5.7.0" 2226 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 2227 | integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== 2228 | 2229 | send@0.17.1: 2230 | version "0.17.1" 2231 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 2232 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 2233 | dependencies: 2234 | debug "2.6.9" 2235 | depd "~1.1.2" 2236 | destroy "~1.0.4" 2237 | encodeurl "~1.0.2" 2238 | escape-html "~1.0.3" 2239 | etag "~1.8.1" 2240 | fresh "0.5.2" 2241 | http-errors "~1.7.2" 2242 | mime "1.6.0" 2243 | ms "2.1.1" 2244 | on-finished "~2.3.0" 2245 | range-parser "~1.2.1" 2246 | statuses "~1.5.0" 2247 | 2248 | serve-static@1.14.1: 2249 | version "1.14.1" 2250 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 2251 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 2252 | dependencies: 2253 | encodeurl "~1.0.2" 2254 | escape-html "~1.0.3" 2255 | parseurl "~1.3.3" 2256 | send "0.17.1" 2257 | 2258 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2259 | version "2.0.0" 2260 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2261 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2262 | 2263 | set-value@^2.0.0, set-value@^2.0.1: 2264 | version "2.0.1" 2265 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" 2266 | integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== 2267 | dependencies: 2268 | extend-shallow "^2.0.1" 2269 | is-extendable "^0.1.1" 2270 | is-plain-object "^2.0.3" 2271 | split-string "^3.0.1" 2272 | 2273 | setprototypeof@1.1.1: 2274 | version "1.1.1" 2275 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 2276 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 2277 | 2278 | shebang-command@^1.2.0: 2279 | version "1.2.0" 2280 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2281 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2282 | dependencies: 2283 | shebang-regex "^1.0.0" 2284 | 2285 | shebang-regex@^1.0.0: 2286 | version "1.0.0" 2287 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2288 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2289 | 2290 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2291 | version "3.0.2" 2292 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2293 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 2294 | 2295 | snapdragon-node@^2.0.1: 2296 | version "2.1.1" 2297 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2298 | integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== 2299 | dependencies: 2300 | define-property "^1.0.0" 2301 | isobject "^3.0.0" 2302 | snapdragon-util "^3.0.1" 2303 | 2304 | snapdragon-util@^3.0.1: 2305 | version "3.0.1" 2306 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2307 | integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== 2308 | dependencies: 2309 | kind-of "^3.2.0" 2310 | 2311 | snapdragon@^0.8.1: 2312 | version "0.8.2" 2313 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 2314 | integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== 2315 | dependencies: 2316 | base "^0.11.1" 2317 | debug "^2.2.0" 2318 | define-property "^0.2.5" 2319 | extend-shallow "^2.0.1" 2320 | map-cache "^0.2.2" 2321 | source-map "^0.5.6" 2322 | source-map-resolve "^0.5.0" 2323 | use "^3.1.0" 2324 | 2325 | source-map-resolve@^0.5.0: 2326 | version "0.5.2" 2327 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 2328 | integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== 2329 | dependencies: 2330 | atob "^2.1.1" 2331 | decode-uri-component "^0.2.0" 2332 | resolve-url "^0.2.1" 2333 | source-map-url "^0.4.0" 2334 | urix "^0.1.0" 2335 | 2336 | source-map-url@^0.4.0: 2337 | version "0.4.0" 2338 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2339 | integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= 2340 | 2341 | source-map@^0.5.6: 2342 | version "0.5.7" 2343 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2344 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2345 | 2346 | split-string@^3.0.1, split-string@^3.0.2: 2347 | version "3.1.0" 2348 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 2349 | integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== 2350 | dependencies: 2351 | extend-shallow "^3.0.0" 2352 | 2353 | sprintf-js@~1.0.2: 2354 | version "1.0.3" 2355 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2356 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2357 | 2358 | static-extend@^0.1.1: 2359 | version "0.1.2" 2360 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 2361 | integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= 2362 | dependencies: 2363 | define-property "^0.2.5" 2364 | object-copy "^0.1.0" 2365 | 2366 | statuses@1.3.1: 2367 | version "1.3.1" 2368 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 2369 | integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= 2370 | 2371 | "statuses@>= 1.5.0 < 2", statuses@^1.5.0, statuses@~1.5.0: 2372 | version "1.5.0" 2373 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 2374 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 2375 | 2376 | string-width@^1.0.1: 2377 | version "1.0.2" 2378 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2379 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 2380 | dependencies: 2381 | code-point-at "^1.0.0" 2382 | is-fullwidth-code-point "^1.0.0" 2383 | strip-ansi "^3.0.0" 2384 | 2385 | "string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: 2386 | version "2.1.1" 2387 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2388 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2389 | dependencies: 2390 | is-fullwidth-code-point "^2.0.0" 2391 | strip-ansi "^4.0.0" 2392 | 2393 | string-width@^3.0.0: 2394 | version "3.1.0" 2395 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2396 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2397 | dependencies: 2398 | emoji-regex "^7.0.1" 2399 | is-fullwidth-code-point "^2.0.0" 2400 | strip-ansi "^5.1.0" 2401 | 2402 | string_decoder@~1.1.1: 2403 | version "1.1.1" 2404 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2405 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2406 | dependencies: 2407 | safe-buffer "~5.1.0" 2408 | 2409 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2410 | version "3.0.1" 2411 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2412 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2413 | dependencies: 2414 | ansi-regex "^2.0.0" 2415 | 2416 | strip-ansi@^4.0.0: 2417 | version "4.0.0" 2418 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2419 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2420 | dependencies: 2421 | ansi-regex "^3.0.0" 2422 | 2423 | strip-ansi@^5.1.0: 2424 | version "5.2.0" 2425 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2426 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2427 | dependencies: 2428 | ansi-regex "^4.1.0" 2429 | 2430 | strip-eof@^1.0.0: 2431 | version "1.0.0" 2432 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2433 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 2434 | 2435 | strip-json-comments@2.0.1, strip-json-comments@~2.0.1: 2436 | version "2.0.1" 2437 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2438 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2439 | 2440 | superagent@^3.7.0: 2441 | version "3.8.3" 2442 | resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128" 2443 | integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== 2444 | dependencies: 2445 | component-emitter "^1.2.0" 2446 | cookiejar "^2.1.0" 2447 | debug "^3.1.0" 2448 | extend "^3.0.0" 2449 | form-data "^2.3.1" 2450 | formidable "^1.2.0" 2451 | methods "^1.1.1" 2452 | mime "^1.4.1" 2453 | qs "^6.5.1" 2454 | readable-stream "^2.3.5" 2455 | 2456 | supports-color@6.0.0: 2457 | version "6.0.0" 2458 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 2459 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 2460 | dependencies: 2461 | has-flag "^3.0.0" 2462 | 2463 | supports-color@^5.2.0, supports-color@^5.3.0: 2464 | version "5.5.0" 2465 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2466 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2467 | dependencies: 2468 | has-flag "^3.0.0" 2469 | 2470 | tar@^4: 2471 | version "4.4.10" 2472 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" 2473 | integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== 2474 | dependencies: 2475 | chownr "^1.1.1" 2476 | fs-minipass "^1.2.5" 2477 | minipass "^2.3.5" 2478 | minizlib "^1.2.1" 2479 | mkdirp "^0.5.0" 2480 | safe-buffer "^5.1.2" 2481 | yallist "^3.0.3" 2482 | 2483 | term-size@^1.2.0: 2484 | version "1.2.0" 2485 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" 2486 | integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= 2487 | dependencies: 2488 | execa "^0.7.0" 2489 | 2490 | timed-out@^4.0.0: 2491 | version "4.0.1" 2492 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 2493 | integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= 2494 | 2495 | to-object-path@^0.3.0: 2496 | version "0.3.0" 2497 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 2498 | integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= 2499 | dependencies: 2500 | kind-of "^3.0.2" 2501 | 2502 | to-regex-range@^2.1.0: 2503 | version "2.1.1" 2504 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 2505 | integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= 2506 | dependencies: 2507 | is-number "^3.0.0" 2508 | repeat-string "^1.6.1" 2509 | 2510 | to-regex@^3.0.1, to-regex@^3.0.2: 2511 | version "3.0.2" 2512 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 2513 | integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== 2514 | dependencies: 2515 | define-property "^2.0.2" 2516 | extend-shallow "^3.0.2" 2517 | regex-not "^1.0.2" 2518 | safe-regex "^1.1.0" 2519 | 2520 | toidentifier@1.0.0: 2521 | version "1.0.0" 2522 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 2523 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 2524 | 2525 | touch@^3.1.0: 2526 | version "3.1.0" 2527 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 2528 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 2529 | dependencies: 2530 | nopt "~1.0.10" 2531 | 2532 | type-detect@^4.0.0, type-detect@^4.0.5: 2533 | version "4.0.8" 2534 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2535 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2536 | 2537 | type-is@1.6.15: 2538 | version "1.6.15" 2539 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" 2540 | integrity sha1-yrEPtJCeRByChC6v4a1kbIGARBA= 2541 | dependencies: 2542 | media-typer "0.3.0" 2543 | mime-types "~2.1.15" 2544 | 2545 | type-is@^1.6.16, type-is@~1.6.17, type-is@~1.6.18: 2546 | version "1.6.18" 2547 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2548 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2549 | dependencies: 2550 | media-typer "0.3.0" 2551 | mime-types "~2.1.24" 2552 | 2553 | undefsafe@^2.0.2: 2554 | version "2.0.2" 2555 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" 2556 | integrity sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY= 2557 | dependencies: 2558 | debug "^2.2.0" 2559 | 2560 | union-value@^1.0.0: 2561 | version "1.0.1" 2562 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" 2563 | integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== 2564 | dependencies: 2565 | arr-union "^3.1.0" 2566 | get-value "^2.0.6" 2567 | is-extendable "^0.1.1" 2568 | set-value "^2.0.1" 2569 | 2570 | unique-string@^1.0.0: 2571 | version "1.0.0" 2572 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 2573 | integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= 2574 | dependencies: 2575 | crypto-random-string "^1.0.0" 2576 | 2577 | unpipe@1.0.0, unpipe@~1.0.0: 2578 | version "1.0.0" 2579 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2580 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2581 | 2582 | unset-value@^1.0.0: 2583 | version "1.0.0" 2584 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 2585 | integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= 2586 | dependencies: 2587 | has-value "^0.3.1" 2588 | isobject "^3.0.0" 2589 | 2590 | unzip-response@^2.0.1: 2591 | version "2.0.1" 2592 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 2593 | integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= 2594 | 2595 | upath@^1.1.1: 2596 | version "1.1.2" 2597 | resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" 2598 | integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== 2599 | 2600 | update-notifier@^2.5.0: 2601 | version "2.5.0" 2602 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" 2603 | integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== 2604 | dependencies: 2605 | boxen "^1.2.1" 2606 | chalk "^2.0.1" 2607 | configstore "^3.0.0" 2608 | import-lazy "^2.1.0" 2609 | is-ci "^1.0.10" 2610 | is-installed-globally "^0.1.0" 2611 | is-npm "^1.0.0" 2612 | latest-version "^3.0.0" 2613 | semver-diff "^2.0.0" 2614 | xdg-basedir "^3.0.0" 2615 | 2616 | urix@^0.1.0: 2617 | version "0.1.0" 2618 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 2619 | integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= 2620 | 2621 | url-parse-lax@^1.0.0: 2622 | version "1.0.0" 2623 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 2624 | integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= 2625 | dependencies: 2626 | prepend-http "^1.0.1" 2627 | 2628 | use@^3.1.0: 2629 | version "3.1.1" 2630 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 2631 | integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== 2632 | 2633 | util-deprecate@~1.0.1: 2634 | version "1.0.2" 2635 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2636 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2637 | 2638 | utils-merge@1.0.1: 2639 | version "1.0.1" 2640 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2641 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2642 | 2643 | vary@~1.1.2: 2644 | version "1.1.2" 2645 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2646 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2647 | 2648 | which-module@^2.0.0: 2649 | version "2.0.0" 2650 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2651 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2652 | 2653 | which@1.3.1, which@^1.2.9: 2654 | version "1.3.1" 2655 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2656 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2657 | dependencies: 2658 | isexe "^2.0.0" 2659 | 2660 | wide-align@1.1.3, wide-align@^1.1.0: 2661 | version "1.1.3" 2662 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2663 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2664 | dependencies: 2665 | string-width "^1.0.2 || 2" 2666 | 2667 | widest-line@^2.0.0: 2668 | version "2.0.1" 2669 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" 2670 | integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== 2671 | dependencies: 2672 | string-width "^2.1.1" 2673 | 2674 | wrap-ansi@^2.0.0: 2675 | version "2.1.0" 2676 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2677 | integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= 2678 | dependencies: 2679 | string-width "^1.0.1" 2680 | strip-ansi "^3.0.1" 2681 | 2682 | wrappy@1: 2683 | version "1.0.2" 2684 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2685 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2686 | 2687 | write-file-atomic@^2.0.0: 2688 | version "2.4.3" 2689 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" 2690 | integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== 2691 | dependencies: 2692 | graceful-fs "^4.1.11" 2693 | imurmurhash "^0.1.4" 2694 | signal-exit "^3.0.2" 2695 | 2696 | xdg-basedir@^3.0.0: 2697 | version "3.0.0" 2698 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 2699 | integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= 2700 | 2701 | "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: 2702 | version "4.0.0" 2703 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 2704 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 2705 | 2706 | yallist@^2.1.2: 2707 | version "2.1.2" 2708 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2709 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 2710 | 2711 | yallist@^3.0.0, yallist@^3.0.3: 2712 | version "3.0.3" 2713 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 2714 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== 2715 | 2716 | yargs-parser@13.0.0: 2717 | version "13.0.0" 2718 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b" 2719 | integrity sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw== 2720 | dependencies: 2721 | camelcase "^5.0.0" 2722 | decamelize "^1.2.0" 2723 | 2724 | yargs-parser@^11.1.1: 2725 | version "11.1.1" 2726 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" 2727 | integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== 2728 | dependencies: 2729 | camelcase "^5.0.0" 2730 | decamelize "^1.2.0" 2731 | 2732 | yargs-parser@^13.0.0: 2733 | version "13.1.1" 2734 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 2735 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 2736 | dependencies: 2737 | camelcase "^5.0.0" 2738 | decamelize "^1.2.0" 2739 | 2740 | yargs-unparser@1.5.0: 2741 | version "1.5.0" 2742 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.5.0.tgz#f2bb2a7e83cbc87bb95c8e572828a06c9add6e0d" 2743 | integrity sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw== 2744 | dependencies: 2745 | flat "^4.1.0" 2746 | lodash "^4.17.11" 2747 | yargs "^12.0.5" 2748 | 2749 | yargs@13.2.2: 2750 | version "13.2.2" 2751 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993" 2752 | integrity sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA== 2753 | dependencies: 2754 | cliui "^4.0.0" 2755 | find-up "^3.0.0" 2756 | get-caller-file "^2.0.1" 2757 | os-locale "^3.1.0" 2758 | require-directory "^2.1.1" 2759 | require-main-filename "^2.0.0" 2760 | set-blocking "^2.0.0" 2761 | string-width "^3.0.0" 2762 | which-module "^2.0.0" 2763 | y18n "^4.0.0" 2764 | yargs-parser "^13.0.0" 2765 | 2766 | yargs@^12.0.5: 2767 | version "12.0.5" 2768 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" 2769 | integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== 2770 | dependencies: 2771 | cliui "^4.0.0" 2772 | decamelize "^1.2.0" 2773 | find-up "^3.0.0" 2774 | get-caller-file "^1.0.1" 2775 | os-locale "^3.0.0" 2776 | require-directory "^2.1.1" 2777 | require-main-filename "^1.0.1" 2778 | set-blocking "^2.0.0" 2779 | string-width "^2.0.0" 2780 | which-module "^2.0.0" 2781 | y18n "^3.2.1 || ^4.0.0" 2782 | yargs-parser "^11.1.1" 2783 | --------------------------------------------------------------------------------