├── .eslintrc.js ├── .gitignore ├── .prettierignore ├── README.md ├── example ├── package.json ├── src │ ├── collections.js │ ├── loadFakeData.js │ ├── resolvers.js │ ├── server.js │ └── typeDefs.js └── yarn.lock ├── index.js ├── package.json ├── src ├── GraphQLValidatedDate.js ├── GraphQLValidatedDate.test.js ├── GraphQLValidatedEmail.js ├── GraphQLValidatedEmail.test.js ├── GraphQLValidatedIPAddress.js ├── GraphQLValidatedIPAddress.test.js ├── GraphQLValidatedInteger.js ├── GraphQLValidatedInteger.test.js ├── GraphQLValidatedMoment.js ├── GraphQLValidatedMoment.test.js ├── GraphQLValidatedNumber.js ├── GraphQLValidatedNumber.test.js ├── GraphQLValidatedObjectID.js ├── GraphQLValidatedObjectID.test.js ├── GraphQLValidatedPhoneNumber.js ├── GraphQLValidatedPhoneNumber.test.js ├── GraphQLValidatedScalar.js ├── GraphQLValidatedScalar.test.js ├── GraphQLValidatedSemver.js ├── GraphQLValidatedSemver.test.js ├── GraphQLValidatedString.js ├── GraphQLValidatedString.test.js ├── GraphQLValidatedURL.js ├── GraphQLValidatedURL.test.js ├── GraphQLValidatedUsername.js ├── GraphQLValidatedUsername.test.js └── index.js └── yarn.lock /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | '@hello10/eslint-config' 4 | ] 5 | }; 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store 3 | .nyc_output 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # graphql-validated-types 2 | A collection of [GraphQL custom scalars](http://dev.apollodata.com/tools/graphql-tools/scalars.html) supporting cleanup, validation, and defaults via fluent api. 3 | 4 | ## Example 5 | ### Hex colors 6 | ```js 7 | // Holds colors like `FF00FF` and `663399` 8 | const HexColor = new GraphQLValidatedString({ 9 | name: 'HexColor', 10 | description: 'HexColor string' 11 | }).toUpperCase().hex().length(6).default('000000'); 12 | ``` 13 | 14 | ### Example Project 15 | There's an example of using this library with express in `/example`. You can run locally by doing 16 | ``` 17 | git clone https://github.com/stephenhandley/graphql-validated-types 18 | cd graphql-validated-types 19 | npm run example 20 | ``` 21 | 22 | ## Usage 23 | 24 | ### [GraphQLValidatedScalar](./src/GraphQLValidatedScalar.js) 25 | The base class other types extend. It is an extension of [GraphQLScalarType](https://github.com/graphql/graphql-js/blob/master/src/type/definition.js#L304) and can itself be instantiated as a custom scalar for use as a placeholder or to attach custom validators. Validators should either throw an error on invalid input, or return the the value (perhaps transformed) when it is valid. They can be chained as below and are run in the order they are added. 26 | ```js 27 | const VowelCountButNoLetterE = new GraphQLValidatedScalar({ 28 | name: 'VowelCountButNoLetterE' 29 | }).validator((value)=> { 30 | if (value.match(/e/)) { 31 | throw new Error('E is not allowed'); 32 | } 33 | return value; 34 | }).validator((value)=> { 35 | let vowels = ['a', 'e', 'i', 'o', 'u']; 36 | let count = 0; 37 | for (let i = 0; i < value.length; i++) { 38 | let letter = value[i]; 39 | if (vowels.indexOf(letter) !== -1) { 40 | count++; 41 | } 42 | } 43 | return count; 44 | }); 45 | 46 | let count = VowelCountButNoLetterE.parseValue('animals'); 47 | Assert.equal(count, 3); 48 | 49 | Assert.throws(()=> { 50 | VowelCountButNoLetterE.parseValue('forever'); 51 | }, /E is not allowed/); 52 | ``` 53 | 54 | ### [GraphQLValidatedString](./src/GraphQLValidatedString.js) 55 | 56 | #### Validation 57 | Validation functions will throw `TypeError` unless the value matches criteria 58 | 59 | ##### `.length(length)` 60 | Requires string to be of specified `length` (if passed number) or `min` and/or `max` (if passed object) 61 | ```js 62 | const VariableLength = new GraphQLValidatedString({ 63 | name: 'VariableLength' 64 | }).length({min: 5, max: 10}); 65 | 66 | Assert.throws(()=> { 67 | VariableLength.parseValue('abcd'); 68 | }, /has invalid length/); 69 | 70 | const FixedLength = new GraphQLValidatedString({ 71 | name: 'FixedLength' 72 | }).length(8); 73 | 74 | Assert.throws(()=> { 75 | FixedLength.parseValue('abcde'); 76 | }, /has invalid length/); 77 | ``` 78 | 79 | ##### `.nonempty()` 80 | Alias for `.length({min: 1})` 81 | ```js 82 | const NotEmpty = new GraphQLValidatedString({ 83 | name: 'NotEmpty' 84 | }).nonempty(); 85 | 86 | Assert.throws(()=> { 87 | NotEmtpy.parseValue(''); 88 | }, /has invalid length/); 89 | ``` 90 | 91 | ##### `.regex(pattern)` 92 | Requires value to match `pattern` 93 | ```js 94 | const HumanName = new GraphQLValidatedString({ 95 | name: 'HumanName' 96 | }).regex(/([a-zA-Z]{3,30}\s*)+/); 97 | 98 | Assert.throws(()=> { 99 | HumanName.parseValue('aa'); 100 | }, /does not match/); 101 | ``` 102 | 103 | ##### `.base64()` 104 | Alias for `.regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/)` 105 | ```js 106 | const Image = new GraphQLValidatedString({ 107 | name: 'Image' 108 | }).base64(); 109 | 110 | Assert.throws(()=> { 111 | Image.parseValue('====='); 112 | }, /does not match/); 113 | ``` 114 | 115 | ##### `.hex()` 116 | Alias for `.regex(/^[a-f0-9]+$/i)` 117 | ```js 118 | const Hex = new GraphQLValidatedString({ 119 | name: 'Hex' 120 | }).hex(); 121 | 122 | Assert.throws(()=> { 123 | Hex.parseValue('====='); 124 | }, /does not match/); 125 | ``` 126 | 127 | ##### `.alphanumeric()` 128 | Alias for `.regex(/^[a-zA-Z0-9]+$/)` 129 | ```js 130 | const Username = new GraphQLValidatedString({ 131 | name: 'Username' 132 | }).alphanumeric(); 133 | 134 | Assert.throws(()=> { 135 | Username.parseValue('!!!!!'); 136 | }, /does not match/); 137 | ``` 138 | 139 | ##### `.existsIn(arr)` 140 | Requires value to exist in `arr` 141 | ```js 142 | const Domain = new GraphQLValidatedString({ 143 | name: 'Domain' 144 | }).existsIn(['foo.com', 'bar.com']); 145 | 146 | Assert.throws(()=> { 147 | Domain.parseValue('baz.com'); 148 | }, /not present in array/); 149 | ``` 150 | 151 | #### Cleanup 152 | ##### `.trim()` 153 | Remove spaces from either side of string 154 | ```js 155 | const Trimmed = new GraphQLValidatedString({ 156 | name: 'Trimmed' 157 | }).trim(); 158 | 159 | Assert.equal(Trimmed.parseValue(' abc '), 'abc'); 160 | ``` 161 | 162 | ##### `.replace(pattern, replacement)` 163 | Replace `pattern` with `replacement` 164 | ```js 165 | const Replace = new GraphQLValidatedString({ 166 | name: 'Replace' 167 | }).replace(/b+/, 'b'); 168 | 169 | Assert.equal(Replace.parseValue('abbbc'), 'abc'); 170 | ``` 171 | 172 | ##### `.squish()` 173 | Trim sides and replace repeated spaces with single space 174 | ```js 175 | const Squish = new GraphQLValidatedString({ 176 | name: 'Squish' 177 | }).squish(); 178 | 179 | Assert.equal(Squish.parseValue(' ab c'), 'ab c'); 180 | ``` 181 | 182 | ##### `.truncate(length)` 183 | Limit string to maximum `length` 184 | ```js 185 | const Truncate = new GraphQLValidatedString({ 186 | name: 'Truncate' 187 | }).truncate(5); 188 | 189 | Assert.equal(Truncate.parseValue('abcdef'), 'abcde'); 190 | ``` 191 | 192 | ##### `.toUpperCase()` 193 | Make string upper case 194 | ```js 195 | let Upper = new GraphQLValidatedString({ 196 | name: 'Upper' 197 | }).toUpperCase(); 198 | 199 | Assert.equal(Upper.parseValue('abcDEF'), 'ABCDEF'); 200 | ``` 201 | 202 | ##### `.toLowerCase()` 203 | Make string lower case 204 | ```js 205 | let Lower = new GraphQLValidatedString({ 206 | name: 'Lower' 207 | }).toLowerCase(); 208 | 209 | Assert.equal(Upper.parseValue('ABCdef'), 'abcdef'); 210 | ``` 211 | 212 | ### [GraphQLValidatedEmail](./src/GraphQLValidatedEmail.js) 213 | Extends `GraphQLValidatedString` and validates Email using [email-regex](https://github.com/sindresorhus/email-regex). 214 | ``` 215 | // exact email address passes 216 | const Email = new GraphQLValidatedEmail(); 217 | 218 | // any string containing email address passes 219 | const ContainsEmail = new GraphQLValidatedEmail().exact(false); 220 | ``` 221 | 222 | ### [GraphQLValidatedURL](./src/GraphQLValidatedURL.js) 223 | Extends `GraphQLValidatedString` and validates URL using [url-regex](https://github.com/kevva/url-regex). 224 | ``` 225 | // exact URL with protocol passes 226 | const URL = new GraphQLValidatedURL(); 227 | 228 | // any string containing URL with or without protocol passes 229 | const ContainsURL = new GraphQLValidatedURL().exact(false).strict(false); 230 | ``` 231 | 232 | ### [GraphQLValidatedPhoneNumber](./src/GraphQLValidatedPhoneNumber.js) 233 | Extends `GraphQLValidatedString` and validates Phone Number using [phone-regex](https://github.com/regexhq/phone-regex) 234 | ``` 235 | // exact phone number passes 236 | const Phone = new GraphQLValidatedPhoneNumber(); 237 | 238 | // any string containing phone number passes 239 | const ContainsPhone = new GraphQLValidatedPhoneNumber().exact(false); 240 | ``` 241 | 242 | ### [GraphQLValidatedIPAddress](./src/GraphQLValidatedIPAddress.js) 243 | Extends `GraphQLValidatedString` and validates IP Address using [ip-regex](https://github.com/sindresorhus/ip-regex). 244 | ``` 245 | // validates string containing IP Address (either IPV4 or IPV6) 246 | let IPAddress = new GraphQLValidatedIPAddress().exact(false); 247 | 248 | // validates string equal to IPV4 Address 249 | let IPV4Address = new GraphQLValidatedIPAddress().v4(); 250 | 251 | // validates string equal to IPV6 Address 252 | let IPV6Address = new GraphQLValidatedIPAddress().v6(); 253 | ``` 254 | 255 | ### [GraphQLValidatedNumber](./src/GraphQLValidatedNumber.js) 256 | 257 | #### `.min(minimum)` 258 | Require to be at least `minimum` 259 | ```js 260 | let Count = new GraphQLValidatedNumber({ 261 | name: 'Count' 262 | }).min(10); 263 | 264 | Assert.throws(()=> { 265 | Count.parseValue(9); 266 | }, /below minimum value/); 267 | ``` 268 | 269 | #### `.max(maximum)` 270 | Require to be at most `maximum` 271 | ```js 272 | let Count = new GraphQLValidatedNumber({ 273 | name: 'Count' 274 | }).max(10); 275 | 276 | Assert.throws(()=> { 277 | Count.parseValue(11); 278 | }, /above maximum value/); 279 | ``` 280 | 281 | #### `.range([minimum, maximum])` 282 | Require to be at least `minimum` and at most `maximum` 283 | ```js 284 | let Count = new GraphQLValidatedNumber({ 285 | name: 'Count' 286 | }).range([10, 20]); 287 | 288 | Assert.throws(()=> { 289 | Count.parseValue(21); 290 | }, /not within range/); 291 | ``` 292 | 293 | #### `.below(limit)` 294 | Require to be less than `limit` 295 | ```js 296 | let Count = new GraphQLValidatedNumber({ 297 | name: 'Count' 298 | }).below(10); 299 | 300 | Assert.throws(()=> { 301 | Count.parseValue(10); 302 | }, /not below limit/); 303 | ``` 304 | 305 | #### `.above(limit)` 306 | Require to be more than `limit` 307 | ```js 308 | let Count = new GraphQLValidatedNumber({ 309 | name: 'Count' 310 | }).above(10); 311 | 312 | Assert.throws(()=> { 313 | Count.parseValue(10); 314 | }, /not above limit/); 315 | ``` 316 | 317 | #### `.between([low, high])` 318 | Require to be more than low and less than high 319 | ```js 320 | let Count = new GraphQLValidatedNumber({ 321 | name: 'Count' 322 | }).between([10, 20]); 323 | 324 | Assert.throws(()=> { 325 | Count.parseValue(10); 326 | }, /not between limits/); 327 | ``` 328 | 329 | #### `.positive()` 330 | Require number to be greater than zero 331 | ```js 332 | let Count = new GraphQLValidatedNumber({ 333 | name: 'Count' 334 | }).positive(); 335 | 336 | Assert.throws(()=> { 337 | Count.parseValue(0); 338 | }, /not positive/); 339 | ``` 340 | 341 | #### `.negative()` 342 | Require number to be less than zero 343 | ```js 344 | let Count = new GraphQLValidatedNumber({ 345 | name: 'Count' 346 | }).negative(); 347 | 348 | Assert.throws(()=> { 349 | Count.parseValue(0); 350 | }, /not negative/); 351 | ``` 352 | 353 | #### `.nonnegative()` 354 | Require number to be zero or greater 355 | ```js 356 | let Count = new GraphQLValidatedNumber({ 357 | name: 'Count' 358 | }).nonnegative(); 359 | 360 | Assert.throws(()=> { 361 | Count.parseValue(-1); 362 | }, /negative/); 363 | ``` 364 | 365 | ### [GraphQLValidatedInteger](./src/GraphQLValidatedInteger.js) 366 | Extends `GraphQLValidatedNumber` and requires number to be `32-bit` (between `-2147483648` and `2147483647`) and truncates from floats to integers 367 | 368 | ```js 369 | const Integer = new GraphQLValidatedInteger({ 370 | name: 'Integer' 371 | }); 372 | 373 | Assert.equal(Integer.parseValue(10.5), 10); 374 | ``` 375 | 376 | ### [GraphQLValidatedDate](./src/GraphQLValidateDate.js) 377 | Parses native JS Dates 378 | 379 | ### [GraphQLValidatedMoment](./src/GraphQLValidatedMoment.js) 380 | Parses and formats dates using [Moment.js](https://momentjs.com/) 381 | 382 | Prior to using, make sure `Moment` is set on the constructor 383 | ```js 384 | const Moment = require('moment'); 385 | const {GraphQLValidatedMoment} = require('graphql-validated-moment'); 386 | GraphQLValidatedMoment.Moment = Moment; 387 | ``` 388 | 389 | #### Parsing 390 | By default, uses Moment's [parsing](https://momentjs.com/docs/#/parsing/) logic to handle [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601), [RFC 2822 Date time](https://tools.ietf.org/html/rfc2822#section-3.3), and fall back to `new Date()`. 391 | 392 | ```js 393 | 394 | const Time = new GraphQLValidatedMoment({ 395 | name: 'Time' 396 | }); 397 | const now = new Date(); 398 | Assert.equal(Time.parseValue(now).valueOf(), now.getTime()); 399 | ``` 400 | 401 | #### `.inputFormat(format)` 402 | Specifies custom input `format` 403 | ```js 404 | const Time = new GraphQLValidatedMoment({ 405 | name: 'Time' 406 | }).inputFormat('YYYY-MM-DD HH:mm Z'); 407 | let formatted = Time.parseValue('2010-10-20 4:30 +0000').format(); 408 | Assert.equal(formatted, '2010-10-19T21:30:00-07:00'); 409 | ``` 410 | 411 | #### `.outputFormat(format)` 412 | Specifies custom output `format` for serialization 413 | ```js 414 | const year = '2013'; 415 | const time = `${year}-02-08`; 416 | const Time = new GraphQLValidatedMoment({ 417 | name: 'Time' 418 | }).outputFormat('YYYY'); 419 | const output = Time.serialize(Time.parseValue(time)); 420 | Assert.equal(output, year); 421 | ``` 422 | 423 | #### Validators 424 | 425 | ##### `.before()` 426 | Requires date to be before now 427 | ```js 428 | const tomorrow = Moment().add({day: 1}); 429 | const next_day = tomorrow.clone().add({day: 1}); 430 | 431 | const Time = new GraphQLValidatedMoment({ 432 | name: 'Time' 433 | }).before(tomorrow); 434 | 435 | Assert.throws(()=> { 436 | Time.parseValue(next_day); 437 | }, /not before/); 438 | ``` 439 | 440 | ##### `.beforeNow()` 441 | Requires date to be before now 442 | ```js 443 | const Time = new GraphQLValidatedMoment({ 444 | name: 'Time' 445 | }).beforeNow(); 446 | 447 | const tomorrow = Moment().add({day: 1}); 448 | Assert.throws(()=> { 449 | Time.parseValue(tomorrow); 450 | }, /not before/); 451 | ``` 452 | 453 | ##### `.after()` 454 | Requires date to be before now 455 | ```js 456 | const tomorrow = Moment().add({day: 1}); 457 | const next_day = tomorrow.clone().add({day: 1}); 458 | 459 | const Time = new GraphQLValidatedMoment({ 460 | name: 'Time' 461 | }).after(next_day); 462 | 463 | Assert.throws(()=> { 464 | Time.parseValue(tomorrow); 465 | }, /not after/); 466 | ``` 467 | 468 | ##### `.afterNow()` 469 | Requires date to be before now 470 | ```js 471 | const Time = new GraphQLValidatedMoment({ 472 | name: 'Time' 473 | }).afterNow(); 474 | 475 | const yesterday = Moment().subtract({day: 1}); 476 | Assert.throws(()=> { 477 | Time.parseValue(yesterday); 478 | }, /not after/); 479 | ``` 480 | 481 | ### [GraphQLValidatedObjectID](./src/GraphQLValidatedObjectID.js) 482 | Wrapper on MongoDB's [ObjectID](). Handles parsing 24 char hex string, 12 byte string, or existing ObjectID. Serializes using `.toHexString` 483 | 484 | Prior to using, make sure `ObjectID` is set on the constructor 485 | ```js 486 | const MongoDB = require('mongodb'); 487 | const {GraphQLValidatedObjectID} = require('graphql-validated-moment'); 488 | GraphQLValidatedObjectID.ObjectID = MongoDB.ObjectID; 489 | 490 | const ObjectID = new GraphQLValidatedObjectID(); 491 | const OBJECT_ID_HEX_STRING = '59b035f1485caa25a5505f2d'; 492 | const OBJECT_ID_12_BYTE = 'aaaaaaaaaaaa'; 493 | const OBJECT_ID_12_BYTE_AS_HEX = '616161616161616161616161'; 494 | 495 | let oid = ObjectID.parseValue(OBJECT_ID_HEX_STRING); 496 | Assert.equal(oid.toHexString(), OBJECT_ID_HEX_STRING); 497 | 498 | oid = new MongoDB.ObjectID(); 499 | Assert.equal(ObjectID.parseValue(oid), oid); 500 | 501 | oid = ObjectID.parseValue(OBJECT_ID_12_BYTE); 502 | Assert.equal(oid.toHexString(), OBJECT_ID_12_BYTE_AS_HEX); 503 | Assert.equal(ObjectID.serialize(oid), OBJECT_ID_12_BYTE_AS_HEX); 504 | ``` 505 | 506 | ### [GraphQLValidatedSemver](./src/GraphQLValidateSemver.js) 507 | Parses [semver](https://semver.org/) i.e. `1.0.4` 508 | 509 | ## TODO 510 | - support for array and object type validation? 511 | 512 | ## Notes 513 | This is based on aspects adapted from the following 514 | - https://github.com/graphql/graphql-js/blob/master/src/type/scalars.js 515 | - http://dev.apollodata.com/tools/graphql-tools/scalars.html 516 | - https://github.com/li-kai/graphql-scalar-types 517 | - https://github.com/stylesuxx/graphql-custom-types 518 | - https://github.com/mugli/learning-graphql/blob/master/7.%20Deep%20Dive%20into%20GraphQL%20Type%20System.md 519 | - https://github.com/xpepermint/graphql-type-factory 520 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql-validated-types-example", 3 | "version": "x.y.z", 4 | "description": "Example of using graphql-validated-types", 5 | "main": "server.js", 6 | "private": true, 7 | "scripts": { 8 | "start": "PORT=3000 node src/server.js" 9 | }, 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "apollo-server-express": "2.19.0", 14 | "express": "4.17.1", 15 | "graphql-tools": "7.0.2", 16 | "moment": "2.29.1", 17 | "uuid": "8.3.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/src/collections.js: -------------------------------------------------------------------------------- 1 | const Moment = require('moment'); 2 | const uuid = require('uuid/v4'); 3 | 4 | class Collection { 5 | constructor (name) { 6 | this.name = name; 7 | this.items = []; 8 | } 9 | 10 | create (data) { 11 | data.id = uuid(); 12 | data.createdAt = Moment(); 13 | this.items.push(data); 14 | return data; 15 | } 16 | 17 | find (query) { 18 | if (!query) { 19 | return this.items; 20 | } 21 | return this.items.filter((item)=> { 22 | return Object.entries(query).every(([attr, value])=> { 23 | return (item[attr] === value); 24 | }); 25 | }); 26 | } 27 | 28 | findOne (query) { 29 | const result = this.find(query); 30 | return (result.length) ? result[0] : null; 31 | } 32 | } 33 | 34 | const Author = new Collection('authors'); 35 | const Post = new Collection('posts'); 36 | 37 | module.exports = { 38 | Author, 39 | Post 40 | }; 41 | -------------------------------------------------------------------------------- /example/src/loadFakeData.js: -------------------------------------------------------------------------------- 1 | const { 2 | Author, 3 | Post 4 | } = require('./collections'); 5 | 6 | module.exports = function loadFakeData () { 7 | const FAKE_AUTHORS = [ 8 | { 9 | username: 'randall', 10 | email: 'randy@quaid.gov' 11 | }, 12 | { 13 | username: 'dennissux', 14 | email: 'randy@quaidnet.net' 15 | }, 16 | { 17 | username: 'cautolives', 18 | email: 'quaid@recall.biz' 19 | } 20 | ].map(Author.create.bind(Author)); 21 | 22 | const FAKE_POSTS = FAKE_AUTHORS.map(({id, username})=> { 23 | return Post.create({ 24 | authorId: id, 25 | title: `First post by ${username}`, 26 | body: 'My brother Dennis is such a turd' 27 | }); 28 | }); 29 | 30 | return { 31 | FAKE_AUTHORS, 32 | FAKE_POSTS 33 | }; 34 | }; 35 | -------------------------------------------------------------------------------- /example/src/resolvers.js: -------------------------------------------------------------------------------- 1 | const Moment = require('moment'); 2 | const { 3 | GraphQLValidatedEmail, 4 | GraphQLValidatedMoment, 5 | GraphQLValidatedString 6 | } = require('../../index'); 7 | 8 | const {Author, Post} = require('./collections'); 9 | 10 | GraphQLValidatedMoment.Moment = Moment; 11 | 12 | const Email = new GraphQLValidatedEmail(); 13 | 14 | const CreateTime = new GraphQLValidatedMoment({ 15 | name: 'CreateTime' 16 | }) 17 | .beforeNow() 18 | .outputFormat('YYYY/MM/DD HH:mm Z'); 19 | 20 | const Username = new GraphQLValidatedString({ 21 | name: 'Username' 22 | }).length({min: 2, max: 16}).squish(); 23 | 24 | const UUID = new GraphQLValidatedString({ 25 | name: 'UUID' 26 | }).regex( 27 | /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i 28 | ); 29 | 30 | const ScalarResolvers = { 31 | Email, 32 | CreateTime, 33 | Username, 34 | UUID 35 | }; 36 | 37 | const resolvers = { 38 | Query: { 39 | posts () { 40 | return Post.find(); 41 | }, 42 | post (_, {id}) { 43 | return Post.findOne({id}); 44 | }, 45 | authors () { 46 | return Author.find(); 47 | }, 48 | author (_, {id}) { 49 | return Author.findOne({id}); 50 | }, 51 | version () { 52 | return '1.0.0'; 53 | } 54 | }, 55 | Mutation: { 56 | createPost (_, args) { 57 | return Post.create(args); 58 | }, 59 | createAuthor (_, args) { 60 | return Author.create(args); 61 | } 62 | }, 63 | Author: { 64 | posts (author) { 65 | return Post.find({authorId: author.id}); 66 | } 67 | }, 68 | Post: { 69 | author (post) { 70 | return Author.findOne({id: post.authorId}); 71 | } 72 | }, 73 | ...ScalarResolvers 74 | }; 75 | 76 | module.exports = resolvers; 77 | -------------------------------------------------------------------------------- /example/src/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const {ApolloServer} = require('apollo-server-express'); 3 | const {makeExecutableSchema} = require('graphql-tools'); 4 | 5 | const typeDefs = require('./typeDefs'); 6 | const resolvers = require('./resolvers'); 7 | const loadFakeData = require('./loadFakeData'); 8 | 9 | const schema = makeExecutableSchema({ 10 | typeDefs, 11 | resolvers 12 | }); 13 | 14 | const { 15 | FAKE_AUTHORS, 16 | FAKE_POSTS 17 | } = loadFakeData(); 18 | 19 | function printCollection ({name, list}) { 20 | const ids = list.map(({id})=> id).join(', '); 21 | console.log(`${name}: ${ids}`); 22 | console.log(JSON.stringify(list, null, 1)); 23 | } 24 | 25 | console.log('Created fake data'); 26 | printCollection({name: 'Authors', list: FAKE_AUTHORS}); 27 | console.log(); 28 | printCollection({name: 'Posts', list: FAKE_POSTS}); 29 | 30 | const {PORT} = process.env; 31 | 32 | const app = express(); 33 | const server = new ApolloServer({ 34 | schema, 35 | playground: { 36 | endpoint: '/graphql' 37 | } 38 | }); 39 | 40 | server.applyMiddleware({app}); 41 | app.listen(PORT); 42 | 43 | console.log(`Running /graphql and /playground on port ${PORT}`); 44 | -------------------------------------------------------------------------------- /example/src/typeDefs.js: -------------------------------------------------------------------------------- 1 | const typeDefs = ` 2 | scalar CreateTime 3 | scalar Email 4 | scalar Username 5 | scalar UUID 6 | 7 | type Author { 8 | id: UUID! 9 | username: Username! 10 | email: Email! 11 | createdAt: CreateTime! 12 | # REFS 13 | posts: [Post!]! 14 | } 15 | 16 | type Post { 17 | id: UUID! 18 | title: String! 19 | body: String! 20 | authorId: UUID! 21 | createdAt: CreateTime! 22 | # REFS 23 | author: Author! 24 | } 25 | 26 | type Query { 27 | posts: [Post] 28 | post(id: UUID!): Post 29 | authors: [Author] 30 | author(id: UUID!): Author 31 | version: String! 32 | } 33 | 34 | type Mutation { 35 | createAuthor (username: Username!, email: Email!): Author 36 | createPost (title: String!, body: String!, authorId: UUID!): Post 37 | } 38 | 39 | schema { 40 | query: Query 41 | mutation: Mutation 42 | } 43 | `; 44 | 45 | module.exports = typeDefs; 46 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./src'); 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "graphql-validated-types", 3 | "version": "2.11.0", 4 | "description": "A collection of GraphQL custom scalars supporting cleanup, validation, and defaults via fluent api", 5 | "main": "index.js", 6 | "scripts": { 7 | "example": "yarn && cd example && yarn && yarn start", 8 | "lint": "eslint ./src ./example/src", 9 | "test": "yarn nyc mocha --ui bdd './src/**/*.test.js'", 10 | "clean": "rm -rf ./node_modules && rm -f yarn.lock" 11 | }, 12 | "author": { 13 | "name": "Stephen Handley", 14 | "email": "stephen@hello10.com", 15 | "url": "https://hello10.com" 16 | }, 17 | "license": "MIT", 18 | "dependencies": { 19 | "email-regex": "4.0.0", 20 | "graphql": "^14.0.0", 21 | "ip-regex": "4.2.0", 22 | "phone-regex": "2.1.0", 23 | "regex-username": "2.0.0", 24 | "semver-regex": "3.1.1", 25 | "url-regex-safe": "1.0.2" 26 | }, 27 | "devDependencies": { 28 | "@hello10/eslint-config": "1.0.2", 29 | "babel-eslint": "10.1.0", 30 | "eslint": "7.15.0", 31 | "eslint-config-airbnb-base": "14.2.1", 32 | "eslint-plugin-import": "2.22.1", 33 | "eslint-plugin-promise": "4.2.1", 34 | "mocha": "8.2.1", 35 | "moment": "2.29.1", 36 | "mongodb": "3.6.3", 37 | "nyc": "15.1.0" 38 | }, 39 | "repository": { 40 | "type": "git", 41 | "url": "git://github.com/hello10/graphql-validated-types.git" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/GraphQLValidatedDate.js: -------------------------------------------------------------------------------- 1 | const {Kind} = require('graphql/language'); 2 | 3 | const GraphQLValidatedScalar = require('./GraphQLValidatedScalar'); 4 | 5 | class GraphQLValidatedDate extends GraphQLValidatedScalar { 6 | constructor (args = {}) { 7 | if (!args.name) { 8 | args.name = 'Date'; 9 | } 10 | super(args); 11 | 12 | this.validator((value)=> { 13 | switch (typeof value) { 14 | case 'object': 15 | if (value && value.toDate && (value.toDate.constructor === Function)) { 16 | return value.toDate(); 17 | } else if (value.constructor !== Date) { 18 | throw new TypeError(`GraphQLValidatedDate ${this.name} is not object of type Date`); 19 | } else { 20 | return value; 21 | } 22 | case 'number': 23 | case 'string': 24 | return new Date(value); 25 | default: 26 | return this.throwTypeError(); 27 | } 28 | }); 29 | } 30 | 31 | validKinds () { 32 | return [Kind.STRING, Kind.OBJECT, Kind.INT]; 33 | } 34 | 35 | validTypes () { 36 | return ['object', 'string', 'number']; 37 | } 38 | 39 | _serialize (value) { 40 | return super._serialize(value).toJSON(); 41 | } 42 | } 43 | 44 | module.exports = GraphQLValidatedDate; 45 | -------------------------------------------------------------------------------- /src/GraphQLValidatedDate.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedDate = require('./GraphQLValidatedDate'); 4 | 5 | function jsonEquals (a, b) { 6 | Assert.equal(a.toJSON(), b.toJSON()); 7 | } 8 | 9 | describe('GraphQLValidatedDate', ()=> { 10 | let Date_; 11 | 12 | beforeEach(()=> { 13 | Date_ = new GraphQLValidatedDate(); 14 | }); 15 | 16 | it('should parse js date', ()=> { 17 | const now = new Date(); 18 | Assert.equal(Date_.parseValue(now), now); 19 | }); 20 | 21 | it('should parse unix time', ()=> { 22 | const now = new Date(); 23 | jsonEquals(Date_.parseValue(now.getTime()), now); 24 | }); 25 | 26 | it('should parse json date string in json format', ()=> { 27 | const time = '1975-08-19T23:15:30.000Z'; 28 | jsonEquals(Date_.parseValue(time), new Date(time)); 29 | }); 30 | 31 | it('should parse json date string in iso format', ()=> { 32 | const time = new Date(); 33 | jsonEquals(Date_.parseValue(time.toISOString()), time); 34 | }); 35 | 36 | it('should parse json date string toString format', ()=> { 37 | const time = new Date().toString(); 38 | jsonEquals(Date_.parseValue(time), new Date(time)); 39 | }); 40 | 41 | it('should handle object with toDate defined', ()=> { 42 | const time = { 43 | date: new Date(), 44 | toDate () { 45 | return this.date; 46 | } 47 | }; 48 | jsonEquals(Date_.parseValue(time), time.date); 49 | }); 50 | }); 51 | -------------------------------------------------------------------------------- /src/GraphQLValidatedEmail.js: -------------------------------------------------------------------------------- 1 | const emailRegex = require('email-regex'); 2 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 3 | 4 | class GraphQLValidatedEmail extends GraphQLValidatedString { 5 | constructor (args = {}) { 6 | if (!args.name) { 7 | args.name = 'Email'; 8 | } 9 | super(args); 10 | 11 | this._exact = true; 12 | this.setRegex(); 13 | } 14 | 15 | setRegex () { 16 | this.clearValidators(); 17 | const email_regex = emailRegex({ 18 | exact: this._exact 19 | }); 20 | return this.regex(email_regex); 21 | } 22 | 23 | exact (exact = true) { 24 | this._exact = exact; 25 | return this.setRegex(); 26 | } 27 | } 28 | 29 | module.exports = GraphQLValidatedEmail; 30 | -------------------------------------------------------------------------------- /src/GraphQLValidatedEmail.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedEmail = require('./GraphQLValidatedEmail'); 4 | 5 | describe('GraphQLValidatedEmail', ()=> { 6 | let Email; 7 | 8 | beforeEach(()=> { 9 | Email = new GraphQLValidatedEmail(); 10 | }); 11 | 12 | it('should validate exact emails', ()=> { 13 | Email.exact(); 14 | 15 | const input = 'hello@email.com'; 16 | Assert.equal(Email.parseValue(input), input); 17 | 18 | Assert.throws(()=> { 19 | Email.parseValue(`${input} blah`); 20 | }, /does not match/); 21 | }); 22 | 23 | it('should validate inexact emails', ()=> { 24 | Email.exact(false); 25 | 26 | const input = 'oh hi hello@email.com'; 27 | Assert.equal(Email.parseValue(input), input); 28 | 29 | Assert.throws(()=> { 30 | Email.parseValue('blah blah blah'); 31 | }, /does not match/); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /src/GraphQLValidatedIPAddress.js: -------------------------------------------------------------------------------- 1 | const ipRegex = require('ip-regex'); 2 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 3 | 4 | class GraphQLValidatedIPAddress extends GraphQLValidatedString { 5 | constructor (args = {}) { 6 | if (!args.name) { 7 | args.name = 'IPAddress'; 8 | } 9 | super(args); 10 | 11 | this.type = null; 12 | this._exact = true; 13 | this.setRegex(); 14 | } 15 | 16 | setRegex () { 17 | this.clearValidators(); 18 | let regex = ipRegex; 19 | if (this.type) { 20 | regex = regex[this.type]; 21 | } 22 | const ip_regex = regex({ 23 | exact: this._exact 24 | }); 25 | return this.regex(ip_regex); 26 | } 27 | 28 | exact (exact = true) { 29 | this._exact = exact; 30 | return this.setRegex(); 31 | } 32 | 33 | v4 () { 34 | this.type = 'v4'; 35 | return this.setRegex(); 36 | } 37 | 38 | v6 () { 39 | this.type = 'v6'; 40 | return this.setRegex(); 41 | } 42 | } 43 | 44 | module.exports = GraphQLValidatedIPAddress; 45 | -------------------------------------------------------------------------------- /src/GraphQLValidatedIPAddress.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedIPAddress = require('./GraphQLValidatedIPAddress'); 4 | 5 | describe('GraphQLValidatedIPAddress', ()=> { 6 | let IPAddress; 7 | 8 | beforeEach(()=> { 9 | IPAddress = new GraphQLValidatedIPAddress(); 10 | }); 11 | 12 | it('should validate exact IP', ()=> { 13 | IPAddress.exact(); 14 | 15 | const input = '10.11.12.13'; 16 | Assert.equal(IPAddress.parseValue(input), input); 17 | 18 | Assert.throws(()=> { 19 | IPAddress.parseValue(`${input} blah`); 20 | }, /does not match/); 21 | }); 22 | 23 | it('should validate inexact IP', ()=> { 24 | IPAddress.exact(false); 25 | 26 | const input = 'i love 10.11.12.13'; 27 | Assert.equal(IPAddress.parseValue(input), input); 28 | 29 | Assert.throws(()=> { 30 | IPAddress.parseValue('blah blah blah'); 31 | }, /does not match/); 32 | }); 33 | 34 | it('should validate exact IPv4', ()=> { 35 | IPAddress.v4().exact(); 36 | 37 | const input = '10.11.12.13'; 38 | Assert.equal(IPAddress.parseValue(input), input); 39 | 40 | Assert.throws(()=> { 41 | IPAddress.parseValue(`${input} blah`); 42 | }, /does not match/); 43 | 44 | Assert.throws(()=> { 45 | IPAddress.parseValue('1:2:3:4:5:6:7:8'); 46 | }, /does not match/); 47 | }); 48 | 49 | it('should validate exact IPv6', ()=> { 50 | IPAddress.v6().exact(); 51 | 52 | const input = '1:2:3:4:5:6:7:8'; 53 | Assert.equal(IPAddress.parseValue(input), input); 54 | 55 | Assert.throws(()=> { 56 | IPAddress.parseValue(`${input} blah`); 57 | }, /does not match/); 58 | 59 | Assert.throws(()=> { 60 | IPAddress.parseValue('10.11.12.13'); 61 | }, /does not match/); 62 | }); 63 | }); 64 | -------------------------------------------------------------------------------- /src/GraphQLValidatedInteger.js: -------------------------------------------------------------------------------- 1 | const {Kind} = require('graphql/language'); 2 | 3 | const GraphQLValidatedNumber = require('./GraphQLValidatedNumber'); 4 | 5 | const MAXIMUM = 2147483647; 6 | const MINIMUM = -2147483648; 7 | 8 | class GraphQLValidatedInteger extends GraphQLValidatedNumber { 9 | constructor (args = {}) { 10 | if (!args.name) { 11 | args.name = 'Integer'; 12 | } 13 | super(args); 14 | this.validator((value)=> { 15 | const truncate = value >= 0 ? Math.floor : Math.ceil; 16 | return truncate(value); 17 | }); 18 | this.max(MAXIMUM); 19 | this.min(MINIMUM); 20 | } 21 | 22 | validKinds () { 23 | return [Kind.INT]; 24 | } 25 | 26 | validTypes () { 27 | return ['number']; 28 | } 29 | } 30 | 31 | GraphQLValidatedInteger.MAXIMUM = MAXIMUM; 32 | GraphQLValidatedInteger.MINIMUM = MINIMUM; 33 | 34 | module.exports = GraphQLValidatedInteger; 35 | -------------------------------------------------------------------------------- /src/GraphQLValidatedInteger.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedInteger = require('./GraphQLValidatedInteger'); 4 | 5 | describe('GraphQLValidatedInteger', ()=> { 6 | let Integer; 7 | 8 | beforeEach(()=> { 9 | Integer = new GraphQLValidatedInteger({ 10 | name: 'Integer' 11 | }); 12 | }); 13 | 14 | it('should convert float to integer', ()=> { 15 | Assert.equal(Integer.parseValue(10.5), 10); 16 | Assert.equal(Integer.parseValue(10), 10); 17 | Assert.equal(Integer.parseValue(-11.23), -11); 18 | }); 19 | 20 | it('should throw if outside 32 bit range', ()=> { 21 | Assert.throws(()=> { 22 | Integer.parseValue(GraphQLValidatedInteger.MAXIMUM + 1); 23 | }, /above maximum/); 24 | 25 | Assert.throws(()=> { 26 | Integer.parseValue(GraphQLValidatedInteger.MINIMUM - 1); 27 | }, /below minimum/); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /src/GraphQLValidatedMoment.js: -------------------------------------------------------------------------------- 1 | const {Kind} = require('graphql/language'); 2 | 3 | const GraphQLValidatedScalar = require('./GraphQLValidatedScalar'); 4 | 5 | class GraphQLValidatedMoment extends GraphQLValidatedScalar { 6 | constructor (args = {}) { 7 | if (!args.name) { 8 | args.name = 'Moment'; 9 | } 10 | super(args); 11 | 12 | this.input_format = null; 13 | this.output_format = null; 14 | 15 | this.validator((value)=> { 16 | const {Moment} = this; 17 | const moment = Moment(value, this.input_format); 18 | if (!moment.isValid()) { 19 | throw new TypeError(`${this.name} is not valid format`); 20 | } 21 | return moment; 22 | }); 23 | } 24 | 25 | validKinds () { 26 | return [Kind.STRING, Kind.OBJECT, Kind.INT]; 27 | } 28 | 29 | validTypes () { 30 | return ['object', 'string', 'number']; 31 | } 32 | 33 | get Moment () { 34 | const Moment = this.constructor._Moment; 35 | if (!Moment) { 36 | throw new Error('Moment has not been set'); 37 | } 38 | return Moment; 39 | } 40 | 41 | static set Moment (Moment) { 42 | this._Moment = Moment; 43 | } 44 | 45 | inputFormat (format) { 46 | this.input_format = format; 47 | return this; 48 | } 49 | 50 | outputFormat (format) { 51 | this.output_format = format; 52 | return this; 53 | } 54 | 55 | // overriding base implementation 56 | _serialize (moment) { 57 | const {Moment} = this; 58 | if (!Moment.isMoment(moment)) { 59 | moment = Moment(moment); 60 | } 61 | return moment.format(this.output_format); 62 | } 63 | 64 | before (before) { 65 | return this.validator((moment)=> { 66 | if (!moment.isBefore(before)) { 67 | throw new TypeError(`${this.name}:${moment} is not before ${before}`); 68 | } 69 | return moment; 70 | }); 71 | } 72 | 73 | beforeNow () { 74 | return this.before(); 75 | } 76 | 77 | after (after) { 78 | return this.validator((moment)=> { 79 | if (!moment.isAfter(after)) { 80 | throw new TypeError(`${this.name}:${moment} is not after ${after}`); 81 | } 82 | return moment; 83 | }); 84 | } 85 | 86 | afterNow () { 87 | return this.after(); 88 | } 89 | } 90 | 91 | module.exports = GraphQLValidatedMoment; 92 | -------------------------------------------------------------------------------- /src/GraphQLValidatedMoment.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | const Moment = require('moment'); 3 | 4 | const GraphQLValidatedMoment = require('./GraphQLValidatedMoment'); 5 | 6 | describe('GraphQLValidatedMoment', ()=> { 7 | describe('When Moment has not been set', ()=> { 8 | it('should throw an error', ()=> { 9 | Assert.throws(()=> { 10 | const Time = new GraphQLValidatedMoment({ 11 | name: 'Time' 12 | }); 13 | Time.parseValue(new Date()); 14 | }, /Moment has not been set/); 15 | }); 16 | }); 17 | 18 | describe('When Moment has been set', ()=> { 19 | let Time; 20 | 21 | beforeEach(()=> { 22 | GraphQLValidatedMoment.Moment = Moment; 23 | Time = new GraphQLValidatedMoment({ 24 | name: 'Time' 25 | }); 26 | }); 27 | 28 | it('should parse js date', ()=> { 29 | const now = new Date(); 30 | Assert.equal(Time.parseValue(now).valueOf(), now.getTime()); 31 | }); 32 | 33 | it('should parse unix time', ()=> { 34 | const now = (new Date()).getTime(); 35 | Assert.equal(Time.parseValue(now).valueOf(), now); 36 | }); 37 | 38 | describe('.input_format', ()=> { 39 | beforeEach(()=> { 40 | const format = 'YYYY-MM-DD HH:mm Z'; 41 | Time.inputFormat(format); 42 | }); 43 | 44 | it('should handle parsing', ()=> { 45 | const good_time = '2010-10-20 4:30 +0000'; 46 | const parsed = Time.parseValue(good_time).format(); 47 | Assert.equal(parsed, '2010-10-19T21:30:00-07:00'); 48 | }); 49 | 50 | it('should throw when input_format is not matched', ()=> { 51 | const bad_format_time = '10/20/2010 4:30 +0000'; 52 | Assert.throws(()=> { 53 | Time.parseValue(bad_format_time); 54 | }, /Time is not valid format/); 55 | }); 56 | 57 | it('should fail to parse invalid date', ()=> { 58 | const bad_time = 'honkhonk'; 59 | Assert.throws(()=> { 60 | Time.parseValue(bad_time); 61 | }, /Time is not valid format/); 62 | }); 63 | }); 64 | 65 | it('should support custom output format when serializing', ()=> { 66 | const year = '2013'; 67 | const time = `${year}-02-08`; 68 | Time.outputFormat('YYYY'); 69 | const output = Time.serialize(Time.parseValue(time)); 70 | Assert.equal(output, year); 71 | }); 72 | 73 | describe('.beforeNow', ()=> { 74 | beforeEach(()=> { 75 | Time.beforeNow(); 76 | }); 77 | 78 | it('should accept moments before now', ()=> { 79 | const yesterday = Moment().subtract({day: 1}); 80 | Assert.doesNotThrow(()=> { 81 | Time.parseValue(yesterday); 82 | }); 83 | }); 84 | 85 | it('should not accept moments after now', ()=> { 86 | const tomorrow = Moment().add({day: 1}); 87 | Assert.throws(()=> { 88 | Time.parseValue(tomorrow); 89 | }, /not before/); 90 | }); 91 | }); 92 | 93 | describe('.afterNow', ()=> { 94 | beforeEach(()=> { 95 | Time.afterNow(); 96 | }); 97 | 98 | it('should accept moments after now', ()=> { 99 | const tomorrow = Moment().add({day: 1}); 100 | Assert.doesNotThrow(()=> { 101 | Time.parseValue(tomorrow); 102 | }); 103 | }); 104 | 105 | it('should not accept moments after now', ()=> { 106 | const yesterday = Moment().subtract({day: 1}); 107 | Assert.throws(()=> { 108 | Time.parseValue(yesterday); 109 | }, /not after/); 110 | }); 111 | }); 112 | 113 | describe('.before', ()=> { 114 | const today = Moment(); 115 | const yesterday = today.clone().subtract({day: 1}); 116 | const day_before_yesterday = yesterday.clone().subtract({day: 1}); 117 | 118 | beforeEach(()=> { 119 | Time.before(yesterday); 120 | }); 121 | 122 | it('should accept moments before specified time', ()=> { 123 | Assert.doesNotThrow(()=> { 124 | Time.parseValue(day_before_yesterday); 125 | }); 126 | }); 127 | 128 | it('should reject moments after specified time', ()=> { 129 | Assert.throws(()=> { 130 | Time.parseValue(today); 131 | }, /not before/); 132 | }); 133 | }); 134 | 135 | describe('.after', ()=> { 136 | const today = Moment(); 137 | const yesterday = today.clone().subtract({day: 1}); 138 | const day_before_yesterday = yesterday.clone().subtract({day: 1}); 139 | 140 | beforeEach(()=> { 141 | Time.after(yesterday); 142 | }); 143 | 144 | it('should accept moments after specified time', ()=> { 145 | Assert.doesNotThrow(()=> { 146 | Time.parseValue(today); 147 | }); 148 | }); 149 | 150 | it('should reject moments before specified time', ()=> { 151 | Assert.throws(()=> { 152 | Time.parseValue(day_before_yesterday); 153 | }, /not after/); 154 | }); 155 | }); 156 | }); 157 | }); 158 | -------------------------------------------------------------------------------- /src/GraphQLValidatedNumber.js: -------------------------------------------------------------------------------- 1 | const {Kind} = require('graphql/language'); 2 | 3 | const GraphQLValidatedScalar = require('./GraphQLValidatedScalar'); 4 | 5 | class GraphQLValidatedNumber extends GraphQLValidatedScalar { 6 | constructor (args = {}) { 7 | if (!args.name) { 8 | args.name = 'Number'; 9 | } 10 | super(args); 11 | this.validator(Number); 12 | } 13 | 14 | validKinds () { 15 | return [Kind.INT, Kind.FLOAT]; 16 | } 17 | 18 | validTypes () { 19 | return ['number']; 20 | } 21 | 22 | shouldDefault (value) { 23 | return super.shouldDefault(value) && value !== 0; 24 | } 25 | 26 | limit ({valid, description}) { 27 | return this.validator((num)=> { 28 | if (!valid(num)) { 29 | throw new TypeError(`${this.name} is ${description}`); 30 | } 31 | return num; 32 | }); 33 | } 34 | 35 | min (min) { 36 | return this.limit({ 37 | description: 'below minimum value', 38 | valid: (num)=> { 39 | return num >= min; 40 | } 41 | }); 42 | } 43 | 44 | max (max) { 45 | return this.limit({ 46 | description: 'above maximum value', 47 | valid: (num)=> { 48 | return num <= max; 49 | } 50 | }); 51 | } 52 | 53 | range ([min, max]) { 54 | return this.limit({ 55 | description: 'not within range', 56 | valid: (num)=> { 57 | return num >= min && num <= max; 58 | } 59 | }); 60 | } 61 | 62 | below (limit) { 63 | return this.limit({ 64 | description: 'not below limit', 65 | valid: (num)=> { 66 | return num < limit; 67 | } 68 | }); 69 | } 70 | 71 | above (limit) { 72 | return this.limit({ 73 | description: 'not above limit', 74 | valid: (num)=> { 75 | return num > limit; 76 | } 77 | }); 78 | } 79 | 80 | between ([low, high]) { 81 | return this.limit({ 82 | description: 'not between limits', 83 | valid: (num)=> { 84 | return num > low && num < high; 85 | } 86 | }); 87 | } 88 | 89 | positive () { 90 | return this.limit({ 91 | description: 'not positive', 92 | valid: (num)=> { 93 | return num > 0; 94 | } 95 | }); 96 | } 97 | 98 | negative () { 99 | return this.limit({ 100 | description: 'not negative', 101 | valid: (num)=> { 102 | return num < 0; 103 | } 104 | }); 105 | } 106 | 107 | nonnegative () { 108 | return this.limit({ 109 | description: 'negative', 110 | valid: (num)=> { 111 | return num >= 0; 112 | } 113 | }); 114 | } 115 | } 116 | 117 | module.exports = GraphQLValidatedNumber; 118 | -------------------------------------------------------------------------------- /src/GraphQLValidatedNumber.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedNumber = require('./GraphQLValidatedNumber'); 4 | 5 | describe('GraphQLValidatedNumber', ()=> { 6 | let Number; 7 | 8 | beforeEach(()=> { 9 | Number = new GraphQLValidatedNumber({ 10 | name: 'Number' 11 | }); 12 | }); 13 | 14 | it('should throw on empty string', ()=> { 15 | const input = ''; 16 | 17 | Assert.throws(()=> { 18 | Number.parseValue(input); 19 | }, /is not number/); 20 | }); 21 | 22 | it('should support min value', ()=> { 23 | Number.min(10); 24 | 25 | Assert.equal(Number.parseValue(11), 11); 26 | 27 | Assert.throws(()=> { 28 | Number.parseValue(9); 29 | }, /below minimum value/); 30 | }); 31 | 32 | it('should support max value', ()=> { 33 | Number.max(10); 34 | 35 | Assert.equal(Number.parseValue(10), 10); 36 | 37 | Assert.throws(()=> { 38 | Number.parseValue(11); 39 | }, /above maximum value/); 40 | }); 41 | 42 | it('should support min and max values', ()=> { 43 | Number.max(10).min(5); 44 | 45 | Assert.equal(Number.parseValue(8), 8); 46 | 47 | Assert.throws(()=> { 48 | Number.parseValue(12); 49 | }, /above maximum value/); 50 | 51 | Assert.throws(()=> { 52 | Number.parseValue(3); 53 | }, /below minimum value/); 54 | }); 55 | 56 | it('should support range', ()=> { 57 | Number.range([10, 20]); 58 | 59 | Assert.equal(Number.parseValue(12), 12); 60 | 61 | Assert.throws(()=> { 62 | Number.parseValue(24); 63 | }, /Number is not within range/); 64 | }); 65 | 66 | it('should support lower limit', ()=> { 67 | Number.above(10); 68 | 69 | Assert.equal(Number.parseValue(11), 11); 70 | 71 | Assert.throws(()=> { 72 | Number.parseValue(10); 73 | }, /not above limit/); 74 | }); 75 | 76 | it('should support upper limit', ()=> { 77 | Number.below(10); 78 | 79 | Assert.equal(Number.parseValue(9), 9); 80 | 81 | Assert.throws(()=> { 82 | Number.parseValue(10); 83 | }, /not below limit/); 84 | }); 85 | 86 | it('should support upper and lower limits', ()=> { 87 | Number.above(2).below(10); 88 | 89 | Assert.equal(Number.parseValue(9), 9); 90 | 91 | Assert.throws(()=> { 92 | Number.parseValue(2); 93 | }, /not above limit/); 94 | 95 | Assert.throws(()=> { 96 | Number.parseValue(10); 97 | }, /not below limit/); 98 | }); 99 | 100 | it('should support within', ()=> { 101 | Number.between([10, 20]); 102 | 103 | Assert.equal(Number.parseValue(10.1), 10.1); 104 | 105 | Assert.throws(()=> { 106 | Number.parseValue(20); 107 | }, /Number is not between limits/); 108 | }); 109 | 110 | it('should support positive', ()=> { 111 | Number.positive(); 112 | 113 | Assert.equal(Number.parseValue(9), 9); 114 | 115 | Assert.throws(()=> { 116 | Number.parseValue(-2); 117 | }, /not positive/); 118 | }); 119 | 120 | it('should support negative', ()=> { 121 | Number.negative(); 122 | 123 | Assert.equal(Number.parseValue(-9), -9); 124 | 125 | Assert.throws(()=> { 126 | Number.parseValue(0); 127 | }, /not negative/); 128 | }); 129 | 130 | it('should support nonnegative', ()=> { 131 | Number.nonnegative(); 132 | 133 | Assert.equal(Number.parseValue(0), 0); 134 | 135 | Assert.throws(()=> { 136 | Number.parseValue(-2); 137 | }, /negative/); 138 | }); 139 | 140 | describe('.default(value)', ()=> { 141 | const DEFAULT = 10; 142 | 143 | const SometimesTen = new GraphQLValidatedNumber({ 144 | name: 'SometimesTen' 145 | }).range([8, 16]).default(DEFAULT); 146 | 147 | it('should default null', ()=> { 148 | Assert.equal(SometimesTen.parseValue(null), DEFAULT); 149 | }); 150 | 151 | it('should default undefined', ()=> { 152 | Assert.equal(SometimesTen.parseValue(undefined), DEFAULT); 153 | }); 154 | 155 | it('should not default when numeric passed', ()=> { 156 | Assert.throws(()=> { 157 | SometimesTen.parseValue(40); 158 | }, /not within range/); 159 | }); 160 | 161 | it('should not default when 0 passed', ()=> { 162 | Assert.throws(()=> { 163 | SometimesTen.parseValue(0); 164 | }, /not within range/); 165 | }); 166 | }); 167 | }); 168 | -------------------------------------------------------------------------------- /src/GraphQLValidatedObjectID.js: -------------------------------------------------------------------------------- 1 | const {Kind} = require('graphql/language'); 2 | 3 | const GraphQLValidatedScalar = require('./GraphQLValidatedScalar'); 4 | 5 | class GraphQLValidatedObjectID extends GraphQLValidatedScalar { 6 | constructor (args = {}) { 7 | if (!args.name) { 8 | args.name = 'ObjectID'; 9 | } 10 | super(args); 11 | 12 | this.validator((value)=> { 13 | return new this.ObjectID(value); 14 | }); 15 | } 16 | 17 | get ObjectID () { 18 | const ObjectID = this.constructor._ObjectID; 19 | if (!ObjectID) { 20 | throw new Error('ObjectID has not been set'); 21 | } 22 | return ObjectID; 23 | } 24 | 25 | static set ObjectID (ObjectID) { 26 | this._ObjectID = ObjectID; 27 | } 28 | 29 | validKinds () { 30 | return [Kind.OBJECT, Kind.STRING]; 31 | } 32 | 33 | validTypes () { 34 | return ['object', 'string']; 35 | } 36 | 37 | // overriding base implementation 38 | _serialize (value) { 39 | this._ensureValidType(value); 40 | return value.toHexString(); 41 | } 42 | } 43 | 44 | module.exports = GraphQLValidatedObjectID; 45 | -------------------------------------------------------------------------------- /src/GraphQLValidatedObjectID.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | const MongoDB = require('mongodb'); 3 | 4 | const GraphQLValidatedObjectID = require('./GraphQLValidatedObjectID'); 5 | 6 | const OBJECT_ID_HEX_STRING = '59b035f1485caa25a5505f2d'; 7 | 8 | describe('GraphQLValidatedObjectID', ()=> { 9 | describe('When ObjectID has not been set', ()=> { 10 | it('should throw an error', ()=> { 11 | Assert.throws(()=> { 12 | const ObjectID = new GraphQLValidatedObjectID(); 13 | ObjectID.parseValue(OBJECT_ID_HEX_STRING); 14 | }, /ObjectID has not been set/); 15 | }); 16 | }); 17 | 18 | describe('When ObjectID has been set', ()=> { 19 | let ObjectID; 20 | 21 | beforeEach(()=> { 22 | GraphQLValidatedObjectID.ObjectID = MongoDB.ObjectID; 23 | ObjectID = new GraphQLValidatedObjectID(); 24 | }); 25 | 26 | it('should parse 24 hex string', ()=> { 27 | const oid = ObjectID.parseValue(OBJECT_ID_HEX_STRING); 28 | Assert.equal(oid.toHexString(), OBJECT_ID_HEX_STRING); 29 | }); 30 | 31 | it('should parse ObjectID', ()=> { 32 | const oid = new MongoDB.ObjectID(); 33 | Assert.equal(ObjectID.parseValue(oid), oid); 34 | }); 35 | 36 | it('should parse 12 byte string', ()=> { 37 | const oid = ObjectID.parseValue('aaaaaaaaaaaa'); 38 | Assert.equal(oid.toHexString(), '616161616161616161616161'); 39 | }); 40 | 41 | it('should fail to parse invalid ObjectID', ()=> { 42 | Assert.throws(()=> { 43 | ObjectID.parseValue('abcd'); 44 | }, /Argument passed in must be a single String of 12 bytes or a string of 24 hex characters/); 45 | }); 46 | 47 | it('should serialize to hex string', ()=> { 48 | const oid = ObjectID.parseValue('aaaaaaaaaaaa'); 49 | Assert.equal(ObjectID.serialize(oid), '616161616161616161616161'); 50 | }); 51 | }); 52 | }); 53 | -------------------------------------------------------------------------------- /src/GraphQLValidatedPhoneNumber.js: -------------------------------------------------------------------------------- 1 | const phoneRegex = require('phone-regex'); 2 | 3 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 4 | 5 | class GraphQLValidatedPhoneNumber extends GraphQLValidatedString { 6 | constructor (args = {}) { 7 | if (!args.name) { 8 | args.name = 'Phone'; 9 | } 10 | super(args); 11 | 12 | this._exact = true; 13 | this.setRegex(); 14 | } 15 | 16 | setRegex () { 17 | this.clearValidators(); 18 | const phone_regex = phoneRegex({ 19 | exact: this._exact 20 | }); 21 | return this.regex(phone_regex); 22 | } 23 | 24 | exact (exact = true) { 25 | this._exact = exact; 26 | return this.setRegex(); 27 | } 28 | } 29 | 30 | module.exports = GraphQLValidatedPhoneNumber; 31 | -------------------------------------------------------------------------------- /src/GraphQLValidatedPhoneNumber.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedPhoneNumber = require('./GraphQLValidatedPhoneNumber'); 4 | 5 | describe('GraphQLValidatedPhoneNumber', ()=> { 6 | let PhoneNumber; 7 | 8 | beforeEach(()=> { 9 | PhoneNumber = new GraphQLValidatedPhoneNumber(); 10 | }); 11 | 12 | it('should validate exact phone numbers', ()=> { 13 | PhoneNumber.exact(); 14 | 15 | const input = '1-800-555-1234'; 16 | Assert.equal(PhoneNumber.parseValue(input), input); 17 | 18 | Assert.throws(()=> { 19 | PhoneNumber.parseValue(`${input} blah`); 20 | }, /does not match/); 21 | }); 22 | 23 | it('should validate inexact phone numbers', ()=> { 24 | PhoneNumber.exact(false); 25 | 26 | const input = 'i love 1-800-555-1234'; 27 | Assert.equal(PhoneNumber.parseValue(input), input); 28 | 29 | Assert.throws(()=> { 30 | PhoneNumber.parseValue('blah blah blah'); 31 | }, /does not match/); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /src/GraphQLValidatedScalar.js: -------------------------------------------------------------------------------- 1 | const {GraphQLScalarType} = require('graphql'); 2 | 3 | class GraphQLValidatedScalar extends GraphQLScalarType { 4 | constructor ({name, description = 'custom scalar type'}) { 5 | if (!name) { 6 | name = 'Scalar'; 7 | } 8 | super({ 9 | name, 10 | description, 11 | serialize: (value)=> { 12 | return this._serialize(value); 13 | }, 14 | parseValue: (value)=> { 15 | return this._parseValue(value); 16 | }, 17 | parseLiteral: (ast)=> { 18 | return this._parseLiteral(ast); 19 | } 20 | }); 21 | this._default = null; 22 | this.clearValidators(); 23 | } 24 | 25 | clearValidators () { 26 | this.validators = []; 27 | } 28 | 29 | validKinds () { 30 | return null; 31 | } 32 | 33 | validTypes () { 34 | return null; 35 | } 36 | 37 | _ensureValidType (value) { 38 | const types = this.validTypes(); 39 | if (types) { 40 | const type = typeof value; 41 | if (!types.includes(type)) { 42 | this.throwTypeError(); 43 | } 44 | } 45 | } 46 | 47 | _serialize (value) { 48 | this._ensureValidType(value); 49 | return this.validate(value); 50 | } 51 | 52 | _parseValue (value) { 53 | value = this.ensureDefault(value); 54 | this._ensureValidType(value); 55 | return this.validate(value); 56 | } 57 | 58 | _parseLiteral (ast) { 59 | const {kind} = ast; 60 | const value = this.ensureDefault(ast.value); 61 | 62 | const kinds = this.validKinds(); 63 | if (kinds) { 64 | if (!kinds.includes(kind)) { 65 | this.throwTypeError(); 66 | } 67 | } 68 | 69 | return this.validate(value); 70 | } 71 | 72 | throwTypeError () { 73 | const types = this.validTypes(); 74 | let description = 'has invalid type'; 75 | if (types) { 76 | description = `is not ${types.join(' or ')}`; 77 | } 78 | throw new TypeError(`${this.name} ${description}`); 79 | } 80 | 81 | ensureDefault (value) { 82 | if (this.shouldDefault(value) && this._default) { 83 | value = this._default; 84 | } 85 | return value; 86 | } 87 | 88 | shouldDefault (value) { 89 | return !value; 90 | } 91 | 92 | default (_default) { 93 | this._default = _default; 94 | return this; 95 | } 96 | 97 | validate (value) { 98 | return this.validators.reduce((result, validator)=> { 99 | return validator(result); 100 | }, value); 101 | } 102 | 103 | validator (validator) { 104 | const new_validators = Array.isArray(validator) ? validator : [validator]; 105 | this.validators = [...this.validators, ...new_validators]; 106 | return this; 107 | } 108 | } 109 | 110 | module.exports = GraphQLValidatedScalar; 111 | -------------------------------------------------------------------------------- /src/GraphQLValidatedScalar.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedScalar = require('./GraphQLValidatedScalar'); 4 | 5 | describe('GraphQLValidatedScalar', ()=> { 6 | describe('.validator(fn)', ()=> { 7 | let VowelCountButNoLetterE; 8 | 9 | beforeEach(()=> { 10 | VowelCountButNoLetterE = new GraphQLValidatedScalar({ 11 | name: 'VowelCountButNoLetterE' 12 | }).validator((value)=> { 13 | if (value.match(/e/)) { 14 | throw new Error('E is not allowed'); 15 | } 16 | return value; 17 | }).validator((value)=> { 18 | const vowels = ['a', 'e', 'i', 'o', 'u']; 19 | let count = 0; 20 | for (let i = 0; i < value.length; i++) { 21 | const letter = value[i]; 22 | if (vowels.indexOf(letter) !== -1) { 23 | count++; 24 | } 25 | } 26 | return count; 27 | }); 28 | }); 29 | 30 | it('should validate and transfor input', ()=> { 31 | const count = VowelCountButNoLetterE.parseValue('animals'); 32 | Assert.equal(count, 3); 33 | }); 34 | 35 | it('should throw when validator throws', ()=> { 36 | Assert.throws(()=> { 37 | VowelCountButNoLetterE.parseValue('forever'); 38 | }, /E is not allowed/); 39 | }); 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /src/GraphQLValidatedSemver.js: -------------------------------------------------------------------------------- 1 | const semverRegex = require('semver-regex'); 2 | 3 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 4 | 5 | class GraphQLValidatedSemver extends GraphQLValidatedString { 6 | constructor (args = {}) { 7 | if (!args.name) { 8 | args.name = 'Semver'; 9 | } 10 | super(args); 11 | this.setRegex(); 12 | } 13 | 14 | setRegex () { 15 | this.clearValidators(); 16 | const semver_regex = semverRegex(); 17 | return this.regex(semver_regex); 18 | } 19 | } 20 | 21 | module.exports = GraphQLValidatedSemver; 22 | -------------------------------------------------------------------------------- /src/GraphQLValidatedSemver.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedSemver = require('./GraphQLValidatedSemver'); 4 | 5 | describe('GraphQLValidatedSemver', ()=> { 6 | let Semver; 7 | 8 | beforeEach(()=> { 9 | Semver = new GraphQLValidatedSemver(); 10 | }); 11 | 12 | it('should validate semvers', ()=> { 13 | const input = '1.0.2'; 14 | Assert.equal(Semver.parseValue(input), input); 15 | 16 | Assert.throws(()=> { 17 | Semver.parseValue('~derp@darp---++asdf'); 18 | }, /does not match/); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /src/GraphQLValidatedString.js: -------------------------------------------------------------------------------- 1 | const {Kind} = require('graphql/language'); 2 | 3 | const GraphQLValidatedScalar = require('./GraphQLValidatedScalar'); 4 | 5 | class GraphQLValidatedString extends GraphQLValidatedScalar { 6 | constructor (args = {}) { 7 | if (!args.name) { 8 | args.name = 'String'; 9 | } 10 | super(args); 11 | this.validator(String); 12 | } 13 | 14 | validKinds () { 15 | return [Kind.STRING]; 16 | } 17 | 18 | validTypes () { 19 | return ['string']; 20 | } 21 | 22 | regex (pattern) { 23 | if (!(pattern instanceof RegExp)) { 24 | pattern = new RegExp(pattern); 25 | } 26 | 27 | return this.validator((str)=> { 28 | if (pattern.test(str)) { 29 | return str; 30 | } else { 31 | throw new TypeError(`${this.name} does not match ${pattern}: ${str}`); 32 | } 33 | }); 34 | } 35 | 36 | existsIn (arr) { 37 | return this.validator((str)=> { 38 | const result = arr.find((el)=> { 39 | return el === str; 40 | }); 41 | if (result) { 42 | return str; 43 | } else { 44 | throw new TypeError(`'${str}' was not present in array`); 45 | } 46 | }); 47 | } 48 | 49 | length (length) { 50 | return this.validator((str)=> { 51 | let valid; 52 | if (length.min || length.max) { 53 | const { 54 | min = -Infinity, 55 | max = Infinity 56 | } = length; 57 | valid = (str.length >= min) && (str.length <= max); 58 | } else { 59 | valid = (str.length === length); 60 | } 61 | 62 | if (valid) { 63 | return str; 64 | } else { 65 | throw new TypeError(`${this.name} has invalid length: ${str}`); 66 | } 67 | }); 68 | } 69 | 70 | nonempty () { 71 | return this.length({min: 1}); 72 | } 73 | 74 | trim () { 75 | return this.validator((str)=> { 76 | return str.trim(); 77 | }); 78 | } 79 | 80 | replace (pattern, replacement) { 81 | return this.validator((str)=> { 82 | return str.replace(pattern, replacement); 83 | }); 84 | } 85 | 86 | squish () { 87 | this.trim(); 88 | return this.replace(/\s+/g, ' '); 89 | } 90 | 91 | truncate (length) { 92 | return this.validator((str)=> { 93 | return str.substring(0, length); 94 | }); 95 | } 96 | 97 | // https://stackoverflow.com/a/475217/178043 98 | base64 () { 99 | return this.regex(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/); 100 | } 101 | 102 | hex () { 103 | return this.regex(/^[a-f0-9]+$/i); 104 | } 105 | 106 | alphanumeric () { 107 | return this.regex(/^[a-zA-Z0-9]+$/); 108 | } 109 | 110 | toUpperCase () { 111 | return this.validator((str)=> { 112 | return str.toUpperCase(); 113 | }); 114 | } 115 | 116 | toLowerCase () { 117 | return this.validator((str)=> { 118 | return str.toLowerCase(); 119 | }); 120 | } 121 | } 122 | 123 | module.exports = GraphQLValidatedString; 124 | -------------------------------------------------------------------------------- /src/GraphQLValidatedString.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 4 | 5 | describe('GraphQLValidatedString', ()=> { 6 | describe('.regex(pattern)', ()=> { 7 | let Fart; 8 | 9 | beforeEach(()=> { 10 | Fart = new GraphQLValidatedString({ 11 | name: 'Fart' 12 | }).regex(/fart/); 13 | }); 14 | 15 | it('should support matching regex', ()=> { 16 | Assert.equal(Fart.parseValue('omgfart'), 'omgfart'); 17 | Assert.equal(Fart.parseValue('fart'), 'fart'); 18 | }); 19 | 20 | it('should throw on non-matching regex', ()=> { 21 | Assert.throws(()=> { 22 | Fart.parseValue('honk'); 23 | }, /does not match/); 24 | }); 25 | }); 26 | 27 | describe('.existsIn(arr)', ()=> { 28 | let Flerp; 29 | 30 | beforeEach(()=> { 31 | Flerp = new GraphQLValidatedString({ 32 | name: 'Flerp' 33 | }).existsIn(['Herp', 'Derp']); 34 | }); 35 | 36 | it('should find a value from the array', ()=> { 37 | Assert.equal(Flerp.parseValue('Derp'), 'Derp'); 38 | Assert.equal(Flerp.parseValue('Herp'), 'Herp'); 39 | }); 40 | 41 | it('should throw on a value not in the array', ()=> { 42 | Assert.throws(()=> { 43 | Flerp.parseValue('qwerp'); 44 | }, /'qwerp' was not present in array/); 45 | }); 46 | }); 47 | 48 | describe('.length(length)', ()=> { 49 | let Barfed; 50 | 51 | beforeEach(()=> { 52 | Barfed = new GraphQLValidatedString({ 53 | name: 'Barfed' 54 | }); 55 | }); 56 | 57 | it('should support min length', ()=> { 58 | Barfed.length({min: 5}); 59 | Assert.equal(Barfed.parseValue('barfed'), 'barfed'); 60 | Assert.throws(()=> { 61 | Barfed.parseValue('barf'); 62 | }, /has invalid length/); 63 | }); 64 | 65 | it('should support max length', ()=> { 66 | Barfed.length({max: 5}); 67 | Assert.equal(Barfed.parseValue('barf'), 'barf'); 68 | Assert.throws(()=> { 69 | Barfed.parseValue('barfed'); 70 | }, /has invalid length/); 71 | }); 72 | 73 | it('should support min and max length', ()=> { 74 | Barfed.length({min: 2, max: 5}); 75 | Assert.equal(Barfed.parseValue('barf'), 'barf'); 76 | ['b', 'barfed'].forEach((val)=> { 77 | Assert.throws(()=> { 78 | Barfed.parseValue(val); 79 | }, /has invalid length/); 80 | }); 81 | }); 82 | 83 | it('should support exact length', ()=> { 84 | Barfed.length(4); 85 | Assert.equal(Barfed.parseValue('barf'), 'barf'); 86 | ['bbb', 'bbbbb'].forEach((val)=> { 87 | Assert.throws(()=> { 88 | Barfed.parseValue(val); 89 | }, /has invalid length/); 90 | }); 91 | }); 92 | }); 93 | 94 | describe('.nonempty()', ()=> { 95 | it('should handle checking for empty strings', ()=> { 96 | const Honk = new GraphQLValidatedString({ 97 | name: 'Honk' 98 | }).nonempty(); 99 | 100 | Assert.equal(Honk.parseValue('abcd'), 'abcd'); 101 | 102 | Assert.throws(()=> { 103 | Honk.parseValue(''); 104 | }, /has invalid length/); 105 | }); 106 | }); 107 | 108 | describe('.trim', ()=> { 109 | it('should trim input', ()=> { 110 | const Trim = new GraphQLValidatedString({ 111 | name: 'Trim' 112 | }).trim(); 113 | 114 | const tests = [ 115 | [' abc ', 'abc'], 116 | [' ab c', 'ab c'], 117 | ['abc', 'abc'] 118 | ]; 119 | tests.forEach((test)=> { 120 | const [input, output] = test; 121 | Assert.equal(Trim.parseValue(input), output, `'${input}' !== '${output}'`); 122 | }); 123 | }); 124 | }); 125 | 126 | describe('.replace(pattern, replacement)', ()=> { 127 | it('should replace matching sequences in input', ()=> { 128 | const Replace = new GraphQLValidatedString({ 129 | name: 'Replace' 130 | }).replace(/b+/, 'b'); 131 | 132 | const tests = [ 133 | ['abbbc', 'abc'], 134 | [' abb c', ' ab c'], 135 | ['abc', 'abc'] 136 | ]; 137 | tests.forEach((test)=> { 138 | const [input, output] = test; 139 | Assert.equal(Replace.parseValue(input), output, `'${input}' !== '${output}'`); 140 | }); 141 | }); 142 | }); 143 | 144 | describe('.squish', ()=> { 145 | it('should trim and remove internal repeated spaces', ()=> { 146 | const Squish = new GraphQLValidatedString({ 147 | name: 'Squish' 148 | }).squish(); 149 | 150 | const tests = [ 151 | [' abc ', 'abc'], 152 | [' ab c', 'ab c'], 153 | ['abc', 'abc'] 154 | ]; 155 | tests.forEach((test)=> { 156 | const [input, output] = test; 157 | Assert.equal(Squish.parseValue(input), output, `'${input}' !== '${output}'`); 158 | }); 159 | }); 160 | }); 161 | 162 | describe('.truncate(length)', ()=> { 163 | it('should shorten string to desired length', ()=> { 164 | const Truncate = new GraphQLValidatedString({ 165 | name: 'Truncate' 166 | }).truncate(5); 167 | 168 | const tests = [ 169 | ['abcd', 'abcd'], 170 | ['abcde', 'abcde'], 171 | ['abcdef', 'abcde'] 172 | ]; 173 | tests.forEach((test)=> { 174 | const [input, output] = test; 175 | Assert.equal(Truncate.parseValue(input), output, `'${input}' !== '${output}'`); 176 | }); 177 | }); 178 | }); 179 | 180 | describe('.base64()', ()=> { 181 | it('should handle checking for base64 encoded strings', ()=> { 182 | const Base64 = new GraphQLValidatedString({ 183 | name: 'Base64' 184 | }).base64(); 185 | 186 | const input = 'aGVsbG8sIHdvcmxkIQ=='; 187 | Assert.equal(Base64.parseValue(input), input); 188 | 189 | Assert.throws(()=> { 190 | Base64.parseValue('====='); 191 | }, /does not match/); 192 | }); 193 | }); 194 | 195 | describe('.hex()', ()=> { 196 | it('should handle checking for hex encoded strings', ()=> { 197 | const Hex = new GraphQLValidatedString({ 198 | name: 'Hex' 199 | }).hex(); 200 | 201 | const input = 'AAAA123'; 202 | Assert.equal(Hex.parseValue(input), input); 203 | 204 | Assert.throws(()=> { 205 | Hex.parseValue('====='); 206 | }, /does not match/); 207 | }); 208 | }); 209 | 210 | describe('.alphanumeric()', ()=> { 211 | it('should handle checking for alphanumeric strings', ()=> { 212 | const Alphanumeric = new GraphQLValidatedString({ 213 | name: 'Alphanumeric' 214 | }).alphanumeric(); 215 | 216 | const input = 'Azxy3421'; 217 | Assert.equal(Alphanumeric.parseValue(input), input); 218 | 219 | Assert.throws(()=> { 220 | Alphanumeric.parseValue('!!!!!'); 221 | }, /does not match/); 222 | }); 223 | }); 224 | 225 | describe('.toUpperCase()', ()=> { 226 | it('should handle converting to upper case', ()=> { 227 | const Upper = new GraphQLValidatedString({ 228 | name: 'Upper' 229 | }).toUpperCase(); 230 | 231 | const input = 'Azxy3421'; 232 | Assert.equal(Upper.parseValue(input), 'AZXY3421'); 233 | }); 234 | }); 235 | 236 | describe('.toLowerCase()', ()=> { 237 | it('should handle converting to lower case', ()=> { 238 | const Lower = new GraphQLValidatedString({ 239 | name: 'Lower' 240 | }).toLowerCase(); 241 | 242 | const input = 'AzXy3421'; 243 | Assert.equal(Lower.parseValue(input), 'azxy3421'); 244 | }); 245 | }); 246 | 247 | it('should support multiple constraints and transforms', ()=> { 248 | const Wowz = new GraphQLValidatedString({ 249 | name: 'Wowz' 250 | }) 251 | .trim() 252 | .toLowerCase() 253 | .regex(/wowz/) 254 | .length(4); 255 | 256 | Assert.equal(Wowz.parseValue(' Wowz '), 'wowz'); 257 | Assert.throws(()=> { 258 | Wowz.parseValue('wowzwowz'); 259 | }, /Wowz has invalid length/); 260 | 261 | const CompanyName = new GraphQLValidatedString({ 262 | name: 'CompanyName' 263 | }).squish().length({max: 60}); 264 | Assert.equal(CompanyName.parseValue(' don keys '), 'don keys'); 265 | Assert.throws(()=> { 266 | const name = Array(65).join('x'); 267 | CompanyName.parseValue(name); 268 | }, /CompanyName has invalid length/); 269 | 270 | const Wowzer = new GraphQLValidatedString({ 271 | name: 'Wowzer' 272 | }).length(5).trim(); 273 | Assert.equal(Wowzer.parseValue('abcde'), 'abcde'); 274 | 275 | // trim happens after length check so this fails 276 | Assert.throws(()=> { 277 | Wowzer.parseValue('abcde '); 278 | }, /Wowzer has invalid length/); 279 | }); 280 | 281 | describe('.default(value)', ()=> { 282 | const DEFAULT = '000000'; 283 | 284 | const HexColor = new GraphQLValidatedString({ 285 | name: 'HexColor', 286 | description: 'HexColor string' 287 | }) 288 | .toUpperCase() 289 | .hex() 290 | .length(6) 291 | .default(DEFAULT); 292 | 293 | it('should default null', ()=> { 294 | Assert.equal(HexColor.parseValue(null), DEFAULT); 295 | }); 296 | 297 | it('should default undefined', ()=> { 298 | Assert.equal(HexColor.parseValue(undefined), DEFAULT); 299 | }); 300 | 301 | it('should default empty string', ()=> { 302 | Assert.equal(HexColor.parseValue(''), DEFAULT); 303 | }); 304 | 305 | it('should not default non-empty string', ()=> { 306 | Assert.throws(()=> { 307 | HexColor.parseValue('ABC'); 308 | }, /invalid length/); 309 | }); 310 | }); 311 | }); 312 | -------------------------------------------------------------------------------- /src/GraphQLValidatedURL.js: -------------------------------------------------------------------------------- 1 | const urlRegex = require('url-regex-safe'); 2 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 3 | 4 | class GraphQLValidatedURL extends GraphQLValidatedString { 5 | constructor (args = {}) { 6 | if (!args.name) { 7 | args.name = 'URL'; 8 | } 9 | super(args); 10 | 11 | this._exact = true; 12 | this._strict = true; 13 | this.setRegex(); 14 | } 15 | 16 | setRegex () { 17 | this.clearValidators(); 18 | const url_regex = urlRegex({ 19 | exact: this._exact, 20 | strict: this._strict 21 | }); 22 | return this.regex(url_regex); 23 | } 24 | 25 | strict (strict = true) { 26 | this._strict = strict; 27 | return this.setRegex(); 28 | } 29 | 30 | exact (exact = true) { 31 | this._exact = exact; 32 | return this.setRegex(); 33 | } 34 | } 35 | 36 | module.exports = GraphQLValidatedURL; 37 | -------------------------------------------------------------------------------- /src/GraphQLValidatedURL.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedURL = require('./GraphQLValidatedURL'); 4 | 5 | describe('GraphQLValidatedURL', ()=> { 6 | let URL; 7 | 8 | beforeEach(()=> { 9 | URL = new GraphQLValidatedURL(); 10 | }); 11 | 12 | it('should validate strict and exact urls', ()=> { 13 | URL.strict().exact(); 14 | 15 | const input = 'http://github.com'; 16 | Assert.equal(URL.parseValue(input), input); 17 | 18 | Assert.throws(()=> { 19 | URL.parseValue(`${input} blah`); 20 | }, /does not match/); 21 | }); 22 | 23 | it('should validate nonstrict and inexact urls', ()=> { 24 | URL.strict(false).exact(false); 25 | 26 | const input = 'i love github.com'; 27 | Assert.equal(URL.parseValue(input), input); 28 | 29 | Assert.throws(()=> { 30 | URL.parseValue('blah blah blah'); 31 | }, /does not match/); 32 | }); 33 | }); 34 | -------------------------------------------------------------------------------- /src/GraphQLValidatedUsername.js: -------------------------------------------------------------------------------- 1 | const usernameRegex = require('regex-username'); 2 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 3 | 4 | class GraphQLValidatedUsername extends GraphQLValidatedString { 5 | constructor (args = {}) { 6 | if (!args.name) { 7 | args.name = 'Username'; 8 | } 9 | super(args); 10 | this.setRegex(); 11 | } 12 | 13 | setRegex () { 14 | this.clearValidators(); 15 | const username_regex = usernameRegex(); 16 | return this.regex(username_regex); 17 | } 18 | } 19 | 20 | module.exports = GraphQLValidatedUsername; 21 | -------------------------------------------------------------------------------- /src/GraphQLValidatedUsername.test.js: -------------------------------------------------------------------------------- 1 | const Assert = require('assert'); 2 | 3 | const GraphQLValidatedUsername = require('./GraphQLValidatedUsername'); 4 | 5 | describe('GraphQLValidatedUsername', ()=> { 6 | let Username; 7 | 8 | beforeEach(()=> { 9 | Username = new GraphQLValidatedUsername(); 10 | }); 11 | 12 | it('should validate usernames', ()=> { 13 | const input = 'asdfasdf234'; 14 | Assert.equal(Username.parseValue(input), input); 15 | 16 | Assert.throws(()=> { 17 | Username.parseValue('~derp@darp---++asdf'); 18 | }, /does not match/); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const GraphQLValidatedDate = require('./GraphQLValidatedDate'); 2 | const GraphQLValidatedEmail = require('./GraphQLValidatedEmail'); 3 | const GraphQLValidatedInteger = require('./GraphQLValidatedInteger'); 4 | const GraphQLValidatedIPAddress = require('./GraphQLValidatedIPAddress'); 5 | const GraphQLValidatedMoment = require('./GraphQLValidatedMoment'); 6 | const GraphQLValidatedNumber = require('./GraphQLValidatedNumber'); 7 | const GraphQLValidatedObjectID = require('./GraphQLValidatedObjectID'); 8 | const GraphQLValidatedPhoneNumber = require('./GraphQLValidatedPhoneNumber'); 9 | const GraphQLValidatedScalar = require('./GraphQLValidatedScalar'); 10 | const GraphQLValidatedSemver = require('./GraphQLValidatedSemver'); 11 | const GraphQLValidatedString = require('./GraphQLValidatedString'); 12 | const GraphQLValidatedURL = require('./GraphQLValidatedURL'); 13 | const GraphQLValidatedUsername = require('./GraphQLValidatedUsername'); 14 | 15 | module.exports = { 16 | GraphQLValidatedDate, 17 | GraphQLValidatedEmail, 18 | GraphQLValidatedInteger, 19 | GraphQLValidatedIPAddress, 20 | GraphQLValidatedMoment, 21 | GraphQLValidatedNumber, 22 | GraphQLValidatedObjectID, 23 | GraphQLValidatedPhoneNumber, 24 | GraphQLValidatedScalar, 25 | GraphQLValidatedSemver, 26 | GraphQLValidatedString, 27 | GraphQLValidatedURL, 28 | GraphQLValidatedUsername 29 | }; 30 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": 6 | version "7.10.4" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/core@^7.7.5": 13 | version "7.12.9" 14 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" 15 | integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== 16 | dependencies: 17 | "@babel/code-frame" "^7.10.4" 18 | "@babel/generator" "^7.12.5" 19 | "@babel/helper-module-transforms" "^7.12.1" 20 | "@babel/helpers" "^7.12.5" 21 | "@babel/parser" "^7.12.7" 22 | "@babel/template" "^7.12.7" 23 | "@babel/traverse" "^7.12.9" 24 | "@babel/types" "^7.12.7" 25 | convert-source-map "^1.7.0" 26 | debug "^4.1.0" 27 | gensync "^1.0.0-beta.1" 28 | json5 "^2.1.2" 29 | lodash "^4.17.19" 30 | resolve "^1.3.2" 31 | semver "^5.4.1" 32 | source-map "^0.5.0" 33 | 34 | "@babel/generator@^7.12.5": 35 | version "7.12.5" 36 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" 37 | integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== 38 | dependencies: 39 | "@babel/types" "^7.12.5" 40 | jsesc "^2.5.1" 41 | source-map "^0.5.0" 42 | 43 | "@babel/helper-function-name@^7.10.4": 44 | version "7.10.4" 45 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" 46 | integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== 47 | dependencies: 48 | "@babel/helper-get-function-arity" "^7.10.4" 49 | "@babel/template" "^7.10.4" 50 | "@babel/types" "^7.10.4" 51 | 52 | "@babel/helper-get-function-arity@^7.10.4": 53 | version "7.10.4" 54 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" 55 | integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== 56 | dependencies: 57 | "@babel/types" "^7.10.4" 58 | 59 | "@babel/helper-member-expression-to-functions@^7.12.1": 60 | version "7.12.7" 61 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" 62 | integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== 63 | dependencies: 64 | "@babel/types" "^7.12.7" 65 | 66 | "@babel/helper-module-imports@^7.12.1": 67 | version "7.12.5" 68 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" 69 | integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== 70 | dependencies: 71 | "@babel/types" "^7.12.5" 72 | 73 | "@babel/helper-module-transforms@^7.12.1": 74 | version "7.12.1" 75 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" 76 | integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== 77 | dependencies: 78 | "@babel/helper-module-imports" "^7.12.1" 79 | "@babel/helper-replace-supers" "^7.12.1" 80 | "@babel/helper-simple-access" "^7.12.1" 81 | "@babel/helper-split-export-declaration" "^7.11.0" 82 | "@babel/helper-validator-identifier" "^7.10.4" 83 | "@babel/template" "^7.10.4" 84 | "@babel/traverse" "^7.12.1" 85 | "@babel/types" "^7.12.1" 86 | lodash "^4.17.19" 87 | 88 | "@babel/helper-optimise-call-expression@^7.10.4": 89 | version "7.12.7" 90 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz#7f94ae5e08721a49467346aa04fd22f750033b9c" 91 | integrity sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw== 92 | dependencies: 93 | "@babel/types" "^7.12.7" 94 | 95 | "@babel/helper-replace-supers@^7.12.1": 96 | version "7.12.5" 97 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" 98 | integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== 99 | dependencies: 100 | "@babel/helper-member-expression-to-functions" "^7.12.1" 101 | "@babel/helper-optimise-call-expression" "^7.10.4" 102 | "@babel/traverse" "^7.12.5" 103 | "@babel/types" "^7.12.5" 104 | 105 | "@babel/helper-simple-access@^7.12.1": 106 | version "7.12.1" 107 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" 108 | integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== 109 | dependencies: 110 | "@babel/types" "^7.12.1" 111 | 112 | "@babel/helper-split-export-declaration@^7.11.0": 113 | version "7.11.0" 114 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" 115 | integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== 116 | dependencies: 117 | "@babel/types" "^7.11.0" 118 | 119 | "@babel/helper-validator-identifier@^7.10.4": 120 | version "7.10.4" 121 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 122 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 123 | 124 | "@babel/helpers@^7.12.5": 125 | version "7.12.5" 126 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" 127 | integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== 128 | dependencies: 129 | "@babel/template" "^7.10.4" 130 | "@babel/traverse" "^7.12.5" 131 | "@babel/types" "^7.12.5" 132 | 133 | "@babel/highlight@^7.10.4": 134 | version "7.10.4" 135 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 136 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 137 | dependencies: 138 | "@babel/helper-validator-identifier" "^7.10.4" 139 | chalk "^2.0.0" 140 | js-tokens "^4.0.0" 141 | 142 | "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": 143 | version "7.12.7" 144 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" 145 | integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== 146 | 147 | "@babel/template@^7.10.4", "@babel/template@^7.12.7": 148 | version "7.12.7" 149 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" 150 | integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== 151 | dependencies: 152 | "@babel/code-frame" "^7.10.4" 153 | "@babel/parser" "^7.12.7" 154 | "@babel/types" "^7.12.7" 155 | 156 | "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.7.0": 157 | version "7.12.9" 158 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.9.tgz#fad26c972eabbc11350e0b695978de6cc8e8596f" 159 | integrity sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== 160 | dependencies: 161 | "@babel/code-frame" "^7.10.4" 162 | "@babel/generator" "^7.12.5" 163 | "@babel/helper-function-name" "^7.10.4" 164 | "@babel/helper-split-export-declaration" "^7.11.0" 165 | "@babel/parser" "^7.12.7" 166 | "@babel/types" "^7.12.7" 167 | debug "^4.1.0" 168 | globals "^11.1.0" 169 | lodash "^4.17.19" 170 | 171 | "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.7.0": 172 | version "7.12.7" 173 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.7.tgz#6039ff1e242640a29452c9ae572162ec9a8f5d13" 174 | integrity sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ== 175 | dependencies: 176 | "@babel/helper-validator-identifier" "^7.10.4" 177 | lodash "^4.17.19" 178 | to-fast-properties "^2.0.0" 179 | 180 | "@eslint/eslintrc@^0.2.2": 181 | version "0.2.2" 182 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" 183 | integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== 184 | dependencies: 185 | ajv "^6.12.4" 186 | debug "^4.1.1" 187 | espree "^7.3.0" 188 | globals "^12.1.0" 189 | ignore "^4.0.6" 190 | import-fresh "^3.2.1" 191 | js-yaml "^3.13.1" 192 | lodash "^4.17.19" 193 | minimatch "^3.0.4" 194 | strip-json-comments "^3.1.1" 195 | 196 | "@hello10/eslint-config@1.0.2": 197 | version "1.0.2" 198 | resolved "https://registry.yarnpkg.com/@hello10/eslint-config/-/eslint-config-1.0.2.tgz#895b3ae27f4de4b9d679adf666cc3aa7a47385f7" 199 | integrity sha512-cJI10UPsdhh9T/o+zBQT8WVr/dGW0CtBiBc2FEPAUNu40EJIOe55P9Cj+Z/PauUD/kEJiiayisDbsmyTAWsTlw== 200 | 201 | "@istanbuljs/load-nyc-config@^1.0.0": 202 | version "1.1.0" 203 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 204 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 205 | dependencies: 206 | camelcase "^5.3.1" 207 | find-up "^4.1.0" 208 | get-package-type "^0.1.0" 209 | js-yaml "^3.13.1" 210 | resolve-from "^5.0.0" 211 | 212 | "@istanbuljs/schema@^0.1.2": 213 | version "0.1.2" 214 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" 215 | integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== 216 | 217 | "@types/json5@^0.0.29": 218 | version "0.0.29" 219 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 220 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 221 | 222 | "@ungap/promise-all-settled@1.1.2": 223 | version "1.1.2" 224 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 225 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 226 | 227 | abbrev@1: 228 | version "1.1.1" 229 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 230 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 231 | 232 | acorn-jsx@^5.3.1: 233 | version "5.3.1" 234 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" 235 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 236 | 237 | acorn@^7.4.0: 238 | version "7.4.1" 239 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 240 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 241 | 242 | aggregate-error@^3.0.0: 243 | version "3.1.0" 244 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 245 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 246 | dependencies: 247 | clean-stack "^2.0.0" 248 | indent-string "^4.0.0" 249 | 250 | ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: 251 | version "6.12.6" 252 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 253 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 254 | dependencies: 255 | fast-deep-equal "^3.1.1" 256 | fast-json-stable-stringify "^2.0.0" 257 | json-schema-traverse "^0.4.1" 258 | uri-js "^4.2.2" 259 | 260 | ansi-colors@4.1.1, ansi-colors@^4.1.1: 261 | version "4.1.1" 262 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 263 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 264 | 265 | ansi-regex@^2.0.0: 266 | version "2.1.1" 267 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 268 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 269 | 270 | ansi-regex@^3.0.0: 271 | version "3.0.0" 272 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 273 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 274 | 275 | ansi-regex@^4.1.0: 276 | version "4.1.0" 277 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 278 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 279 | 280 | ansi-regex@^5.0.0: 281 | version "5.0.0" 282 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 283 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 284 | 285 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 286 | version "3.2.1" 287 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 288 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 289 | dependencies: 290 | color-convert "^1.9.0" 291 | 292 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 293 | version "4.3.0" 294 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 295 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 296 | dependencies: 297 | color-convert "^2.0.1" 298 | 299 | anymatch@~3.1.1: 300 | version "3.1.1" 301 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 302 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 303 | dependencies: 304 | normalize-path "^3.0.0" 305 | picomatch "^2.0.4" 306 | 307 | append-transform@^2.0.0: 308 | version "2.0.0" 309 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" 310 | integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== 311 | dependencies: 312 | default-require-extensions "^3.0.0" 313 | 314 | aproba@^1.0.3: 315 | version "1.2.0" 316 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 317 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 318 | 319 | archy@^1.0.0: 320 | version "1.0.0" 321 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 322 | integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= 323 | 324 | are-we-there-yet@~1.1.2: 325 | version "1.1.5" 326 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 327 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 328 | dependencies: 329 | delegates "^1.0.0" 330 | readable-stream "^2.0.6" 331 | 332 | argparse@^1.0.7: 333 | version "1.0.10" 334 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 335 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 336 | dependencies: 337 | sprintf-js "~1.0.2" 338 | 339 | array-includes@^3.1.1: 340 | version "3.1.2" 341 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" 342 | integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== 343 | dependencies: 344 | call-bind "^1.0.0" 345 | define-properties "^1.1.3" 346 | es-abstract "^1.18.0-next.1" 347 | get-intrinsic "^1.0.1" 348 | is-string "^1.0.5" 349 | 350 | array.prototype.flat@^1.2.3: 351 | version "1.2.4" 352 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" 353 | integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== 354 | dependencies: 355 | call-bind "^1.0.0" 356 | define-properties "^1.1.3" 357 | es-abstract "^1.18.0-next.1" 358 | 359 | asn1@~0.2.3: 360 | version "0.2.4" 361 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 362 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 363 | dependencies: 364 | safer-buffer "~2.1.0" 365 | 366 | assert-plus@1.0.0, assert-plus@^1.0.0: 367 | version "1.0.0" 368 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 369 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 370 | 371 | astral-regex@^1.0.0: 372 | version "1.0.0" 373 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 374 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 375 | 376 | asynckit@^0.4.0: 377 | version "0.4.0" 378 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 379 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 380 | 381 | aws-sign2@~0.7.0: 382 | version "0.7.0" 383 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 384 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 385 | 386 | aws4@^1.8.0: 387 | version "1.11.0" 388 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" 389 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 390 | 391 | babel-eslint@10.1.0: 392 | version "10.1.0" 393 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" 394 | integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== 395 | dependencies: 396 | "@babel/code-frame" "^7.0.0" 397 | "@babel/parser" "^7.7.0" 398 | "@babel/traverse" "^7.7.0" 399 | "@babel/types" "^7.7.0" 400 | eslint-visitor-keys "^1.0.0" 401 | resolve "^1.12.0" 402 | 403 | balanced-match@^1.0.0: 404 | version "1.0.0" 405 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 406 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 407 | 408 | bcrypt-pbkdf@^1.0.0: 409 | version "1.0.2" 410 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 411 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 412 | dependencies: 413 | tweetnacl "^0.14.3" 414 | 415 | binary-extensions@^2.0.0: 416 | version "2.1.0" 417 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" 418 | integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== 419 | 420 | bl@^2.2.1: 421 | version "2.2.1" 422 | resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" 423 | integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== 424 | dependencies: 425 | readable-stream "^2.3.5" 426 | safe-buffer "^5.1.1" 427 | 428 | brace-expansion@^1.1.7: 429 | version "1.1.11" 430 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 431 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 432 | dependencies: 433 | balanced-match "^1.0.0" 434 | concat-map "0.0.1" 435 | 436 | braces@~3.0.2: 437 | version "3.0.2" 438 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 439 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 440 | dependencies: 441 | fill-range "^7.0.1" 442 | 443 | browser-stdout@1.3.1: 444 | version "1.3.1" 445 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 446 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 447 | 448 | bson@^1.1.4: 449 | version "1.1.5" 450 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.5.tgz#2aaae98fcdf6750c0848b0cba1ddec3c73060a34" 451 | integrity sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg== 452 | 453 | caching-transform@^4.0.0: 454 | version "4.0.0" 455 | resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" 456 | integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== 457 | dependencies: 458 | hasha "^5.0.0" 459 | make-dir "^3.0.0" 460 | package-hash "^4.0.0" 461 | write-file-atomic "^3.0.0" 462 | 463 | call-bind@^1.0.0: 464 | version "1.0.0" 465 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" 466 | integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== 467 | dependencies: 468 | function-bind "^1.1.1" 469 | get-intrinsic "^1.0.0" 470 | 471 | callsites@^3.0.0: 472 | version "3.1.0" 473 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 474 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 475 | 476 | camelcase@^5.0.0, camelcase@^5.3.1: 477 | version "5.3.1" 478 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 479 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 480 | 481 | camelcase@^6.0.0: 482 | version "6.2.0" 483 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" 484 | integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 485 | 486 | caseless@~0.12.0: 487 | version "0.12.0" 488 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 489 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 490 | 491 | chalk@^2.0.0: 492 | version "2.4.2" 493 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 494 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 495 | dependencies: 496 | ansi-styles "^3.2.1" 497 | escape-string-regexp "^1.0.5" 498 | supports-color "^5.3.0" 499 | 500 | chalk@^4.0.0: 501 | version "4.1.0" 502 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 503 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 504 | dependencies: 505 | ansi-styles "^4.1.0" 506 | supports-color "^7.1.0" 507 | 508 | chokidar@3.4.3: 509 | version "3.4.3" 510 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" 511 | integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== 512 | dependencies: 513 | anymatch "~3.1.1" 514 | braces "~3.0.2" 515 | glob-parent "~5.1.0" 516 | is-binary-path "~2.1.0" 517 | is-glob "~4.0.1" 518 | normalize-path "~3.0.0" 519 | readdirp "~3.5.0" 520 | optionalDependencies: 521 | fsevents "~2.1.2" 522 | 523 | chownr@^2.0.0: 524 | version "2.0.0" 525 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 526 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 527 | 528 | clean-stack@^2.0.0: 529 | version "2.2.0" 530 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 531 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 532 | 533 | cliui@^5.0.0: 534 | version "5.0.0" 535 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 536 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 537 | dependencies: 538 | string-width "^3.1.0" 539 | strip-ansi "^5.2.0" 540 | wrap-ansi "^5.1.0" 541 | 542 | cliui@^6.0.0: 543 | version "6.0.0" 544 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" 545 | integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== 546 | dependencies: 547 | string-width "^4.2.0" 548 | strip-ansi "^6.0.0" 549 | wrap-ansi "^6.2.0" 550 | 551 | code-point-at@^1.0.0: 552 | version "1.1.0" 553 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 554 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 555 | 556 | color-convert@^1.9.0: 557 | version "1.9.3" 558 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 559 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 560 | dependencies: 561 | color-name "1.1.3" 562 | 563 | color-convert@^2.0.1: 564 | version "2.0.1" 565 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 566 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 567 | dependencies: 568 | color-name "~1.1.4" 569 | 570 | color-name@1.1.3: 571 | version "1.1.3" 572 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 573 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 574 | 575 | color-name@~1.1.4: 576 | version "1.1.4" 577 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 578 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 579 | 580 | combined-stream@^1.0.6, combined-stream@~1.0.6: 581 | version "1.0.8" 582 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 583 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 584 | dependencies: 585 | delayed-stream "~1.0.0" 586 | 587 | commondir@^1.0.1: 588 | version "1.0.1" 589 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 590 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 591 | 592 | concat-map@0.0.1: 593 | version "0.0.1" 594 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 595 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 596 | 597 | confusing-browser-globals@^1.0.10: 598 | version "1.0.10" 599 | resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" 600 | integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== 601 | 602 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 603 | version "1.1.0" 604 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 605 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 606 | 607 | contains-path@^0.1.0: 608 | version "0.1.0" 609 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 610 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= 611 | 612 | convert-source-map@^1.7.0: 613 | version "1.7.0" 614 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 615 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 616 | dependencies: 617 | safe-buffer "~5.1.1" 618 | 619 | core-util-is@1.0.2, core-util-is@~1.0.0: 620 | version "1.0.2" 621 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 622 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 623 | 624 | cross-spawn@^7.0.0, cross-spawn@^7.0.2: 625 | version "7.0.3" 626 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 627 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 628 | dependencies: 629 | path-key "^3.1.0" 630 | shebang-command "^2.0.0" 631 | which "^2.0.1" 632 | 633 | dashdash@^1.12.0: 634 | version "1.14.1" 635 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 636 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 637 | dependencies: 638 | assert-plus "^1.0.0" 639 | 640 | debug@4.2.0: 641 | version "4.2.0" 642 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" 643 | integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 644 | dependencies: 645 | ms "2.1.2" 646 | 647 | debug@^2.6.9: 648 | version "2.6.9" 649 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 650 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 651 | dependencies: 652 | ms "2.0.0" 653 | 654 | debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: 655 | version "4.3.1" 656 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 657 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 658 | dependencies: 659 | ms "2.1.2" 660 | 661 | decamelize@^1.2.0: 662 | version "1.2.0" 663 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 664 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 665 | 666 | decamelize@^4.0.0: 667 | version "4.0.0" 668 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 669 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 670 | 671 | deep-is@^0.1.3: 672 | version "0.1.3" 673 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 674 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 675 | 676 | default-require-extensions@^3.0.0: 677 | version "3.0.0" 678 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" 679 | integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== 680 | dependencies: 681 | strip-bom "^4.0.0" 682 | 683 | define-properties@^1.1.3: 684 | version "1.1.3" 685 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 686 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 687 | dependencies: 688 | object-keys "^1.0.12" 689 | 690 | delayed-stream@~1.0.0: 691 | version "1.0.0" 692 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 693 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 694 | 695 | delegates@^1.0.0: 696 | version "1.0.0" 697 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 698 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 699 | 700 | denque@^1.4.1: 701 | version "1.4.1" 702 | resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf" 703 | integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ== 704 | 705 | diff@4.0.2: 706 | version "4.0.2" 707 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 708 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 709 | 710 | doctrine@1.5.0: 711 | version "1.5.0" 712 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 713 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= 714 | dependencies: 715 | esutils "^2.0.2" 716 | isarray "^1.0.0" 717 | 718 | doctrine@^3.0.0: 719 | version "3.0.0" 720 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 721 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 722 | dependencies: 723 | esutils "^2.0.2" 724 | 725 | ecc-jsbn@~0.1.1: 726 | version "0.1.2" 727 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 728 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 729 | dependencies: 730 | jsbn "~0.1.0" 731 | safer-buffer "^2.1.0" 732 | 733 | email-regex@4.0.0: 734 | version "4.0.0" 735 | resolved "https://registry.yarnpkg.com/email-regex/-/email-regex-4.0.0.tgz#3a86bc66afaebb6de2f7eb1251133062c4c8c3d5" 736 | integrity sha512-OxR2NqoYS3ZikqOkju2krRTyxngwjJ5Wh4yalpTqbBnUOr+LLwwjY2x5Sksruw6TieyQDswE5Pc83Eh6RQj3GA== 737 | 738 | emoji-regex@^7.0.1: 739 | version "7.0.3" 740 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 741 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 742 | 743 | emoji-regex@^8.0.0: 744 | version "8.0.0" 745 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 746 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 747 | 748 | enquirer@^2.3.5: 749 | version "2.3.6" 750 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 751 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 752 | dependencies: 753 | ansi-colors "^4.1.1" 754 | 755 | env-paths@^2.2.0: 756 | version "2.2.0" 757 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" 758 | integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== 759 | 760 | error-ex@^1.2.0: 761 | version "1.3.2" 762 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 763 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 764 | dependencies: 765 | is-arrayish "^0.2.1" 766 | 767 | es-abstract@^1.18.0-next.1: 768 | version "1.18.0-next.1" 769 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" 770 | integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== 771 | dependencies: 772 | es-to-primitive "^1.2.1" 773 | function-bind "^1.1.1" 774 | has "^1.0.3" 775 | has-symbols "^1.0.1" 776 | is-callable "^1.2.2" 777 | is-negative-zero "^2.0.0" 778 | is-regex "^1.1.1" 779 | object-inspect "^1.8.0" 780 | object-keys "^1.1.1" 781 | object.assign "^4.1.1" 782 | string.prototype.trimend "^1.0.1" 783 | string.prototype.trimstart "^1.0.1" 784 | 785 | es-to-primitive@^1.2.1: 786 | version "1.2.1" 787 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 788 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 789 | dependencies: 790 | is-callable "^1.1.4" 791 | is-date-object "^1.0.1" 792 | is-symbol "^1.0.2" 793 | 794 | es6-error@^4.0.1: 795 | version "4.1.1" 796 | resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" 797 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== 798 | 799 | escape-string-regexp@4.0.0: 800 | version "4.0.0" 801 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 802 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 803 | 804 | escape-string-regexp@^1.0.5: 805 | version "1.0.5" 806 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 807 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 808 | 809 | eslint-config-airbnb-base@14.2.1: 810 | version "14.2.1" 811 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" 812 | integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== 813 | dependencies: 814 | confusing-browser-globals "^1.0.10" 815 | object.assign "^4.1.2" 816 | object.entries "^1.1.2" 817 | 818 | eslint-import-resolver-node@^0.3.4: 819 | version "0.3.4" 820 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" 821 | integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 822 | dependencies: 823 | debug "^2.6.9" 824 | resolve "^1.13.1" 825 | 826 | eslint-module-utils@^2.6.0: 827 | version "2.6.0" 828 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" 829 | integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== 830 | dependencies: 831 | debug "^2.6.9" 832 | pkg-dir "^2.0.0" 833 | 834 | eslint-plugin-import@2.22.1: 835 | version "2.22.1" 836 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" 837 | integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== 838 | dependencies: 839 | array-includes "^3.1.1" 840 | array.prototype.flat "^1.2.3" 841 | contains-path "^0.1.0" 842 | debug "^2.6.9" 843 | doctrine "1.5.0" 844 | eslint-import-resolver-node "^0.3.4" 845 | eslint-module-utils "^2.6.0" 846 | has "^1.0.3" 847 | minimatch "^3.0.4" 848 | object.values "^1.1.1" 849 | read-pkg-up "^2.0.0" 850 | resolve "^1.17.0" 851 | tsconfig-paths "^3.9.0" 852 | 853 | eslint-plugin-promise@4.2.1: 854 | version "4.2.1" 855 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" 856 | integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== 857 | 858 | eslint-scope@^5.1.1: 859 | version "5.1.1" 860 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 861 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 862 | dependencies: 863 | esrecurse "^4.3.0" 864 | estraverse "^4.1.1" 865 | 866 | eslint-utils@^2.1.0: 867 | version "2.1.0" 868 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 869 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 870 | dependencies: 871 | eslint-visitor-keys "^1.1.0" 872 | 873 | eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 874 | version "1.3.0" 875 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 876 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 877 | 878 | eslint-visitor-keys@^2.0.0: 879 | version "2.0.0" 880 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" 881 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== 882 | 883 | eslint@7.15.0: 884 | version "7.15.0" 885 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.15.0.tgz#eb155fb8ed0865fcf5d903f76be2e5b6cd7e0bc7" 886 | integrity sha512-Vr64xFDT8w30wFll643e7cGrIkPEU50yIiI36OdSIDoSGguIeaLzBo0vpGvzo9RECUqq7htURfwEtKqwytkqzA== 887 | dependencies: 888 | "@babel/code-frame" "^7.0.0" 889 | "@eslint/eslintrc" "^0.2.2" 890 | ajv "^6.10.0" 891 | chalk "^4.0.0" 892 | cross-spawn "^7.0.2" 893 | debug "^4.0.1" 894 | doctrine "^3.0.0" 895 | enquirer "^2.3.5" 896 | eslint-scope "^5.1.1" 897 | eslint-utils "^2.1.0" 898 | eslint-visitor-keys "^2.0.0" 899 | espree "^7.3.1" 900 | esquery "^1.2.0" 901 | esutils "^2.0.2" 902 | file-entry-cache "^6.0.0" 903 | functional-red-black-tree "^1.0.1" 904 | glob-parent "^5.0.0" 905 | globals "^12.1.0" 906 | ignore "^4.0.6" 907 | import-fresh "^3.0.0" 908 | imurmurhash "^0.1.4" 909 | is-glob "^4.0.0" 910 | js-yaml "^3.13.1" 911 | json-stable-stringify-without-jsonify "^1.0.1" 912 | levn "^0.4.1" 913 | lodash "^4.17.19" 914 | minimatch "^3.0.4" 915 | natural-compare "^1.4.0" 916 | optionator "^0.9.1" 917 | progress "^2.0.0" 918 | regexpp "^3.1.0" 919 | semver "^7.2.1" 920 | strip-ansi "^6.0.0" 921 | strip-json-comments "^3.1.0" 922 | table "^5.2.3" 923 | text-table "^0.2.0" 924 | v8-compile-cache "^2.0.3" 925 | 926 | espree@^7.3.0, espree@^7.3.1: 927 | version "7.3.1" 928 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 929 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 930 | dependencies: 931 | acorn "^7.4.0" 932 | acorn-jsx "^5.3.1" 933 | eslint-visitor-keys "^1.3.0" 934 | 935 | esprima@^4.0.0: 936 | version "4.0.1" 937 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 938 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 939 | 940 | esquery@^1.2.0: 941 | version "1.3.1" 942 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" 943 | integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 944 | dependencies: 945 | estraverse "^5.1.0" 946 | 947 | esrecurse@^4.3.0: 948 | version "4.3.0" 949 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 950 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 951 | dependencies: 952 | estraverse "^5.2.0" 953 | 954 | estraverse@^4.1.1: 955 | version "4.3.0" 956 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 957 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 958 | 959 | estraverse@^5.1.0, estraverse@^5.2.0: 960 | version "5.2.0" 961 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" 962 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 963 | 964 | esutils@^2.0.2: 965 | version "2.0.3" 966 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 967 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 968 | 969 | extend@~3.0.2: 970 | version "3.0.2" 971 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 972 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 973 | 974 | extsprintf@1.3.0: 975 | version "1.3.0" 976 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 977 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 978 | 979 | extsprintf@^1.2.0: 980 | version "1.4.0" 981 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 982 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 983 | 984 | fast-deep-equal@^3.1.1: 985 | version "3.1.3" 986 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 987 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 988 | 989 | fast-json-stable-stringify@^2.0.0: 990 | version "2.1.0" 991 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 992 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 993 | 994 | fast-levenshtein@^2.0.6: 995 | version "2.0.6" 996 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 997 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 998 | 999 | file-entry-cache@^6.0.0: 1000 | version "6.0.0" 1001 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" 1002 | integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== 1003 | dependencies: 1004 | flat-cache "^3.0.4" 1005 | 1006 | fill-range@^7.0.1: 1007 | version "7.0.1" 1008 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1009 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1010 | dependencies: 1011 | to-regex-range "^5.0.1" 1012 | 1013 | find-cache-dir@^3.2.0: 1014 | version "3.3.1" 1015 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" 1016 | integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== 1017 | dependencies: 1018 | commondir "^1.0.1" 1019 | make-dir "^3.0.2" 1020 | pkg-dir "^4.1.0" 1021 | 1022 | find-up@5.0.0: 1023 | version "5.0.0" 1024 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1025 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1026 | dependencies: 1027 | locate-path "^6.0.0" 1028 | path-exists "^4.0.0" 1029 | 1030 | find-up@^2.0.0, find-up@^2.1.0: 1031 | version "2.1.0" 1032 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1033 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 1034 | dependencies: 1035 | locate-path "^2.0.0" 1036 | 1037 | find-up@^3.0.0: 1038 | version "3.0.0" 1039 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1040 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 1041 | dependencies: 1042 | locate-path "^3.0.0" 1043 | 1044 | find-up@^4.0.0, find-up@^4.1.0: 1045 | version "4.1.0" 1046 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1047 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1048 | dependencies: 1049 | locate-path "^5.0.0" 1050 | path-exists "^4.0.0" 1051 | 1052 | flat-cache@^3.0.4: 1053 | version "3.0.4" 1054 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1055 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1056 | dependencies: 1057 | flatted "^3.1.0" 1058 | rimraf "^3.0.2" 1059 | 1060 | flat@^5.0.2: 1061 | version "5.0.2" 1062 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 1063 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 1064 | 1065 | flatted@^3.1.0: 1066 | version "3.1.0" 1067 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" 1068 | integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== 1069 | 1070 | foreground-child@^2.0.0: 1071 | version "2.0.0" 1072 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" 1073 | integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== 1074 | dependencies: 1075 | cross-spawn "^7.0.0" 1076 | signal-exit "^3.0.2" 1077 | 1078 | forever-agent@~0.6.1: 1079 | version "0.6.1" 1080 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1081 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 1082 | 1083 | form-data@~2.3.2: 1084 | version "2.3.3" 1085 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 1086 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 1087 | dependencies: 1088 | asynckit "^0.4.0" 1089 | combined-stream "^1.0.6" 1090 | mime-types "^2.1.12" 1091 | 1092 | fromentries@^1.2.0: 1093 | version "1.3.2" 1094 | resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" 1095 | integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== 1096 | 1097 | fs-minipass@^2.0.0: 1098 | version "2.1.0" 1099 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" 1100 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== 1101 | dependencies: 1102 | minipass "^3.0.0" 1103 | 1104 | fs.realpath@^1.0.0: 1105 | version "1.0.0" 1106 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1107 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1108 | 1109 | fsevents@~2.1.2: 1110 | version "2.1.3" 1111 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" 1112 | integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 1113 | 1114 | function-bind@^1.1.1: 1115 | version "1.1.1" 1116 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1117 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1118 | 1119 | functional-red-black-tree@^1.0.1: 1120 | version "1.0.1" 1121 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1122 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1123 | 1124 | gauge@~2.7.3: 1125 | version "2.7.4" 1126 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1127 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 1128 | dependencies: 1129 | aproba "^1.0.3" 1130 | console-control-strings "^1.0.0" 1131 | has-unicode "^2.0.0" 1132 | object-assign "^4.1.0" 1133 | signal-exit "^3.0.0" 1134 | string-width "^1.0.1" 1135 | strip-ansi "^3.0.1" 1136 | wide-align "^1.1.0" 1137 | 1138 | gensync@^1.0.0-beta.1: 1139 | version "1.0.0-beta.2" 1140 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1141 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1142 | 1143 | get-caller-file@^2.0.1: 1144 | version "2.0.5" 1145 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1146 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1147 | 1148 | get-intrinsic@^1.0.0, get-intrinsic@^1.0.1: 1149 | version "1.0.1" 1150 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" 1151 | integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== 1152 | dependencies: 1153 | function-bind "^1.1.1" 1154 | has "^1.0.3" 1155 | has-symbols "^1.0.1" 1156 | 1157 | get-package-type@^0.1.0: 1158 | version "0.1.0" 1159 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1160 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1161 | 1162 | getpass@^0.1.1: 1163 | version "0.1.7" 1164 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1165 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 1166 | dependencies: 1167 | assert-plus "^1.0.0" 1168 | 1169 | glob-parent@^5.0.0, glob-parent@~5.1.0: 1170 | version "5.1.1" 1171 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 1172 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 1173 | dependencies: 1174 | is-glob "^4.0.1" 1175 | 1176 | glob@7.1.6, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: 1177 | version "7.1.6" 1178 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1179 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1180 | dependencies: 1181 | fs.realpath "^1.0.0" 1182 | inflight "^1.0.4" 1183 | inherits "2" 1184 | minimatch "^3.0.4" 1185 | once "^1.3.0" 1186 | path-is-absolute "^1.0.0" 1187 | 1188 | globals@^11.1.0: 1189 | version "11.12.0" 1190 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1191 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1192 | 1193 | globals@^12.1.0: 1194 | version "12.4.0" 1195 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" 1196 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 1197 | dependencies: 1198 | type-fest "^0.8.1" 1199 | 1200 | graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.3: 1201 | version "4.2.4" 1202 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 1203 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 1204 | 1205 | graphql@^14.0.0: 1206 | version "14.7.0" 1207 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.7.0.tgz#7fa79a80a69be4a31c27dda824dc04dac2035a72" 1208 | integrity sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA== 1209 | dependencies: 1210 | iterall "^1.2.2" 1211 | 1212 | growl@1.10.5: 1213 | version "1.10.5" 1214 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1215 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1216 | 1217 | har-schema@^2.0.0: 1218 | version "2.0.0" 1219 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 1220 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 1221 | 1222 | har-validator@~5.1.3: 1223 | version "5.1.5" 1224 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 1225 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== 1226 | dependencies: 1227 | ajv "^6.12.3" 1228 | har-schema "^2.0.0" 1229 | 1230 | has-flag@^3.0.0: 1231 | version "3.0.0" 1232 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1233 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1234 | 1235 | has-flag@^4.0.0: 1236 | version "4.0.0" 1237 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1238 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1239 | 1240 | has-symbols@^1.0.1: 1241 | version "1.0.1" 1242 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 1243 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1244 | 1245 | has-unicode@^2.0.0: 1246 | version "2.0.1" 1247 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1248 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 1249 | 1250 | has@^1.0.3: 1251 | version "1.0.3" 1252 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1253 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1254 | dependencies: 1255 | function-bind "^1.1.1" 1256 | 1257 | hasha@^5.0.0: 1258 | version "5.2.2" 1259 | resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" 1260 | integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== 1261 | dependencies: 1262 | is-stream "^2.0.0" 1263 | type-fest "^0.8.0" 1264 | 1265 | he@1.2.0: 1266 | version "1.2.0" 1267 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1268 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1269 | 1270 | hosted-git-info@^2.1.4: 1271 | version "2.8.8" 1272 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" 1273 | integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== 1274 | 1275 | html-escaper@^2.0.0: 1276 | version "2.0.2" 1277 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1278 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1279 | 1280 | http-signature@~1.2.0: 1281 | version "1.2.0" 1282 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 1283 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 1284 | dependencies: 1285 | assert-plus "^1.0.0" 1286 | jsprim "^1.2.2" 1287 | sshpk "^1.7.0" 1288 | 1289 | ignore@^4.0.6: 1290 | version "4.0.6" 1291 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1292 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1293 | 1294 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1295 | version "3.2.2" 1296 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" 1297 | integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== 1298 | dependencies: 1299 | parent-module "^1.0.0" 1300 | resolve-from "^4.0.0" 1301 | 1302 | imurmurhash@^0.1.4: 1303 | version "0.1.4" 1304 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1305 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1306 | 1307 | indent-string@^4.0.0: 1308 | version "4.0.0" 1309 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 1310 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1311 | 1312 | inflight@^1.0.4: 1313 | version "1.0.6" 1314 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1315 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1316 | dependencies: 1317 | once "^1.3.0" 1318 | wrappy "1" 1319 | 1320 | inherits@2, inherits@~2.0.3: 1321 | version "2.0.4" 1322 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1323 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1324 | 1325 | install-artifact-from-github@^1.2.0: 1326 | version "1.2.0" 1327 | resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.2.0.tgz#adcbd123c16a4337ec44ea76d0ebf253cc16b074" 1328 | integrity sha512-3OxCPcY55XlVM3kkfIpeCgmoSKnMsz2A3Dbhsq0RXpIknKQmrX1YiznCeW9cD2ItFmDxziA3w6Eg8d80AoL3oA== 1329 | 1330 | ip-regex@4.2.0, ip-regex@^4.1.0: 1331 | version "4.2.0" 1332 | resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.2.0.tgz#a03f5eb661d9a154e3973a03de8b23dd0ad6892e" 1333 | integrity sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A== 1334 | 1335 | is-arrayish@^0.2.1: 1336 | version "0.2.1" 1337 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1338 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1339 | 1340 | is-binary-path@~2.1.0: 1341 | version "2.1.0" 1342 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1343 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1344 | dependencies: 1345 | binary-extensions "^2.0.0" 1346 | 1347 | is-callable@^1.1.4, is-callable@^1.2.2: 1348 | version "1.2.2" 1349 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" 1350 | integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== 1351 | 1352 | is-core-module@^2.1.0: 1353 | version "2.2.0" 1354 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" 1355 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== 1356 | dependencies: 1357 | has "^1.0.3" 1358 | 1359 | is-date-object@^1.0.1: 1360 | version "1.0.2" 1361 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" 1362 | integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1363 | 1364 | is-extglob@^2.1.1: 1365 | version "2.1.1" 1366 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1367 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1368 | 1369 | is-fullwidth-code-point@^1.0.0: 1370 | version "1.0.0" 1371 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1372 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 1373 | dependencies: 1374 | number-is-nan "^1.0.0" 1375 | 1376 | is-fullwidth-code-point@^2.0.0: 1377 | version "2.0.0" 1378 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1379 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1380 | 1381 | is-fullwidth-code-point@^3.0.0: 1382 | version "3.0.0" 1383 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1384 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1385 | 1386 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 1387 | version "4.0.1" 1388 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1389 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1390 | dependencies: 1391 | is-extglob "^2.1.1" 1392 | 1393 | is-negative-zero@^2.0.0: 1394 | version "2.0.1" 1395 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" 1396 | integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== 1397 | 1398 | is-number@^7.0.0: 1399 | version "7.0.0" 1400 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1401 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1402 | 1403 | is-plain-obj@^2.1.0: 1404 | version "2.1.0" 1405 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1406 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1407 | 1408 | is-regex@^1.1.1: 1409 | version "1.1.1" 1410 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" 1411 | integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== 1412 | dependencies: 1413 | has-symbols "^1.0.1" 1414 | 1415 | is-stream@^2.0.0: 1416 | version "2.0.0" 1417 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" 1418 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 1419 | 1420 | is-string@^1.0.5: 1421 | version "1.0.5" 1422 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" 1423 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== 1424 | 1425 | is-symbol@^1.0.2: 1426 | version "1.0.3" 1427 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1428 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1429 | dependencies: 1430 | has-symbols "^1.0.1" 1431 | 1432 | is-typedarray@^1.0.0, is-typedarray@~1.0.0: 1433 | version "1.0.0" 1434 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1435 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1436 | 1437 | is-windows@^1.0.2: 1438 | version "1.0.2" 1439 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 1440 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== 1441 | 1442 | isarray@^1.0.0, isarray@~1.0.0: 1443 | version "1.0.0" 1444 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1445 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1446 | 1447 | isexe@^2.0.0: 1448 | version "2.0.0" 1449 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1450 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1451 | 1452 | isstream@~0.1.2: 1453 | version "0.1.2" 1454 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1455 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 1456 | 1457 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: 1458 | version "3.0.0" 1459 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" 1460 | integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== 1461 | 1462 | istanbul-lib-hook@^3.0.0: 1463 | version "3.0.0" 1464 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" 1465 | integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== 1466 | dependencies: 1467 | append-transform "^2.0.0" 1468 | 1469 | istanbul-lib-instrument@^4.0.0: 1470 | version "4.0.3" 1471 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" 1472 | integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== 1473 | dependencies: 1474 | "@babel/core" "^7.7.5" 1475 | "@istanbuljs/schema" "^0.1.2" 1476 | istanbul-lib-coverage "^3.0.0" 1477 | semver "^6.3.0" 1478 | 1479 | istanbul-lib-processinfo@^2.0.2: 1480 | version "2.0.2" 1481 | resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" 1482 | integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== 1483 | dependencies: 1484 | archy "^1.0.0" 1485 | cross-spawn "^7.0.0" 1486 | istanbul-lib-coverage "^3.0.0-alpha.1" 1487 | make-dir "^3.0.0" 1488 | p-map "^3.0.0" 1489 | rimraf "^3.0.0" 1490 | uuid "^3.3.3" 1491 | 1492 | istanbul-lib-report@^3.0.0: 1493 | version "3.0.0" 1494 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" 1495 | integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== 1496 | dependencies: 1497 | istanbul-lib-coverage "^3.0.0" 1498 | make-dir "^3.0.0" 1499 | supports-color "^7.1.0" 1500 | 1501 | istanbul-lib-source-maps@^4.0.0: 1502 | version "4.0.0" 1503 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" 1504 | integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== 1505 | dependencies: 1506 | debug "^4.1.1" 1507 | istanbul-lib-coverage "^3.0.0" 1508 | source-map "^0.6.1" 1509 | 1510 | istanbul-reports@^3.0.2: 1511 | version "3.0.2" 1512 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" 1513 | integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== 1514 | dependencies: 1515 | html-escaper "^2.0.0" 1516 | istanbul-lib-report "^3.0.0" 1517 | 1518 | iterall@^1.2.2: 1519 | version "1.3.0" 1520 | resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" 1521 | integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== 1522 | 1523 | js-tokens@^4.0.0: 1524 | version "4.0.0" 1525 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1526 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1527 | 1528 | js-yaml@3.14.0, js-yaml@^3.13.1: 1529 | version "3.14.0" 1530 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 1531 | integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 1532 | dependencies: 1533 | argparse "^1.0.7" 1534 | esprima "^4.0.0" 1535 | 1536 | jsbn@~0.1.0: 1537 | version "0.1.1" 1538 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1539 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 1540 | 1541 | jsesc@^2.5.1: 1542 | version "2.5.2" 1543 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1544 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1545 | 1546 | json-schema-traverse@^0.4.1: 1547 | version "0.4.1" 1548 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1549 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1550 | 1551 | json-schema@0.2.3: 1552 | version "0.2.3" 1553 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1554 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 1555 | 1556 | json-stable-stringify-without-jsonify@^1.0.1: 1557 | version "1.0.1" 1558 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1559 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1560 | 1561 | json-stringify-safe@~5.0.1: 1562 | version "5.0.1" 1563 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1564 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 1565 | 1566 | json5@^1.0.1: 1567 | version "1.0.1" 1568 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 1569 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 1570 | dependencies: 1571 | minimist "^1.2.0" 1572 | 1573 | json5@^2.1.2: 1574 | version "2.1.3" 1575 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" 1576 | integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== 1577 | dependencies: 1578 | minimist "^1.2.5" 1579 | 1580 | jsprim@^1.2.2: 1581 | version "1.4.1" 1582 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1583 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 1584 | dependencies: 1585 | assert-plus "1.0.0" 1586 | extsprintf "1.3.0" 1587 | json-schema "0.2.3" 1588 | verror "1.10.0" 1589 | 1590 | levn@^0.4.1: 1591 | version "0.4.1" 1592 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1593 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1594 | dependencies: 1595 | prelude-ls "^1.2.1" 1596 | type-check "~0.4.0" 1597 | 1598 | load-json-file@^2.0.0: 1599 | version "2.0.0" 1600 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 1601 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= 1602 | dependencies: 1603 | graceful-fs "^4.1.2" 1604 | parse-json "^2.2.0" 1605 | pify "^2.0.0" 1606 | strip-bom "^3.0.0" 1607 | 1608 | locate-path@^2.0.0: 1609 | version "2.0.0" 1610 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1611 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1612 | dependencies: 1613 | p-locate "^2.0.0" 1614 | path-exists "^3.0.0" 1615 | 1616 | locate-path@^3.0.0: 1617 | version "3.0.0" 1618 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1619 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1620 | dependencies: 1621 | p-locate "^3.0.0" 1622 | path-exists "^3.0.0" 1623 | 1624 | locate-path@^5.0.0: 1625 | version "5.0.0" 1626 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1627 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1628 | dependencies: 1629 | p-locate "^4.1.0" 1630 | 1631 | locate-path@^6.0.0: 1632 | version "6.0.0" 1633 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1634 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1635 | dependencies: 1636 | p-locate "^5.0.0" 1637 | 1638 | lodash.flattendeep@^4.4.0: 1639 | version "4.4.0" 1640 | resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" 1641 | integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= 1642 | 1643 | lodash@^4.17.14, lodash@^4.17.19: 1644 | version "4.17.20" 1645 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" 1646 | integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 1647 | 1648 | log-symbols@4.0.0: 1649 | version "4.0.0" 1650 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" 1651 | integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== 1652 | dependencies: 1653 | chalk "^4.0.0" 1654 | 1655 | lru-cache@^6.0.0: 1656 | version "6.0.0" 1657 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1658 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1659 | dependencies: 1660 | yallist "^4.0.0" 1661 | 1662 | make-dir@^3.0.0, make-dir@^3.0.2: 1663 | version "3.1.0" 1664 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1665 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1666 | dependencies: 1667 | semver "^6.0.0" 1668 | 1669 | memory-pager@^1.0.2: 1670 | version "1.5.0" 1671 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" 1672 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== 1673 | 1674 | mime-db@1.44.0: 1675 | version "1.44.0" 1676 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" 1677 | integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== 1678 | 1679 | mime-types@^2.1.12, mime-types@~2.1.19: 1680 | version "2.1.27" 1681 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" 1682 | integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== 1683 | dependencies: 1684 | mime-db "1.44.0" 1685 | 1686 | minimatch@3.0.4, minimatch@^3.0.4: 1687 | version "3.0.4" 1688 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1689 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1690 | dependencies: 1691 | brace-expansion "^1.1.7" 1692 | 1693 | minimist@^1.2.0, minimist@^1.2.5: 1694 | version "1.2.5" 1695 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1696 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1697 | 1698 | minipass@^3.0.0: 1699 | version "3.1.3" 1700 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" 1701 | integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== 1702 | dependencies: 1703 | yallist "^4.0.0" 1704 | 1705 | minizlib@^2.1.1: 1706 | version "2.1.2" 1707 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" 1708 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== 1709 | dependencies: 1710 | minipass "^3.0.0" 1711 | yallist "^4.0.0" 1712 | 1713 | mkdirp@^1.0.3: 1714 | version "1.0.4" 1715 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1716 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1717 | 1718 | mocha@8.2.1: 1719 | version "8.2.1" 1720 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.2.1.tgz#f2fa68817ed0e53343d989df65ccd358bc3a4b39" 1721 | integrity sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w== 1722 | dependencies: 1723 | "@ungap/promise-all-settled" "1.1.2" 1724 | ansi-colors "4.1.1" 1725 | browser-stdout "1.3.1" 1726 | chokidar "3.4.3" 1727 | debug "4.2.0" 1728 | diff "4.0.2" 1729 | escape-string-regexp "4.0.0" 1730 | find-up "5.0.0" 1731 | glob "7.1.6" 1732 | growl "1.10.5" 1733 | he "1.2.0" 1734 | js-yaml "3.14.0" 1735 | log-symbols "4.0.0" 1736 | minimatch "3.0.4" 1737 | ms "2.1.2" 1738 | nanoid "3.1.12" 1739 | serialize-javascript "5.0.1" 1740 | strip-json-comments "3.1.1" 1741 | supports-color "7.2.0" 1742 | which "2.0.2" 1743 | wide-align "1.1.3" 1744 | workerpool "6.0.2" 1745 | yargs "13.3.2" 1746 | yargs-parser "13.1.2" 1747 | yargs-unparser "2.0.0" 1748 | 1749 | moment@2.29.1: 1750 | version "2.29.1" 1751 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" 1752 | integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== 1753 | 1754 | mongodb@3.6.3: 1755 | version "3.6.3" 1756 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.3.tgz#eddaed0cc3598474d7a15f0f2a5b04848489fd05" 1757 | integrity sha512-rOZuR0QkodZiM+UbQE5kDsJykBqWi0CL4Ec2i1nrGrUI3KO11r6Fbxskqmq3JK2NH7aW4dcccBuUujAP0ERl5w== 1758 | dependencies: 1759 | bl "^2.2.1" 1760 | bson "^1.1.4" 1761 | denque "^1.4.1" 1762 | require_optional "^1.0.1" 1763 | safe-buffer "^5.1.2" 1764 | optionalDependencies: 1765 | saslprep "^1.0.0" 1766 | 1767 | ms@2.0.0: 1768 | version "2.0.0" 1769 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1770 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1771 | 1772 | ms@2.1.2: 1773 | version "2.1.2" 1774 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1775 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1776 | 1777 | nan@^2.14.2: 1778 | version "2.14.2" 1779 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" 1780 | integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== 1781 | 1782 | nanoid@3.1.12: 1783 | version "3.1.12" 1784 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" 1785 | integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== 1786 | 1787 | natural-compare@^1.4.0: 1788 | version "1.4.0" 1789 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1790 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1791 | 1792 | node-gyp@^7.1.2: 1793 | version "7.1.2" 1794 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" 1795 | integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== 1796 | dependencies: 1797 | env-paths "^2.2.0" 1798 | glob "^7.1.4" 1799 | graceful-fs "^4.2.3" 1800 | nopt "^5.0.0" 1801 | npmlog "^4.1.2" 1802 | request "^2.88.2" 1803 | rimraf "^3.0.2" 1804 | semver "^7.3.2" 1805 | tar "^6.0.2" 1806 | which "^2.0.2" 1807 | 1808 | node-preload@^0.2.1: 1809 | version "0.2.1" 1810 | resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" 1811 | integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== 1812 | dependencies: 1813 | process-on-spawn "^1.0.0" 1814 | 1815 | nopt@^5.0.0: 1816 | version "5.0.0" 1817 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" 1818 | integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== 1819 | dependencies: 1820 | abbrev "1" 1821 | 1822 | normalize-package-data@^2.3.2: 1823 | version "2.5.0" 1824 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1825 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1826 | dependencies: 1827 | hosted-git-info "^2.1.4" 1828 | resolve "^1.10.0" 1829 | semver "2 || 3 || 4 || 5" 1830 | validate-npm-package-license "^3.0.1" 1831 | 1832 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1833 | version "3.0.0" 1834 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1835 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1836 | 1837 | npmlog@^4.1.2: 1838 | version "4.1.2" 1839 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1840 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 1841 | dependencies: 1842 | are-we-there-yet "~1.1.2" 1843 | console-control-strings "~1.1.0" 1844 | gauge "~2.7.3" 1845 | set-blocking "~2.0.0" 1846 | 1847 | number-is-nan@^1.0.0: 1848 | version "1.0.1" 1849 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1850 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1851 | 1852 | nyc@15.1.0: 1853 | version "15.1.0" 1854 | resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" 1855 | integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== 1856 | dependencies: 1857 | "@istanbuljs/load-nyc-config" "^1.0.0" 1858 | "@istanbuljs/schema" "^0.1.2" 1859 | caching-transform "^4.0.0" 1860 | convert-source-map "^1.7.0" 1861 | decamelize "^1.2.0" 1862 | find-cache-dir "^3.2.0" 1863 | find-up "^4.1.0" 1864 | foreground-child "^2.0.0" 1865 | get-package-type "^0.1.0" 1866 | glob "^7.1.6" 1867 | istanbul-lib-coverage "^3.0.0" 1868 | istanbul-lib-hook "^3.0.0" 1869 | istanbul-lib-instrument "^4.0.0" 1870 | istanbul-lib-processinfo "^2.0.2" 1871 | istanbul-lib-report "^3.0.0" 1872 | istanbul-lib-source-maps "^4.0.0" 1873 | istanbul-reports "^3.0.2" 1874 | make-dir "^3.0.0" 1875 | node-preload "^0.2.1" 1876 | p-map "^3.0.0" 1877 | process-on-spawn "^1.0.0" 1878 | resolve-from "^5.0.0" 1879 | rimraf "^3.0.0" 1880 | signal-exit "^3.0.2" 1881 | spawn-wrap "^2.0.0" 1882 | test-exclude "^6.0.0" 1883 | yargs "^15.0.2" 1884 | 1885 | oauth-sign@~0.9.0: 1886 | version "0.9.0" 1887 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1888 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1889 | 1890 | object-assign@^4.1.0: 1891 | version "4.1.1" 1892 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1893 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1894 | 1895 | object-inspect@^1.8.0: 1896 | version "1.9.0" 1897 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" 1898 | integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== 1899 | 1900 | object-keys@^1.0.12, object-keys@^1.1.1: 1901 | version "1.1.1" 1902 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 1903 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1904 | 1905 | object.assign@^4.1.1, object.assign@^4.1.2: 1906 | version "4.1.2" 1907 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" 1908 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1909 | dependencies: 1910 | call-bind "^1.0.0" 1911 | define-properties "^1.1.3" 1912 | has-symbols "^1.0.1" 1913 | object-keys "^1.1.1" 1914 | 1915 | object.entries@^1.1.2: 1916 | version "1.1.3" 1917 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" 1918 | integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== 1919 | dependencies: 1920 | call-bind "^1.0.0" 1921 | define-properties "^1.1.3" 1922 | es-abstract "^1.18.0-next.1" 1923 | has "^1.0.3" 1924 | 1925 | object.values@^1.1.1: 1926 | version "1.1.2" 1927 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" 1928 | integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== 1929 | dependencies: 1930 | call-bind "^1.0.0" 1931 | define-properties "^1.1.3" 1932 | es-abstract "^1.18.0-next.1" 1933 | has "^1.0.3" 1934 | 1935 | once@^1.3.0: 1936 | version "1.4.0" 1937 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1938 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1939 | dependencies: 1940 | wrappy "1" 1941 | 1942 | optionator@^0.9.1: 1943 | version "0.9.1" 1944 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1945 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1946 | dependencies: 1947 | deep-is "^0.1.3" 1948 | fast-levenshtein "^2.0.6" 1949 | levn "^0.4.1" 1950 | prelude-ls "^1.2.1" 1951 | type-check "^0.4.0" 1952 | word-wrap "^1.2.3" 1953 | 1954 | p-limit@^1.1.0: 1955 | version "1.3.0" 1956 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 1957 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1958 | dependencies: 1959 | p-try "^1.0.0" 1960 | 1961 | p-limit@^2.0.0, p-limit@^2.2.0: 1962 | version "2.3.0" 1963 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1964 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1965 | dependencies: 1966 | p-try "^2.0.0" 1967 | 1968 | p-limit@^3.0.2: 1969 | version "3.1.0" 1970 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1971 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1972 | dependencies: 1973 | yocto-queue "^0.1.0" 1974 | 1975 | p-locate@^2.0.0: 1976 | version "2.0.0" 1977 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1978 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1979 | dependencies: 1980 | p-limit "^1.1.0" 1981 | 1982 | p-locate@^3.0.0: 1983 | version "3.0.0" 1984 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 1985 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1986 | dependencies: 1987 | p-limit "^2.0.0" 1988 | 1989 | p-locate@^4.1.0: 1990 | version "4.1.0" 1991 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1992 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1993 | dependencies: 1994 | p-limit "^2.2.0" 1995 | 1996 | p-locate@^5.0.0: 1997 | version "5.0.0" 1998 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1999 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 2000 | dependencies: 2001 | p-limit "^3.0.2" 2002 | 2003 | p-map@^3.0.0: 2004 | version "3.0.0" 2005 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" 2006 | integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== 2007 | dependencies: 2008 | aggregate-error "^3.0.0" 2009 | 2010 | p-try@^1.0.0: 2011 | version "1.0.0" 2012 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 2013 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 2014 | 2015 | p-try@^2.0.0: 2016 | version "2.2.0" 2017 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2018 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2019 | 2020 | package-hash@^4.0.0: 2021 | version "4.0.0" 2022 | resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" 2023 | integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== 2024 | dependencies: 2025 | graceful-fs "^4.1.15" 2026 | hasha "^5.0.0" 2027 | lodash.flattendeep "^4.4.0" 2028 | release-zalgo "^1.0.0" 2029 | 2030 | parent-module@^1.0.0: 2031 | version "1.0.1" 2032 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 2033 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 2034 | dependencies: 2035 | callsites "^3.0.0" 2036 | 2037 | parse-json@^2.2.0: 2038 | version "2.2.0" 2039 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 2040 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 2041 | dependencies: 2042 | error-ex "^1.2.0" 2043 | 2044 | path-exists@^3.0.0: 2045 | version "3.0.0" 2046 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2047 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 2048 | 2049 | path-exists@^4.0.0: 2050 | version "4.0.0" 2051 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2052 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2053 | 2054 | path-is-absolute@^1.0.0: 2055 | version "1.0.1" 2056 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2057 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2058 | 2059 | path-key@^3.1.0: 2060 | version "3.1.1" 2061 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2062 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2063 | 2064 | path-parse@^1.0.6: 2065 | version "1.0.6" 2066 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2067 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 2068 | 2069 | path-type@^2.0.0: 2070 | version "2.0.0" 2071 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" 2072 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= 2073 | dependencies: 2074 | pify "^2.0.0" 2075 | 2076 | performance-now@^2.1.0: 2077 | version "2.1.0" 2078 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 2079 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 2080 | 2081 | phone-regex@2.1.0: 2082 | version "2.1.0" 2083 | resolved "https://registry.yarnpkg.com/phone-regex/-/phone-regex-2.1.0.tgz#255f9f8518f0196094ce21ba1dfe732277d20c0d" 2084 | integrity sha512-9lXTghLpr/jU6Dx9JIacAUt3Hl7qVucW8+Iqwx99dvFSO9imlB2xvY6IyT6Sw554QTtHMnhvPUygGaN5k0pv9Q== 2085 | 2086 | picomatch@^2.0.4, picomatch@^2.2.1: 2087 | version "2.2.2" 2088 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 2089 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 2090 | 2091 | pify@^2.0.0: 2092 | version "2.3.0" 2093 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2094 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 2095 | 2096 | pkg-dir@^2.0.0: 2097 | version "2.0.0" 2098 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 2099 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 2100 | dependencies: 2101 | find-up "^2.1.0" 2102 | 2103 | pkg-dir@^4.1.0: 2104 | version "4.2.0" 2105 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2106 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2107 | dependencies: 2108 | find-up "^4.0.0" 2109 | 2110 | prelude-ls@^1.2.1: 2111 | version "1.2.1" 2112 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 2113 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 2114 | 2115 | process-nextick-args@~2.0.0: 2116 | version "2.0.1" 2117 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2118 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2119 | 2120 | process-on-spawn@^1.0.0: 2121 | version "1.0.0" 2122 | resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" 2123 | integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== 2124 | dependencies: 2125 | fromentries "^1.2.0" 2126 | 2127 | progress@^2.0.0: 2128 | version "2.0.3" 2129 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2130 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 2131 | 2132 | psl@^1.1.28: 2133 | version "1.8.0" 2134 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 2135 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 2136 | 2137 | punycode@^2.1.0, punycode@^2.1.1: 2138 | version "2.1.1" 2139 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2140 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2141 | 2142 | qs@~6.5.2: 2143 | version "6.5.2" 2144 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 2145 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 2146 | 2147 | randombytes@^2.1.0: 2148 | version "2.1.0" 2149 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 2150 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 2151 | dependencies: 2152 | safe-buffer "^5.1.0" 2153 | 2154 | re2@^1.15.4: 2155 | version "1.15.9" 2156 | resolved "https://registry.yarnpkg.com/re2/-/re2-1.15.9.tgz#9ed16171edcb0bc4f0e239bf55229ff3f26acbe3" 2157 | integrity sha512-AXWEhpMTBdC+3oqbjdU07dk0pBCvxh5vbOMLERL6Y8FYBSGn4vXlLe8cYszn64Yy7H8keVMrgPzoSvOd4mePpg== 2158 | dependencies: 2159 | install-artifact-from-github "^1.2.0" 2160 | nan "^2.14.2" 2161 | node-gyp "^7.1.2" 2162 | 2163 | read-pkg-up@^2.0.0: 2164 | version "2.0.0" 2165 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" 2166 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= 2167 | dependencies: 2168 | find-up "^2.0.0" 2169 | read-pkg "^2.0.0" 2170 | 2171 | read-pkg@^2.0.0: 2172 | version "2.0.0" 2173 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" 2174 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= 2175 | dependencies: 2176 | load-json-file "^2.0.0" 2177 | normalize-package-data "^2.3.2" 2178 | path-type "^2.0.0" 2179 | 2180 | readable-stream@^2.0.6, readable-stream@^2.3.5: 2181 | version "2.3.7" 2182 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 2183 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 2184 | dependencies: 2185 | core-util-is "~1.0.0" 2186 | inherits "~2.0.3" 2187 | isarray "~1.0.0" 2188 | process-nextick-args "~2.0.0" 2189 | safe-buffer "~5.1.1" 2190 | string_decoder "~1.1.1" 2191 | util-deprecate "~1.0.1" 2192 | 2193 | readdirp@~3.5.0: 2194 | version "3.5.0" 2195 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 2196 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 2197 | dependencies: 2198 | picomatch "^2.2.1" 2199 | 2200 | regex-username@2.0.0: 2201 | version "2.0.0" 2202 | resolved "https://registry.yarnpkg.com/regex-username/-/regex-username-2.0.0.tgz#8c9ed9f7e03b06ba09411367dc049478f6b64537" 2203 | integrity sha1-jJ7Z9+A7BroJQRNn3ASUePa2RTc= 2204 | 2205 | regexpp@^3.1.0: 2206 | version "3.1.0" 2207 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" 2208 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 2209 | 2210 | release-zalgo@^1.0.0: 2211 | version "1.0.0" 2212 | resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" 2213 | integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= 2214 | dependencies: 2215 | es6-error "^4.0.1" 2216 | 2217 | request@^2.88.2: 2218 | version "2.88.2" 2219 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 2220 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 2221 | dependencies: 2222 | aws-sign2 "~0.7.0" 2223 | aws4 "^1.8.0" 2224 | caseless "~0.12.0" 2225 | combined-stream "~1.0.6" 2226 | extend "~3.0.2" 2227 | forever-agent "~0.6.1" 2228 | form-data "~2.3.2" 2229 | har-validator "~5.1.3" 2230 | http-signature "~1.2.0" 2231 | is-typedarray "~1.0.0" 2232 | isstream "~0.1.2" 2233 | json-stringify-safe "~5.0.1" 2234 | mime-types "~2.1.19" 2235 | oauth-sign "~0.9.0" 2236 | performance-now "^2.1.0" 2237 | qs "~6.5.2" 2238 | safe-buffer "^5.1.2" 2239 | tough-cookie "~2.5.0" 2240 | tunnel-agent "^0.6.0" 2241 | uuid "^3.3.2" 2242 | 2243 | require-directory@^2.1.1: 2244 | version "2.1.1" 2245 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2246 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2247 | 2248 | require-main-filename@^2.0.0: 2249 | version "2.0.0" 2250 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2251 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 2252 | 2253 | require_optional@^1.0.1: 2254 | version "1.0.1" 2255 | resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" 2256 | integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== 2257 | dependencies: 2258 | resolve-from "^2.0.0" 2259 | semver "^5.1.0" 2260 | 2261 | resolve-from@^2.0.0: 2262 | version "2.0.0" 2263 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 2264 | integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= 2265 | 2266 | resolve-from@^4.0.0: 2267 | version "4.0.0" 2268 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2269 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2270 | 2271 | resolve-from@^5.0.0: 2272 | version "5.0.0" 2273 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2274 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2275 | 2276 | resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2: 2277 | version "1.19.0" 2278 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" 2279 | integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== 2280 | dependencies: 2281 | is-core-module "^2.1.0" 2282 | path-parse "^1.0.6" 2283 | 2284 | rimraf@^3.0.0, rimraf@^3.0.2: 2285 | version "3.0.2" 2286 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2287 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2288 | dependencies: 2289 | glob "^7.1.3" 2290 | 2291 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: 2292 | version "5.2.1" 2293 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2294 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2295 | 2296 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2297 | version "5.1.2" 2298 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2299 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2300 | 2301 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 2302 | version "2.1.2" 2303 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2304 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2305 | 2306 | saslprep@^1.0.0: 2307 | version "1.0.3" 2308 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" 2309 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== 2310 | dependencies: 2311 | sparse-bitfield "^3.0.3" 2312 | 2313 | semver-regex@3.1.1: 2314 | version "3.1.1" 2315 | resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.1.tgz#9a13c93a9ecf2ac7415c0785acc1c7a19199bfd0" 2316 | integrity sha512-3dPcmFqxblWB/cppQ2qXWqlp9b6GLgAS032+Ec5E0waDVHTkwYIL+7BFI9UqEe0tkoHle2f3pBgvT/Xl95+Dig== 2317 | 2318 | "semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.4.1: 2319 | version "5.7.1" 2320 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2321 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2322 | 2323 | semver@^6.0.0, semver@^6.3.0: 2324 | version "6.3.0" 2325 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2326 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2327 | 2328 | semver@^7.2.1, semver@^7.3.2: 2329 | version "7.3.4" 2330 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" 2331 | integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== 2332 | dependencies: 2333 | lru-cache "^6.0.0" 2334 | 2335 | serialize-javascript@5.0.1: 2336 | version "5.0.1" 2337 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" 2338 | integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== 2339 | dependencies: 2340 | randombytes "^2.1.0" 2341 | 2342 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2343 | version "2.0.0" 2344 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2345 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2346 | 2347 | shebang-command@^2.0.0: 2348 | version "2.0.0" 2349 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2350 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2351 | dependencies: 2352 | shebang-regex "^3.0.0" 2353 | 2354 | shebang-regex@^3.0.0: 2355 | version "3.0.0" 2356 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2357 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2358 | 2359 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2360 | version "3.0.3" 2361 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 2362 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 2363 | 2364 | slice-ansi@^2.1.0: 2365 | version "2.1.0" 2366 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 2367 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 2368 | dependencies: 2369 | ansi-styles "^3.2.0" 2370 | astral-regex "^1.0.0" 2371 | is-fullwidth-code-point "^2.0.0" 2372 | 2373 | source-map@^0.5.0: 2374 | version "0.5.7" 2375 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2376 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2377 | 2378 | source-map@^0.6.1: 2379 | version "0.6.1" 2380 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2381 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2382 | 2383 | sparse-bitfield@^3.0.3: 2384 | version "3.0.3" 2385 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" 2386 | integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= 2387 | dependencies: 2388 | memory-pager "^1.0.2" 2389 | 2390 | spawn-wrap@^2.0.0: 2391 | version "2.0.0" 2392 | resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" 2393 | integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== 2394 | dependencies: 2395 | foreground-child "^2.0.0" 2396 | is-windows "^1.0.2" 2397 | make-dir "^3.0.0" 2398 | rimraf "^3.0.0" 2399 | signal-exit "^3.0.2" 2400 | which "^2.0.1" 2401 | 2402 | spdx-correct@^3.0.0: 2403 | version "3.1.1" 2404 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 2405 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 2406 | dependencies: 2407 | spdx-expression-parse "^3.0.0" 2408 | spdx-license-ids "^3.0.0" 2409 | 2410 | spdx-exceptions@^2.1.0: 2411 | version "2.3.0" 2412 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 2413 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 2414 | 2415 | spdx-expression-parse@^3.0.0: 2416 | version "3.0.1" 2417 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 2418 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 2419 | dependencies: 2420 | spdx-exceptions "^2.1.0" 2421 | spdx-license-ids "^3.0.0" 2422 | 2423 | spdx-license-ids@^3.0.0: 2424 | version "3.0.7" 2425 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" 2426 | integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== 2427 | 2428 | sprintf-js@~1.0.2: 2429 | version "1.0.3" 2430 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2431 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2432 | 2433 | sshpk@^1.7.0: 2434 | version "1.16.1" 2435 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 2436 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 2437 | dependencies: 2438 | asn1 "~0.2.3" 2439 | assert-plus "^1.0.0" 2440 | bcrypt-pbkdf "^1.0.0" 2441 | dashdash "^1.12.0" 2442 | ecc-jsbn "~0.1.1" 2443 | getpass "^0.1.1" 2444 | jsbn "~0.1.0" 2445 | safer-buffer "^2.0.2" 2446 | tweetnacl "~0.14.0" 2447 | 2448 | string-width@^1.0.1: 2449 | version "1.0.2" 2450 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2451 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 2452 | dependencies: 2453 | code-point-at "^1.0.0" 2454 | is-fullwidth-code-point "^1.0.0" 2455 | strip-ansi "^3.0.0" 2456 | 2457 | "string-width@^1.0.2 || 2": 2458 | version "2.1.1" 2459 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2460 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2461 | dependencies: 2462 | is-fullwidth-code-point "^2.0.0" 2463 | strip-ansi "^4.0.0" 2464 | 2465 | string-width@^3.0.0, string-width@^3.1.0: 2466 | version "3.1.0" 2467 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2468 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2469 | dependencies: 2470 | emoji-regex "^7.0.1" 2471 | is-fullwidth-code-point "^2.0.0" 2472 | strip-ansi "^5.1.0" 2473 | 2474 | string-width@^4.1.0, string-width@^4.2.0: 2475 | version "4.2.0" 2476 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 2477 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 2478 | dependencies: 2479 | emoji-regex "^8.0.0" 2480 | is-fullwidth-code-point "^3.0.0" 2481 | strip-ansi "^6.0.0" 2482 | 2483 | string.prototype.trimend@^1.0.1: 2484 | version "1.0.3" 2485 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" 2486 | integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== 2487 | dependencies: 2488 | call-bind "^1.0.0" 2489 | define-properties "^1.1.3" 2490 | 2491 | string.prototype.trimstart@^1.0.1: 2492 | version "1.0.3" 2493 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" 2494 | integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== 2495 | dependencies: 2496 | call-bind "^1.0.0" 2497 | define-properties "^1.1.3" 2498 | 2499 | string_decoder@~1.1.1: 2500 | version "1.1.1" 2501 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2502 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2503 | dependencies: 2504 | safe-buffer "~5.1.0" 2505 | 2506 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2507 | version "3.0.1" 2508 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2509 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 2510 | dependencies: 2511 | ansi-regex "^2.0.0" 2512 | 2513 | strip-ansi@^4.0.0: 2514 | version "4.0.0" 2515 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2516 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2517 | dependencies: 2518 | ansi-regex "^3.0.0" 2519 | 2520 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 2521 | version "5.2.0" 2522 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2523 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2524 | dependencies: 2525 | ansi-regex "^4.1.0" 2526 | 2527 | strip-ansi@^6.0.0: 2528 | version "6.0.0" 2529 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2530 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2531 | dependencies: 2532 | ansi-regex "^5.0.0" 2533 | 2534 | strip-bom@^3.0.0: 2535 | version "3.0.0" 2536 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2537 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2538 | 2539 | strip-bom@^4.0.0: 2540 | version "4.0.0" 2541 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2542 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2543 | 2544 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 2545 | version "3.1.1" 2546 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2547 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2548 | 2549 | supports-color@7.2.0, supports-color@^7.1.0: 2550 | version "7.2.0" 2551 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2552 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2553 | dependencies: 2554 | has-flag "^4.0.0" 2555 | 2556 | supports-color@^5.3.0: 2557 | version "5.5.0" 2558 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2559 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2560 | dependencies: 2561 | has-flag "^3.0.0" 2562 | 2563 | table@^5.2.3: 2564 | version "5.4.6" 2565 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 2566 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 2567 | dependencies: 2568 | ajv "^6.10.2" 2569 | lodash "^4.17.14" 2570 | slice-ansi "^2.1.0" 2571 | string-width "^3.0.0" 2572 | 2573 | tar@^6.0.2: 2574 | version "6.0.5" 2575 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" 2576 | integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== 2577 | dependencies: 2578 | chownr "^2.0.0" 2579 | fs-minipass "^2.0.0" 2580 | minipass "^3.0.0" 2581 | minizlib "^2.1.1" 2582 | mkdirp "^1.0.3" 2583 | yallist "^4.0.0" 2584 | 2585 | test-exclude@^6.0.0: 2586 | version "6.0.0" 2587 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2588 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2589 | dependencies: 2590 | "@istanbuljs/schema" "^0.1.2" 2591 | glob "^7.1.4" 2592 | minimatch "^3.0.4" 2593 | 2594 | text-table@^0.2.0: 2595 | version "0.2.0" 2596 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2597 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2598 | 2599 | tlds@^1.209.0: 2600 | version "1.214.0" 2601 | resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.214.0.tgz#a20191443eec26fd3339a3bd98e87a0b4f3f0d89" 2602 | integrity sha512-+i48KYsrCkkIZnsj31cTIj9cu5NtFxKo7xlNIB7jg8kXi//b4Ertl5qaHgqFF+y+g0nFwt/k+eph2uUNQJgfwg== 2603 | 2604 | to-fast-properties@^2.0.0: 2605 | version "2.0.0" 2606 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2607 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2608 | 2609 | to-regex-range@^5.0.1: 2610 | version "5.0.1" 2611 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2612 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2613 | dependencies: 2614 | is-number "^7.0.0" 2615 | 2616 | tough-cookie@~2.5.0: 2617 | version "2.5.0" 2618 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 2619 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 2620 | dependencies: 2621 | psl "^1.1.28" 2622 | punycode "^2.1.1" 2623 | 2624 | tsconfig-paths@^3.9.0: 2625 | version "3.9.0" 2626 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" 2627 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== 2628 | dependencies: 2629 | "@types/json5" "^0.0.29" 2630 | json5 "^1.0.1" 2631 | minimist "^1.2.0" 2632 | strip-bom "^3.0.0" 2633 | 2634 | tunnel-agent@^0.6.0: 2635 | version "0.6.0" 2636 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2637 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 2638 | dependencies: 2639 | safe-buffer "^5.0.1" 2640 | 2641 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2642 | version "0.14.5" 2643 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2644 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 2645 | 2646 | type-check@^0.4.0, type-check@~0.4.0: 2647 | version "0.4.0" 2648 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2649 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2650 | dependencies: 2651 | prelude-ls "^1.2.1" 2652 | 2653 | type-fest@^0.8.0, type-fest@^0.8.1: 2654 | version "0.8.1" 2655 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 2656 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 2657 | 2658 | typedarray-to-buffer@^3.1.5: 2659 | version "3.1.5" 2660 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 2661 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 2662 | dependencies: 2663 | is-typedarray "^1.0.0" 2664 | 2665 | uri-js@^4.2.2: 2666 | version "4.4.0" 2667 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" 2668 | integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== 2669 | dependencies: 2670 | punycode "^2.1.0" 2671 | 2672 | url-regex-safe@1.0.2: 2673 | version "1.0.2" 2674 | resolved "https://registry.yarnpkg.com/url-regex-safe/-/url-regex-safe-1.0.2.tgz#822cbab107d7f4f80342f0f0798acf63cac9fd1d" 2675 | integrity sha512-t1doIKbYDBRyqXZz7A98AXH/zimKmYapxFjBZwcz3BmqjB921rUPEUokAaShKyenaX3McOM8FbkWLvFvX3Jsyw== 2676 | dependencies: 2677 | ip-regex "^4.1.0" 2678 | re2 "^1.15.4" 2679 | tlds "^1.209.0" 2680 | 2681 | util-deprecate@~1.0.1: 2682 | version "1.0.2" 2683 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2684 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2685 | 2686 | uuid@^3.3.2, uuid@^3.3.3: 2687 | version "3.4.0" 2688 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 2689 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 2690 | 2691 | v8-compile-cache@^2.0.3: 2692 | version "2.2.0" 2693 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" 2694 | integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== 2695 | 2696 | validate-npm-package-license@^3.0.1: 2697 | version "3.0.4" 2698 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2699 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2700 | dependencies: 2701 | spdx-correct "^3.0.0" 2702 | spdx-expression-parse "^3.0.0" 2703 | 2704 | verror@1.10.0: 2705 | version "1.10.0" 2706 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2707 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 2708 | dependencies: 2709 | assert-plus "^1.0.0" 2710 | core-util-is "1.0.2" 2711 | extsprintf "^1.2.0" 2712 | 2713 | which-module@^2.0.0: 2714 | version "2.0.0" 2715 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2716 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2717 | 2718 | which@2.0.2, which@^2.0.1, which@^2.0.2: 2719 | version "2.0.2" 2720 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2721 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2722 | dependencies: 2723 | isexe "^2.0.0" 2724 | 2725 | wide-align@1.1.3, wide-align@^1.1.0: 2726 | version "1.1.3" 2727 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2728 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2729 | dependencies: 2730 | string-width "^1.0.2 || 2" 2731 | 2732 | word-wrap@^1.2.3: 2733 | version "1.2.3" 2734 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2735 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2736 | 2737 | workerpool@6.0.2: 2738 | version "6.0.2" 2739 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.0.2.tgz#e241b43d8d033f1beb52c7851069456039d1d438" 2740 | integrity sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== 2741 | 2742 | wrap-ansi@^5.1.0: 2743 | version "5.1.0" 2744 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 2745 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 2746 | dependencies: 2747 | ansi-styles "^3.2.0" 2748 | string-width "^3.0.0" 2749 | strip-ansi "^5.0.0" 2750 | 2751 | wrap-ansi@^6.2.0: 2752 | version "6.2.0" 2753 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" 2754 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 2755 | dependencies: 2756 | ansi-styles "^4.0.0" 2757 | string-width "^4.1.0" 2758 | strip-ansi "^6.0.0" 2759 | 2760 | wrappy@1: 2761 | version "1.0.2" 2762 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2763 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2764 | 2765 | write-file-atomic@^3.0.0: 2766 | version "3.0.3" 2767 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 2768 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 2769 | dependencies: 2770 | imurmurhash "^0.1.4" 2771 | is-typedarray "^1.0.0" 2772 | signal-exit "^3.0.2" 2773 | typedarray-to-buffer "^3.1.5" 2774 | 2775 | y18n@^4.0.0: 2776 | version "4.0.1" 2777 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" 2778 | integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== 2779 | 2780 | yallist@^4.0.0: 2781 | version "4.0.0" 2782 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2783 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2784 | 2785 | yargs-parser@13.1.2, yargs-parser@^13.1.2: 2786 | version "13.1.2" 2787 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" 2788 | integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 2789 | dependencies: 2790 | camelcase "^5.0.0" 2791 | decamelize "^1.2.0" 2792 | 2793 | yargs-parser@^18.1.2: 2794 | version "18.1.3" 2795 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" 2796 | integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== 2797 | dependencies: 2798 | camelcase "^5.0.0" 2799 | decamelize "^1.2.0" 2800 | 2801 | yargs-unparser@2.0.0: 2802 | version "2.0.0" 2803 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 2804 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2805 | dependencies: 2806 | camelcase "^6.0.0" 2807 | decamelize "^4.0.0" 2808 | flat "^5.0.2" 2809 | is-plain-obj "^2.1.0" 2810 | 2811 | yargs@13.3.2: 2812 | version "13.3.2" 2813 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" 2814 | integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 2815 | dependencies: 2816 | cliui "^5.0.0" 2817 | find-up "^3.0.0" 2818 | get-caller-file "^2.0.1" 2819 | require-directory "^2.1.1" 2820 | require-main-filename "^2.0.0" 2821 | set-blocking "^2.0.0" 2822 | string-width "^3.0.0" 2823 | which-module "^2.0.0" 2824 | y18n "^4.0.0" 2825 | yargs-parser "^13.1.2" 2826 | 2827 | yargs@^15.0.2: 2828 | version "15.4.1" 2829 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" 2830 | integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== 2831 | dependencies: 2832 | cliui "^6.0.0" 2833 | decamelize "^1.2.0" 2834 | find-up "^4.1.0" 2835 | get-caller-file "^2.0.1" 2836 | require-directory "^2.1.1" 2837 | require-main-filename "^2.0.0" 2838 | set-blocking "^2.0.0" 2839 | string-width "^4.2.0" 2840 | which-module "^2.0.0" 2841 | y18n "^4.0.0" 2842 | yargs-parser "^18.1.2" 2843 | 2844 | yocto-queue@^0.1.0: 2845 | version "0.1.0" 2846 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2847 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2848 | --------------------------------------------------------------------------------