├── .babelrc ├── .eslintrc ├── .flowconfig ├── .gitignore ├── .npmignore ├── .travis.yml ├── CNAME ├── LICENSE ├── README.md ├── _config.yml ├── docs └── API.md ├── flow-typed └── npm │ └── ramda_v0.x.x.js ├── package.json ├── rollup.config.js ├── src ├── index.js └── utils │ └── warning.js ├── test └── index.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0"], 3 | "plugins": ["transform-flow-strip-types", "transform-object-rest-spread", "ramda"] 4 | } 5 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "airbnb-base", 3 | "parser": "babel-eslint", 4 | "parserOptions": { 5 | "ecmaVersion": 7, 6 | "sourceType": "module", 7 | "ecmaFeatures": { 8 | "impliedStrict": true, 9 | "experimentalObjectRestSpread": true 10 | } 11 | }, 12 | "rules": { 13 | "arrow-parens": 0, 14 | "class-methods-use-this": 0, 15 | "import/no-extraneous-dependencies": 0, 16 | "no-confusing-arrow": 0, 17 | "no-duplicate-imports": 0, 18 | "no-else-return": 0, 19 | "no-prototype-builtins": 0, 20 | "no-unused-vars": [2, { "varsIgnorePattern": "^_+$" }], 21 | "quote-props": 0, 22 | "semi": [2, "never"], 23 | "space-before-function-paren": 0, 24 | "symbol-description": 0, 25 | "valid-jsdoc": 0, 26 | "max-len": 0 27 | } 28 | } -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | .*/node_modules/.* 3 | 4 | [include] 5 | 6 | [libs] 7 | 8 | [options] 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | dist 4 | npm-debug.log 5 | yarn-error.log 6 | example/node_modules -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | .babelrc 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | cache: yarn 3 | node_js: 4 | - "6" 5 | sudo: false 6 | script: 7 | - npm test -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | spected.oss.25th-floor.com -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 25th-floor GmbH 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spected 2 | 3 | ### Validation Library 4 | 5 | __Spected__ is a low level validation library for validating objects against defined validation rules. 6 | Framework specific validation libraries can be built upon __spected__, leveraging the __spected__ appraoch of separating the speciific input from any validation. 7 | Furthermore it can be used to verify the validity deeply nested objects, f.e. server side validation of data or client side validation of JSON objects. 8 | __Spected__ can also be used to validate Form inputs etc. 9 | 10 | 11 | ### Getting started 12 | 13 | Install Spected via npm or yarn. 14 | 15 | 16 | ``` 17 | npm install --save spected 18 | ``` 19 | 20 | ### Use Case 21 | __Spected__ takes care of running your predicate functions against provided inputs, by separating the validation from the input. 22 | For example we would like to define a number of validation rules for two inputs, _name_ and _random_. 23 | 24 | ```javascript 25 | const validationRules = { 26 | name: [ 27 | [ isGreaterThan(5), 28 | `Minimum Name length of 6 is required.` 29 | ], 30 | ], 31 | random: [ 32 | [ isGreaterThan(7), 'Minimum Random length of 8 is required.' ], 33 | [ hasCapitalLetter, 'Random should contain at least one uppercase letter.' ], 34 | ] 35 | } 36 | ``` 37 | And imagine this is our input data. 38 | 39 | ```javascript 40 | const inputData = { name: 'abcdef', random: 'z'} 41 | ``` 42 | 43 | We would like to have a result that displays any possible errors. 44 | 45 | Calling validate `spected(validationRules, inputData)` 46 | should return 47 | 48 | ```javascript 49 | {name: true, 50 | random: [ 51 | 'Minimum Random length of 8 is required.', 52 | 'Random should contain at least one uppercase letter.' 53 | ]} 54 | ``` 55 | 56 | You can also pass in an array of items as an input and validate that all are valid. 57 | You need to write the appropriate function to handle any specific case. 58 | 59 | ```javascript 60 | const userSpec = [ 61 | [ 62 | items => all(isLengthGreaterThan(5), items), 63 | 'Every item must have have at least 6 characters!' 64 | ] 65 | ] 66 | 67 | const validationRules = { 68 | id: [[ notEmpty, notEmptyMsg('id') ]], 69 | users: userSpec, 70 | } 71 | 72 | const input = { 73 | id: 4, 74 | users: ['foobar', 'foobarbaz'] 75 | } 76 | 77 | spected(validationRules, input) 78 | 79 | ``` 80 | 81 | ##### Validating Dynamic Data 82 | There are cases where a validation has to run against an unknown number of items. f.e. submitting a form with dynamic fields. 83 | These dynamic fields can be an array or as object keys. 84 | 85 | ```js 86 | 87 | const input = { 88 | id: 4, 89 | users: [ 90 | {firstName: 'foobar', lastName: 'action'}, 91 | {firstName: 'foo', lastName: 'bar'}, 92 | {firstName: 'foobar', lastName: 'Action'}, 93 | ] 94 | } 95 | 96 | ``` 97 | 98 | All `users` need to run against the same spec. 99 | 100 | ```js 101 | 102 | const capitalLetterMsg = 'Capital Letter needed.' 103 | 104 | const userSpec = { 105 | firstName: [[isLengthGreaterThan(5), minimumMsg('firstName', 6)]], 106 | lastName: [[hasCapitalLetter, capitalLetterMsg]], 107 | } 108 | 109 | ``` 110 | 111 | As we're only dealing with functions, map over `userSpec` and run the predicates against every collection item. 112 | 113 | ```js 114 | 115 | const validationRules = { 116 | id: [[ notEmpty, notEmptyMsg('id') ]], 117 | users: map(always(userSpec)), 118 | } 119 | 120 | spected(validationRules, input) 121 | 122 | ``` 123 | 124 | In case of an object containing an unknown number of properties, the approach is the following. 125 | 126 | ```js 127 | 128 | const input = { 129 | id: 4, 130 | users: { 131 | one: {firstName: 'foobar', lastName: 'action'}, 132 | two: {firstName: 'foo', lastName: 'bar'}, 133 | three: {firstName: 'foobar', lastName: 'Action'}, 134 | } 135 | } 136 | 137 | ``` 138 | 139 | Spected can also work with functions instead of an `[predFn, errorMsg]` tuple array, which means one can specify a function 140 | that expects the input and then maps every rule to the object. Note: This example uses Ramda `map`, which expects the 141 | function as the first argument and then always returns the UserSpec for every property. 142 | 143 | ```js 144 | 145 | const validationRules = { 146 | id: [[ notEmpty, notEmptyMsg('id') ]], 147 | users: map(() => userSpec)), 148 | } 149 | 150 | ``` 151 | 152 | How `UserSpec` is applied to every Object key is not spected specific, but can be freely implemented as needed. 153 | 154 | Spected also accepts a function as an input, i.e. to simulate if a field would contain errors if empty. 155 | 156 | ``` 157 | const verify = validate(a => a, a => a) 158 | const validationRules = { 159 | name: nameValidationRule, 160 | } 161 | const input = {name: 'foobarbaz'} 162 | const result = verify(validationRules, key => key ? ({...input, [key]: ''}) : input) 163 | deepEqual({name: ['Name should not be empty.']}, result) 164 | 165 | ``` 166 | 167 | ### Basic Example 168 | 169 | ```js 170 | 171 | import { 172 | compose, 173 | curry, 174 | head, 175 | isEmpty, 176 | length, 177 | not, 178 | prop, 179 | } from 'ramda' 180 | 181 | import spected from 'spected' 182 | 183 | // predicates 184 | 185 | const notEmpty = compose(not, isEmpty) 186 | const hasCapitalLetter = a => /[A-Z]/.test(a) 187 | const isGreaterThan = curry((len, a) => (a > len)) 188 | const isLengthGreaterThan = len => compose(isGreaterThan(len), prop('length')) 189 | 190 | 191 | // error messages 192 | 193 | const notEmptyMsg = field => `${field} should not be empty.` 194 | const minimumMsg = (field, len) => `Minimum ${field} length of ${len} is required.` 195 | const capitalLetterMsg = field => `${field} should contain at least one uppercase letter.` 196 | 197 | // rules 198 | 199 | const nameValidationRule = [[notEmpty, notEmptyMsg('Name')]] 200 | 201 | const randomValidationRule = [ 202 | [isLengthGreaterThan(2), minimumMsg('Random', 3)], 203 | [hasCapitalLetter, capitalLetterMsg('Random')], 204 | ] 205 | 206 | const validationRules = { 207 | name: nameValidationRule, 208 | random: randomValidationRule, 209 | } 210 | 211 | spected(validationRules, {name: 'foo', random: 'Abcd'}) 212 | // {name: true, random: true} 213 | 214 | ``` 215 | 216 | ### Advanced 217 | A spec can be composed of other specs, enabling to define deeply nested structures to validate against nested input. 218 | Let's see this in form of an example. 219 | 220 | ```js 221 | const locationSpec = { 222 | street: [...], 223 | city: [...], 224 | zip: [...], 225 | country: [...], 226 | } 227 | 228 | const userSpec = { 229 | userName: [...], 230 | lastName: [...], 231 | firstName: [...], 232 | location: locationSpec, 233 | settings: { 234 | profile: { 235 | design: { 236 | color: [...] 237 | background: [...], 238 | } 239 | } 240 | } 241 | } 242 | ``` 243 | 244 | Now we can validate against a deeply nested data structure. 245 | 246 | ### Advanced Example 247 | 248 | ```js 249 | 250 | import { 251 | compose, 252 | indexOf, 253 | head, 254 | isEmpty, 255 | length, 256 | not, 257 | } from 'ramda' 258 | 259 | import spected from 'spected' 260 | 261 | const colors = ['green', 'blue', 'red'] 262 | const notEmpty = compose(not, isEmpty) 263 | const minLength = a => b => length(b) > a 264 | const hasPresetColors = x => indexOf(x, colors) !== -1 265 | 266 | // Messages 267 | 268 | const notEmptyMsg = field => `${field} should not be empty.` 269 | const minimumMsg = (field, len) => `Minimum ${field} length of ${len} is required.` 270 | 271 | const spec = { 272 | id: [[notEmpty, notEmptyMsg('id')]], 273 | userName: [[notEmpty, notEmptyMsg('userName')], [minLength(5), minimumMsg('userName', 6)]], 274 | address: { 275 | street: [[notEmpty, notEmptyMsg('street')]], 276 | }, 277 | settings: { 278 | profile: { 279 | design: { 280 | color: [[notEmpty, notEmptyMsg('color')], [hasPresetColors, 'Use defined colors']], 281 | background: [[notEmpty, notEmptyMsg('background')], [hasPresetColors, 'Use defined colors']], 282 | }, 283 | }, 284 | }, 285 | } 286 | 287 | const input = { 288 | id: 1, 289 | userName: 'Random', 290 | address: { 291 | street: 'Foobar', 292 | }, 293 | settings: { 294 | profile: { 295 | design: { 296 | color: 'green', 297 | background: 'blue', 298 | }, 299 | }, 300 | }, 301 | } 302 | 303 | spected(spec, input) 304 | 305 | /* { 306 | id: true, 307 | userName: true, 308 | address: { 309 | street: true, 310 | }, 311 | settings: { 312 | profile: { 313 | design: { 314 | color: true, 315 | background: true, 316 | }, 317 | }, 318 | }, 319 | } 320 | */ 321 | ``` 322 | 323 | ### Custom Transformations 324 | In case you want to change the way errors are displayed, you can use the low level `validate` function, which expects a success and a failure 325 | callback in addition to the rules and input. 326 | 327 | ```js 328 | import {validate} from 'spected' 329 | const verify = validate( 330 | () => true, // always return true 331 | head // return first error message head = x => x[0] 332 | ) 333 | const spec = { 334 | name: [ 335 | [isNotEmpty, 'Name should not be empty.'] 336 | ], 337 | random: [ 338 | [isLengthGreaterThan(7), 'Minimum Random length of 8 is required.'], 339 | [hasCapitalLetter, 'Random should contain at least one uppercase letter.'], 340 | ] 341 | } 342 | 343 | const input = {name: 'foobar', random: 'r'} 344 | 345 | verify(spec, input) 346 | 347 | // { 348 | // name: true, 349 | // random: 'Minimum Random length of 8 is required.', 350 | // } 351 | 352 | 353 | ``` 354 | 355 | Check the [API documentation](docs/API.md) for further information. 356 | 357 | 358 | ### Further Information 359 | 360 | For a deeper understanding of the underlying ideas and concepts: 361 | 362 | [Form Validation As A Higher Order Component Pt.1](https://medium.com/javascript-inside/form-validation-as-a-higher-order-component-pt-1-83ac8fd6c1f0) 363 | 364 | ### Credits 365 | Written by [A.Sharif](https://twitter.com/sharifsbeat) 366 | 367 | Contributions by 368 | 369 | [Paul Grenier](https://github.com/AutoSponge) 370 | 371 | [Emilio Srougo](https://github.com/Emilios1995) 372 | 373 | [Andrew Palm](https://github.com/apalm) 374 | 375 | [Luca Barone](https://github.com/cloud-walker) 376 | 377 | and many more. 378 | 379 | Also very special thanks to everyone that has contributed documentation updates and fixes (this list will updated). 380 | 381 | Original idea and support by [Stefan Oestreicher](https://twitter.com/thinkfunctional) 382 | 383 | #### Documentation 384 | [API](docs/API.md) 385 | 386 | ### License 387 | 388 | MIT 389 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal -------------------------------------------------------------------------------- /docs/API.md: -------------------------------------------------------------------------------- 1 | # API 2 | 3 | ## `spected(rules, input)` 4 | 5 | Validates data input against a set of validation rules and returns a result object containing error information for every provided data field. 6 | Also works with deep nested objects. `spected` is curried. 7 | 8 | #### Arguments 9 | 10 | 1. `rules` *(Object)*: An object of rules, consisting of arrays containing predicate function / error message tuple, f.e. `{name: [[a => a.length > 2, 'Minimum length 3.']]}`. 11 | The error message can also be a function with this signature: `(value, key) => message` 12 | 13 | 2. `input` *(Object|Function)*: The data to be validated. 14 | 15 | Depending on the status of the input either a `true` or a list of error messages is returned. 16 | 17 | #### Returns 18 | (Object): An object containing the validation result. 19 | 20 | ```js 21 | { 22 | name: true, 23 | random: [ 24 | 'Minimum Random length of 8 is required.', 25 | 'Random should contain at least one uppercase letter.' 26 | ] 27 | } 28 | ``` 29 | 30 | #### Example 31 | 32 | ```js 33 | import spected from 'spected' 34 | 35 | const capitalLetterMsg = (value, key) => `The field ${key} should contain at least one uppercase letter. '${value}' is missing an uppercase letter.` 36 | 37 | const spec = { 38 | name: [ 39 | [isNotEmpty, 'Name should not be empty.'] 40 | ], 41 | random: [ 42 | [isLengthGreaterThan(7), 'Minimum Random length of 8 is required.'], 43 | [hasCapitalLetter, capitalLetterMsg], 44 | ] 45 | } 46 | 47 | const input = {name: 'foobar', random: 'r'} 48 | 49 | spected(spec, input) 50 | 51 | // { 52 | // name: true, 53 | // random: [ 54 | // 'Minimum Random length of 8 is required.', 55 | // 'The field random should contain at least one uppercase letter. 'r' is missing an uppercase letter.' 56 | // ] 57 | // } 58 | 59 | 60 | ``` 61 | 62 | ## `validate(successFn, errorFn, rules, input)` 63 | 64 | Validates data input against a set of validation rules and returns a result object containing error information for every provided data field. 65 | Additionally requires success and failure callback to transform the results as needed. 66 | Also works with deep nested objects. `validate` is curried and is internally used by `spected` 67 | with a default success function `() => true` and a default failure function `errors => errors`. 68 | 69 | #### Arguments 70 | 71 | 1. `successFn` *(Function)*: Transform the result as needed, transformer is called when an input is valid. 72 | The result is passed to the callback enabling to return the original input value if needed. 73 | 74 | ```js 75 | const successFn = () => true 76 | {name: true, random: ['error...']} 77 | 78 | const successFn = val => val 79 | {name: 'original value', random: ['error...']} 80 | ``` 81 | 82 | 2. `failFn` *(Function)*: Transform the result as needed, transformer is called when an input is invalid. Recieves an array of error messages. 83 | 84 | ```js 85 | const failFn = (errorMsgs) => head(errorMsgs) 86 | // {name: true, random: 'something is missing'} 87 | 88 | 89 | const failFn = (errorMsgs) => errorMsgs 90 | // {name: true, random: ['something is missing', 'some other error...']} 91 | 92 | ``` 93 | 94 | 3. `rules` *(Object)*: An object of rules, consisting of arrays containing predicate function / error message tuple, f.e. `{name: [[a => a.length > 2, 'Minimum length 3.']]}` 95 | 96 | 4. `input` *(Object|Function)*: The data to be validated. 97 | 98 | 99 | #### Returns 100 | (Object): An object containing the validation result. 101 | 102 | ```js 103 | { 104 | name: true, 105 | random: [ 106 | 'Minimum Random length of 8 is required.', 107 | 'Random should contain at least one uppercase letter.' 108 | ] 109 | } 110 | ``` 111 | 112 | #### Example 113 | 114 | ```js 115 | import {validate} from 'spected' 116 | const verify = validate( 117 | () => true, // always return true 118 | head // return first error message head = x => x[0] 119 | ) 120 | const spec = { 121 | name: [ 122 | [isNotEmpty, 'Name should not be empty.'] 123 | ], 124 | random: [ 125 | [isLengthGreaterThan(7), 'Minimum Random length of 8 is required.'], 126 | [hasCapitalLetter, 'Random should contain at least one uppercase letter.'], 127 | ] 128 | } 129 | 130 | const input = {name: 'foobar', random: 'r'} 131 | 132 | verify(spec, input) 133 | 134 | // { 135 | // name: true, 136 | // random: 'Minimum Random length of 8 is required.', 137 | // } 138 | 139 | 140 | ``` 141 | 142 | Spected also accepts a function as an input, to simulate if an input would contain errors if empty. 143 | 144 | ``` 145 | const verify = validate(a => a, a => a) 146 | const validationRules = { 147 | name: nameValidationRule, 148 | } 149 | const input = {name: 'foobarbaz'} 150 | const result = verify(validationRules, key => key ? ({...input, [key]: ''}) : input) 151 | deepEqual({name: ['Name should not be empty.']}, result) 152 | 153 | ``` 154 | -------------------------------------------------------------------------------- /flow-typed/npm/ramda_v0.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: dfe9e7dd59fee10f50e3604dd5cab0f8 2 | // flow-typed version: a9e64f6272/ramda_v0.x.x/flow_>=v0.34.x 3 | 4 | /* eslint-disable no-unused-vars, no-redeclare */ 5 | 6 | type Transformer = { 7 | '@@transducer/step': (r: A, a: *) => R, 8 | '@@transducer/init': () => A, 9 | '@@transducer/result': (result: *) => B 10 | } 11 | 12 | 13 | declare module ramda { 14 | declare type UnaryFn = (a: A) => R; 15 | declare type BinaryFn = ((a: A, b: B) => R) & ((a:A) => (b: B) => R); 16 | declare type UnarySameTypeFn = UnaryFn 17 | declare type BinarySameTypeFn = BinaryFn 18 | declare type NestedObject = { [k: string]: T | NestedObject } 19 | declare type UnaryPredicateFn = (x:T) => boolean 20 | declare type BinaryPredicateFn = (x:T, y:T) => boolean 21 | declare type BinaryPredicateFn2 = (x:T, y:S) => boolean 22 | 23 | declare interface ObjPredicate { 24 | (value: any, key: string): boolean; 25 | } 26 | 27 | declare type CurriedFunction2 = 28 | & ((t1: T1, t2: T2) => R) 29 | & ((t1: T1, ...rest: Array) => (t2: T2) => R) 30 | 31 | declare type CurriedFunction3 = 32 | & ((t1: T1, t2: T2, t3: T3) => R) 33 | & ((t1: T1, t2: T2, ...rest: Array) => (t3: T3) => R) 34 | & ((t1: T1, ...rest: Array) => CurriedFunction2) 35 | 36 | declare type CurriedFunction4 = 37 | & ((t1: T1, t2: T2, t3: T3, t4: T4) => R) 38 | & ((t1: T1, t2: T2, t3: T3, ...rest: Array) => (t4: T4) => R) 39 | & ((t1: T1, t2: T2, ...rest: Array) => CurriedFunction2) 40 | & ((t1: T1, ...rest: Array) => CurriedFunction3) 41 | 42 | declare type CurriedFunction5 = 43 | & ((t1: T1) => CurriedFunction4) 44 | & ((t1: T1, t2: T2) => CurriedFunction3) 45 | & ((t1: T1, t2: T2, t3: T3) => CurriedFunction2) 46 | & ((t1: T1, t2: T2, t3: T3, t4: T4) => (t5: T5) => R) 47 | & ((t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => R) 48 | 49 | declare type CurriedFunction6 = 50 | & ((t1: T1) => CurriedFunction5) 51 | & ((t1: T1, t2: T2) => CurriedFunction4) 52 | & ((t1: T1, t2: T2, t3: T3) => CurriedFunction3) 53 | & ((t1: T1, t2: T2, t3: T3, t4: T4) => CurriedFunction2) 54 | & ((t1: T1, t2: T2, t3: T3, t4: T4, t5: T5) => (t6: T6) => R) 55 | & ((t1: T1, t2: T2, t3: T3, t4: T4, t5: T5, t6: T6) => R) 56 | 57 | declare type Pipe = ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, fg: UnaryFn, ...rest: Array) => UnaryFn) 58 | & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ef: UnaryFn, ...rest: Array) => UnaryFn) 59 | & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, de: UnaryFn, ...rest: Array) => UnaryFn) 60 | & ((ab: UnaryFn, bc: UnaryFn, cd: UnaryFn, ...rest: Array) => UnaryFn) 61 | & ((ab: UnaryFn, bc: UnaryFn, ...rest: Array) => UnaryFn) 62 | & ((ab: UnaryFn, ...rest: Array) => UnaryFn) 63 | 64 | declare type Compose = & ((fg: UnaryFn, ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) 65 | & ((ef: UnaryFn, de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) 66 | & ((de: UnaryFn, cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) 67 | & ((cd: UnaryFn, bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) 68 | & ((bc: UnaryFn, ab: UnaryFn, ...rest: Array) => UnaryFn) 69 | & ((ab: UnaryFn, ...rest: Array) => UnaryFn) 70 | 71 | declare type Curry = & ((fn: (a: T1, b: T2) => TResult) => CurriedFunction2) 72 | & ((fn: (a: T1, b: T2, c: T3) => TResult) => CurriedFunction3) 73 | & ((fn: (a: T1, b: T2, c: T3, d: T4) => TResult) => CurriedFunction4) 74 | & ((fn: (a: T1, b: T2, c: T3, d: T4, e: T5) => TResult) => CurriedFunction5) 75 | & ((fn: (a: T1, b: T2, c: T3, d: T4, e: T5, f: T6) => TResult) => CurriedFunction6) 76 | & ((fn: Function) => Function) 77 | 78 | declare type Filter = 79 | & (|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T) => T) 80 | & (|{[key:K]:V}>(fn: UnaryPredicateFn) => (xs:T) => T) 81 | 82 | 83 | declare class Monad { 84 | chain: Function 85 | } 86 | 87 | declare class Semigroup {} 88 | 89 | declare class Chain { 90 | chain|Array>(fn: (a:T) => V, x: V): V; 91 | chain|Array>(fn: (a:T) => V): (x: V) => V; 92 | } 93 | 94 | declare class GenericContructor { 95 | constructor(x: T): GenericContructor 96 | } 97 | 98 | declare class GenericContructorMulti { 99 | constructor(...args: Array): GenericContructor 100 | } 101 | 102 | 103 | /** 104 | * DONE: 105 | * Function* 106 | * List* 107 | * Logic 108 | * Math 109 | * Object* 110 | * Relation 111 | * String 112 | * Type 113 | */ 114 | 115 | declare var compose: Compose; 116 | declare var pipe: Pipe; 117 | declare var curry: Curry; 118 | declare function curryN(length: number, fn: (...args: Array) => any): Function 119 | 120 | // *Math 121 | declare var add: CurriedFunction2; 122 | declare var inc: UnaryFn; 123 | declare var dec: UnaryFn; 124 | declare var mean: UnaryFn,number>; 125 | declare var divide: CurriedFunction2 126 | declare var mathMod: CurriedFunction2; 127 | declare var median: UnaryFn,number>; 128 | declare var modulo: CurriedFunction2; 129 | declare var multiply: CurriedFunction2; 130 | declare var negate: UnaryFn; 131 | declare var product: UnaryFn,number>; 132 | declare var subtract: CurriedFunction2; 133 | declare var sum: UnaryFn,number>; 134 | 135 | // Filter 136 | declare var filter: Filter; 137 | declare var reject: Filter; 138 | 139 | // *String 140 | declare var match: CurriedFunction2>; 141 | declare var replace: CurriedFunction3; 142 | declare var split: CurriedFunction2> 143 | declare var test: CurriedFunction2 144 | declare function toLower(a: string): string; 145 | declare function toString(a: any): string; 146 | declare function toUpper(a: string): string; 147 | declare function trim(a: string): string; 148 | 149 | // *Type 150 | declare function is(t: T, ...rest: Array): (v: any) => boolean; 151 | declare function is(t: T, v: any): boolean; 152 | declare var propIs: CurriedFunction3; 153 | declare function type(x: ?any): string; 154 | declare function isArrayLike(x: any): boolean; 155 | declare function isNil(x: ?any): boolean; 156 | 157 | // *List 158 | declare function adjust(fn:(a: T) => T, ...rest: Array): (index: number, ...rest: Array) => (src: Array) => Array; 159 | declare function adjust(fn:(a: T) => T, index: number, ...rest: Array): (src: Array) => Array; 160 | declare function adjust(fn:(a: T) => T, index: number, src: Array): Array; 161 | 162 | declare function all(fn: UnaryPredicateFn, xs: Array): boolean; 163 | declare function all(fn: UnaryPredicateFn, ...rest: Array): (xs: Array) => boolean; 164 | 165 | declare function any(fn: UnaryPredicateFn, xs: Array): boolean; 166 | declare function any(fn: UnaryPredicateFn, ...rest: Array): (xs: Array) => boolean; 167 | 168 | declare function aperture(n: number, xs: Array): Array>; 169 | declare function aperture(n: number, ...rest: Array): (xs: Array) => Array>; 170 | 171 | declare function append(x: E, xs: Array): Array 172 | declare function append(x: E, ...rest: Array): (xs: Array) => Array 173 | 174 | declare function prepend(x: E, xs: Array): Array 175 | declare function prepend(x: E, ...rest: Array): (xs: Array) => Array 176 | 177 | declare function concat|string>(x: T, y: T): T; 178 | declare function concat|string>(x: T): (y: T) => T; 179 | 180 | declare function contains|string>(x: E, xs: T): boolean 181 | declare function contains|string>(x: E, ...rest: Array): (xs: T) => boolean 182 | 183 | declare function drop|string>(n: number, ...rest: Array):(xs: T) => T; 184 | declare function drop|string>(n: number, xs: T): T; 185 | 186 | declare function dropLast|string>(n: number, ...rest: Array):(xs: T) => T; 187 | declare function dropLast|string>(n: number, xs: T): T; 188 | 189 | declare function dropLastWhile>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => T; 190 | declare function dropLastWhile>(fn: UnaryPredicateFn, xs:T): T; 191 | 192 | declare function dropWhile>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => T; 193 | declare function dropWhile>(fn: UnaryPredicateFn, xs:T): T; 194 | 195 | declare function dropRepeats>(xs:T): T; 196 | 197 | declare function dropRepeatsWith>(fn: BinaryPredicateFn, ...rest: Array): (xs:T) => T; 198 | declare function dropRepeatsWith>(fn: BinaryPredicateFn, xs:T): T; 199 | 200 | declare function groupBy(fn: (x: T) => string, xs: Array): {[key: string]: Array} 201 | declare function groupBy(fn: (x: T) => string, ...rest: Array): (xs: Array) => {[key: string]: Array} 202 | 203 | declare function groupWith|string>(fn: BinaryPredicateFn, xs: V): Array 204 | declare function groupWith|string>(fn: BinaryPredicateFn, ...rest: Array): (xs: V) => Array 205 | 206 | declare function head>(xs: V): ?T 207 | declare function head(xs: V): V 208 | 209 | declare function into,R:Array<*>|string|Object>(accum: R, xf: (a: A) => I, input: A): R 210 | declare function into,R>(accum: Transformer, xf: (a: A) => R, input: A): R 211 | 212 | declare function indexOf(x: E, xs: Array): number 213 | declare function indexOf(x: E, ...rest: Array): (xs: Array) => number 214 | 215 | declare function indexBy(fn: (x: T) => string, ...rest: Array): (xs: Array) => {[key: string]: T} 216 | declare function indexBy(fn: (x: T) => string, xs: Array): {[key: string]: T} 217 | 218 | declare function insert(index: number, ...rest: Array): (elem: T) => (src: Array) => Array 219 | declare function insert(index: number, elem: T, ...rest: Array): (src: Array) => Array 220 | declare function insert(index: number, elem: T, src: Array): Array 221 | 222 | declare function insertAll(index: number, ...rest: Array): (elem: Array) => (src: Array) => Array 223 | declare function insertAll(index: number, elems: Array, ...rest: Array): (src: Array) => Array 224 | declare function insertAll(index: number, elems: Array, src: Array): Array 225 | 226 | declare function join(x: string, xs: Array): string 227 | declare function join(x: string, ...rest: Array): (xs: Array) => string 228 | 229 | declare function last>(xs: V): ?T 230 | declare function last(xs: V): V 231 | 232 | declare function none(fn: UnaryPredicateFn, xs: Array): boolean; 233 | declare function none(fn: UnaryPredicateFn, ...rest: Array): (xs: Array) => boolean; 234 | 235 | declare function nth>(i: number, xs: T): ?V 236 | declare function nth|string>(i: number, ...rest: Array): ((xs: string) => string)&((xs: T) => ?V) 237 | declare function nth(i: number, xs: T): T 238 | 239 | declare function find|O>(fn: UnaryPredicateFn, ...rest: Array): (xs:T|O) => ?V|O; 240 | declare function find|O>(fn: UnaryPredicateFn, xs:T|O): ?V|O; 241 | declare function findLast|O>(fn: UnaryPredicateFn, ...rest: Array): (xs:T|O) => ?V|O; 242 | declare function findLast|O>(fn: UnaryPredicateFn, xs:T|O): ?V|O; 243 | 244 | declare function findIndex|{[key:K]:V}>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => number 245 | declare function findIndex|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T): number 246 | declare function findLastIndex|{[key:K]:V}>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => number 247 | declare function findLastIndex|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T): number 248 | 249 | declare function forEach(fn:(x:T) => ?V, xs: Array): Array 250 | declare function forEach(fn:(x:T) => ?V, ...rest: Array): (xs: Array) => Array 251 | 252 | declare function lastIndexOf(x: E, xs: Array): number 253 | declare function lastIndexOf(x: E, ...rest: Array): (xs: Array) => number 254 | 255 | declare function map(fn: (x:T) => R, xs: Array): Array; 256 | declare function map(fn: (x:T) => R, xs: S): S; 257 | declare function map(fn: (x:T) => R, ...rest: Array): ((xs: {[key: string]: T}) => {[key: string]: R}) & ((xs: Array) => Array) 258 | declare function map(fn: (x:T) => R, ...rest: Array): ((xs:S) => S) & ((xs: S) => S) 259 | declare function map(fn: (x:T) => R, xs: {[key: string]: T}): {[key: string]: R} 260 | 261 | declare type AccumIterator = (acc: R, x: A) => [R,B] 262 | declare function mapAccum(fn: AccumIterator, acc: R, xs: Array): [R, Array]; 263 | declare function mapAccum(fn: AccumIterator, ...rest: Array): (acc: R, xs: Array) => [R, Array]; 264 | 265 | declare function mapAccumRight(fn: AccumIterator, acc: R, xs: Array): [R, Array]; 266 | declare function mapAccumRight(fn: AccumIterator, ...rest: Array): (acc: R, xs: Array) => [R, Array]; 267 | 268 | declare function intersperse(x: E, xs: Array): Array 269 | declare function intersperse(x: E, ...rest: Array): (xs: Array) => Array 270 | 271 | declare function pair(a:A, b:B): [A,B] 272 | declare function pair(a:A, ...rest: Array): (b:B) => [A,B] 273 | 274 | declare function partition|{[key:K]:V}>(fn: UnaryPredicateFn, xs:T): [T,T] 275 | declare function partition|{[key:K]:V}>(fn: UnaryPredicateFn, ...rest: Array): (xs:T) => [T,T] 276 | 277 | declare function pluck|{[key:string]:V}>>(k: K, xs: T): Array 278 | declare function pluck|{[key:string]:V}>>(k: K,...rest: Array): (xs: T) => Array 279 | 280 | declare var range: CurriedFunction2>; 281 | 282 | declare function remove(from: number, ...rest: Array): ((to: number, ...rest: Array) => (src: Array) => Array) & ((to: number, src: Array) => Array) 283 | declare function remove(from: number, to: number, ...rest: Array): (src: Array) => Array 284 | declare function remove(from: number, to: number, src: Array): Array 285 | 286 | declare function repeat(x: T, times: number): Array 287 | declare function repeat(x: T, ...rest: Array): (times: number) => Array 288 | 289 | declare function slice|string>(from: number, ...rest: Array): ((to: number, ...rest: Array) => (src: T) => T) & ((to: number, src: T) => T) 290 | declare function slice|string>(from: number, to: number, ...rest: Array): (src: T) => T 291 | declare function slice|string>(from: number, to: number, src: T): T 292 | 293 | declare function sort>(fn: (a:V, b:V) => number, xs:T): T 294 | declare function sort>(fn: (a:V, b:V) => number, ...rest: Array): (xs:T) => T 295 | 296 | declare function times(fn:(i: number) => T, n: number): Array 297 | declare function times(fn:(i: number) => T, ...rest: Array): (n: number) => Array 298 | 299 | declare function take|string>(n: number, xs: T): T; 300 | declare function take|string>(n: number):(xs: T) => T; 301 | 302 | declare function takeLast|string>(n: number, xs: T): T; 303 | declare function takeLast|string>(n: number):(xs: T) => T; 304 | 305 | declare function takeLastWhile>(fn: UnaryPredicateFn, xs:T): T; 306 | declare function takeLastWhile>(fn: UnaryPredicateFn): (xs:T) => T; 307 | 308 | declare function takeWhile>(fn: UnaryPredicateFn, xs:T): T; 309 | declare function takeWhile>(fn: UnaryPredicateFn): (xs:T) => T; 310 | 311 | declare function unfold(fn: (seed: T) => [R, T]|boolean, ...rest: Array): (seed: T) => Array 312 | declare function unfold(fn: (seed: T) => [R, T]|boolean, seed: T): Array 313 | 314 | declare function uniqBy(fn:(x: T) => V, ...rest: Array): (xs: Array) => Array 315 | declare function uniqBy(fn:(x: T) => V, xs: Array): Array 316 | 317 | declare function uniqWith(fn: BinaryPredicateFn, ...rest: Array): (xs: Array) => Array 318 | declare function uniqWith(fn: BinaryPredicateFn, xs: Array): Array 319 | 320 | declare function update(index: number, ...rest: Array): ((elem: T, ...rest: Array) => (src: Array) => Array) & ((elem: T, src: Array) => Array) 321 | declare function update(index: number, elem: T, ...rest: Array): (src: Array) => Array 322 | declare function update(index: number, elem: T, src: Array): Array 323 | 324 | // TODO `without` as a transducer 325 | declare function without(xs: Array, src: Array): Array 326 | declare function without(xs: Array, ...rest: Array): (src: Array) => Array 327 | 328 | declare function xprod(xs: Array, ys: Array): Array<[T,S]> 329 | declare function xprod(xs: Array, ...rest: Array): (ys: Array) => Array<[T,S]> 330 | 331 | declare function zip(xs: Array, ys: Array): Array<[T,S]> 332 | declare function zip(xs: Array, ...rest: Array): (ys: Array) => Array<[T,S]> 333 | 334 | declare function zipObj(xs: Array, ys: Array): {[key:T]:S} 335 | declare function zipObj(xs: Array, ...rest: Array): (ys: Array) => {[key:T]:S} 336 | 337 | declare type NestedArray = Array> 338 | declare function flatten(xs: NestedArray): Array; 339 | 340 | declare function fromPairs(pair: Array<[T,V]>): {[key: string]:V}; 341 | 342 | declare function init|string>(xs: V): V; 343 | 344 | declare function length(xs: Array): number; 345 | 346 | declare function mergeAll(objs: Array<{[key: string]: any}>):{[key: string]: any}; 347 | 348 | declare function reverse|string>(xs: V): V; 349 | 350 | declare function reduce(fn: (acc: A, elem: B) => A, ...rest: Array): ((init: A, xs: Array) => A) & ((init: A, ...rest: Array) => (xs: Array) => A); 351 | declare function reduce(fn: (acc: A, elem: B) => A, init: A, ...rest: Array): (xs: Array) => A; 352 | declare function reduce(fn: (acc: A, elem: B) => A, init: A, xs: Array): A; 353 | 354 | declare function reduceBy(fn: (acc: B, elem: A) => B, ...rest: Array): 355 | ((acc: B, ...rest: Array) => ((keyFn:(elem: A) => string, ...rest: Array) => (xs: Array) => {[key: string]: B}) & ((keyFn:(elem: A) => string, xs: Array) => {[key: string]: B})) 356 | & ((acc: B, keyFn:(elem: A) => string, ...rest: Array) => (xs: Array) => {[key: string]: B}) 357 | & ((acc: B, keyFn:(elem: A) => string, xs: Array) => {[key: string]: B}) 358 | declare function reduceBy(fn: (acc: B, elem: A) => B, acc: B, ...rest: Array): 359 | ((keyFn:(elem: A) => string, ...rest: Array) => (xs: Array) => {[key: string]: B}) 360 | & ((keyFn:(elem: A) => string, xs: Array) => {[key: string]: B}) 361 | declare function reduceBy(fn: (acc: B, elem: A) => B, acc: B, keyFn:(elem: A) => string): (xs: Array) => {[key: string]: B}; 362 | declare function reduceBy(fn: (acc: B, elem: A) => B, acc: B, keyFn:(elem: A) => string, xs: Array): {[key: string]: B}; 363 | 364 | declare function reduceRight(fn: (acc: A, elem: B) => A, ...rest: Array): ((init: A, xs: Array) => A) & ((init: A, ...rest: Array) => (xs: Array) => A); 365 | declare function reduceRight(fn: (acc: A, elem: B) => A, init: A, ...rest: Array): (xs: Array) => A; 366 | declare function reduceRight(fn: (acc: A, elem: B) => A, init: A, xs: Array): A; 367 | 368 | declare function scan(fn: (acc: A, elem: B) => A, ...rest: Array): ((init: A, xs: Array) => A) & ((init: A, ...rest: Array) => (xs: Array) => A); 369 | declare function scan(fn: (acc: A, elem: B) => A, init: A, ...rest: Array): (xs: Array) => A; 370 | declare function scan(fn: (acc: A, elem: B) => A, init: A, xs: Array): A; 371 | 372 | declare function splitAt|string>(i: number, xs: T): [T,T]; 373 | declare function splitAt|string>(i: number): (xs: T) => [T,T]; 374 | declare function splitEvery|string>(i: number, xs: T): Array; 375 | declare function splitEvery|string>(i: number): (xs: T) => Array; 376 | declare function splitWhen>(fn: UnaryPredicateFn, xs:T): [T,T]; 377 | declare function splitWhen>(fn: UnaryPredicateFn): (xs:T) => [T,T]; 378 | 379 | declare function tail|string>(xs: V): V; 380 | 381 | declare function transpose(xs: Array>): Array>; 382 | 383 | declare function uniq(xs: Array): Array; 384 | 385 | declare function unnest(xs: NestedArray): NestedArray; 386 | 387 | declare function zipWith(fn: (a: T, b: S) => R, ...rest: Array): ((xs: Array, ys: Array) => Array) & ((xs: Array, ...rest: Array ) => (ys: Array) => Array) 388 | declare function zipWith(fn: (a: T, b: S) => R, xs: Array, ...rest: Array): (ys: Array) => Array; 389 | declare function zipWith(fn: (a: T, b: S) => R, xs: Array, ys: Array): Array; 390 | 391 | // *Relation 392 | declare function equals(x: T, ...rest: Array): (y: T) => boolean; 393 | declare function equals(x: T, y: T): boolean; 394 | 395 | declare function eqBy(fn: (x: A) => B, ...rest: Array): ((x: A, y: A) => boolean) & ((x: A, ...rest: Array) => (y: A) => boolean); 396 | declare function eqBy(fn: (x: A) => B, x: A, ...rest: Array): (y: A) => boolean; 397 | declare function eqBy(fn: (x: A) => B, x: A, y: A): boolean; 398 | 399 | declare function propEq(prop: string, ...rest: Array): ((val: *, o: {[k:string]: *}) => boolean) & ((val: *, ...rest: Array) => (o: {[k:string]: *}) => boolean) 400 | declare function propEq(prop: string, val: *, ...rest: Array): (o: {[k:string]: *}) => boolean; 401 | declare function propEq(prop: string, val: *, o: {[k:string]:*}): boolean; 402 | 403 | declare function pathEq(path: Array, ...rest: Array): ((val: any, o: Object) => boolean) & ((val: any, ...rest: Array) => (o: Object) => boolean); 404 | declare function pathEq(path: Array, val: any, ...rest: Array): (o: Object) => boolean; 405 | declare function pathEq(path: Array, val: any, o: Object): boolean; 406 | 407 | declare function clamp(min: T, ...rest: Array): 408 | ((max: T, ...rest: Array) => (v: T) => T) & ((max: T, v: T) => T); 409 | declare function clamp(min: T, max: T, ...rest: Array): (v: T) => T; 410 | declare function clamp(min: T, max: T, v: T): T; 411 | 412 | declare function countBy(fn: (x: T) => string, ...rest: Array): (list: Array) => {[key: string]: number}; 413 | declare function countBy(fn: (x: T) => string, list: Array): {[key: string]: number}; 414 | 415 | declare function difference(xs1: Array, ...rest: Array): (xs2: Array) => Array; 416 | declare function difference(xs1: Array, xs2: Array): Array; 417 | 418 | declare function differenceWith(fn: BinaryPredicateFn, ...rest: Array): ((xs1: Array) => (xs2: Array) => Array) & ((xs1: Array, xs2: Array) => Array); 419 | declare function differenceWith(fn: BinaryPredicateFn, xs1: Array, ...rest: Array): (xs2: Array) => Array; 420 | declare function differenceWith(fn: BinaryPredicateFn, xs1: Array, xs2: Array): Array; 421 | 422 | declare function eqBy(fn: (x: T) => T, x: T, y: T): boolean; 423 | declare function eqBy(fn: (x: T) => T): (x: T, y: T) => boolean; 424 | declare function eqBy(fn: (x: T) => T, x: T): (y: T) => boolean; 425 | declare function eqBy(fn: (x: T) => T): (x: T) => (y: T) => boolean; 426 | 427 | declare function gt(x: T, ...rest: Array): (y: T) => boolean; 428 | declare function gt(x: T, y: T): boolean; 429 | 430 | declare function gte(x: T, ...rest: Array): (y: T) => boolean; 431 | declare function gte(x: T, y: T): boolean; 432 | 433 | declare function identical(x: T, ...rest: Array): (y: T) => boolean; 434 | declare function identical(x: T, y: T): boolean; 435 | 436 | declare function intersection(x: Array, y: Array): Array; 437 | declare function intersection(x: Array): (y: Array) => Array; 438 | 439 | declare function intersectionWith(fn: BinaryPredicateFn, ...rest: Array): ((x: Array, y: Array) => Array) & ((x: Array) => (y: Array) => Array); 440 | declare function intersectionWith(fn: BinaryPredicateFn, x: Array, ...rest: Array): (y: Array) => Array; 441 | declare function intersectionWith(fn: BinaryPredicateFn, x: Array, y: Array): Array; 442 | 443 | declare function lt(x: T, ...rest: Array): (y: T) => boolean; 444 | declare function lt(x: T, y: T): boolean; 445 | 446 | declare function lte(x: T, ...rest: Array): (y: T) => boolean; 447 | declare function lte(x: T, y: T): boolean; 448 | 449 | declare function max(x: T, ...rest: Array): (y: T) => T; 450 | declare function max(x: T, y: T): T; 451 | 452 | declare function maxBy(fn: (x:T) => V, ...rest: Array): ((x: T, y: T) => T) & ((x: T) => (y: T) => T); 453 | declare function maxBy(fn: (x:T) => V, x: T, ...rest: Array): (y: T) => T; 454 | declare function maxBy(fn: (x:T) => V, x: T, y: T): T; 455 | 456 | declare function min(x: T, ...rest: Array): (y: T) => T; 457 | declare function min(x: T, y: T): T; 458 | 459 | declare function minBy(fn: (x:T) => V, ...rest: Array): ((x: T, y: T) => T) & ((x: T) => (y: T) => T); 460 | declare function minBy(fn: (x:T) => V, x: T, ...rest: Array): (y: T) => T; 461 | declare function minBy(fn: (x:T) => V, x: T, y: T): T; 462 | 463 | // TODO: sortBy: Started failing in v38... 464 | // declare function sortBy(fn: (x:T) => V, ...rest: Array): (x: Array) => Array; 465 | // declare function sortBy(fn: (x:T) => V, x: Array): Array; 466 | 467 | declare function symmetricDifference(x: Array, ...rest: Array): (y: Array) => Array; 468 | declare function symmetricDifference(x: Array, y: Array): Array; 469 | 470 | declare function symmetricDifferenceWith(fn: BinaryPredicateFn, ...rest: Array): ((x: Array, ...rest: Array) => (y: Array) => Array) & ((x: Array, y: Array) => Array); 471 | declare function symmetricDifferenceWith(fn: BinaryPredicateFn, x: Array, ...rest: Array): (y: Array) => Array; 472 | declare function symmetricDifferenceWith(fn: BinaryPredicateFn, x: Array, y: Array): Array; 473 | 474 | declare function union(x: Array, ...rest: Array): (y: Array) => Array; 475 | declare function union(x: Array, y: Array): Array; 476 | 477 | declare function unionWith(fn: BinaryPredicateFn, ...rest: Array): ((x: Array, ...rest: Array) => (y: Array) => Array) & (x: Array, y: Array) => Array; 478 | declare function unionWith(fn: BinaryPredicateFn, x: Array, ...rest: Array): (y: Array) => Array; 479 | declare function unionWith(fn: BinaryPredicateFn, x: Array, y: Array): Array; 480 | 481 | // *Object 482 | declare function assoc(key: string, ...args: Array): 483 | ((val: T, ...rest: Array) => (src: {[k:string]:S}) => {[k:string]:S|T}) & ((val: T, src: {[k:string]:S}) => {[k:string]:S|T}); 484 | declare function assoc(key: string, val:T, ...args: Array): (src: {[k:string]:S}) => {[k:string]:S|T}; 485 | declare function assoc(key: string, val: T, src: {[k:string]:S}): {[k:string]:S|T}; 486 | 487 | declare function assocPath(key: Array, ...args: Array): 488 | ((val: T, ...rest: Array) => (src: {[k:string]:S}) => {[k:string]:S|T}) 489 | & ((val: T) => (src: {[k:string]:S}) => {[k:string]:S|T}); 490 | declare function assocPath(key: Array, val:T, ...args: Array): (src: {[k:string]:S}) => {[k:string]:S|T}; 491 | declare function assocPath(key: Array, val:T, src: {[k:string]:S}): {[k:string]:S|T}; 492 | 493 | declare function clone(src: T): $Shape; 494 | 495 | declare function dissoc(key: string, ...args: Array): 496 | ((val: T, ...rest: Array) => (src: {[k:string]:T}) => {[k:string]:T}) & ((val: T, src: {[k:string]:T}) => {[k:string]:T}); 497 | declare function dissoc(key: string, val:T, ...args: Array): (src: {[k:string]:T}) => {[k:string]:T}; 498 | declare function dissoc(key: string, val: T, src: {[k:string]:T}): {[k:string]:T}; 499 | 500 | declare function dissocPath(key: Array, ...args: Array): 501 | ((val: T, ...rest: Array) => (src: {[k:string]:T}) => {[k:string]:T}) 502 | & ((val: T) => (src: {[k:string]:T}) => {[k:string]:T}); 503 | declare function dissocPath(key: Array, val:T, ...args: Array): (src: {[k:string]:T}) => {[k:string]:T}; 504 | declare function dissocPath(key: Array, val:T, src: {[k:string]:T}): {[k:string]:T}; 505 | 506 | // TODO: Started failing in v31... (Attempt to fix below) 507 | // declare type __UnwrapNestedObjectR U>> = U 508 | // declare type UnwrapNestedObjectR = UnwrapNestedObjectR<*, *, T> 509 | // 510 | // declare function evolve R>>(fn: T, ...rest: Array): (src: NestedObject) => UnwrapNestedObjectR; 511 | // declare function evolve R>>(fn: T, src: NestedObject): UnwrapNestedObjectR; 512 | 513 | declare function eqProps(key: string, ...args: Array): 514 | ((o1: Object, ...rest: Array) => (o2: Object) => boolean) 515 | & ((o1: Object, o2: Object) => boolean); 516 | declare function eqProps(key: string, o1: Object, ...args: Array): (o2: Object) => boolean; 517 | declare function eqProps(key: string, o1: Object, o2: Object): boolean; 518 | 519 | declare function has(key: string, o: Object): boolean; 520 | declare function has(key: string):(o: Object) => boolean; 521 | 522 | declare function hasIn(key: string, o: Object): boolean; 523 | declare function hasIn(key: string): (o: Object) => boolean; 524 | 525 | declare function invert(o: Object): {[k: string]: Array}; 526 | declare function invertObj(o: Object): {[k: string]: string}; 527 | 528 | declare function keys(o: Object): Array; 529 | 530 | /* TODO 531 | lens 532 | lensIndex 533 | lensPath 534 | lensProp 535 | */ 536 | 537 | declare function mapObjIndexed(fn: (val: A, key: string, o: Object) => B, o: {[key: string]: A}): {[key: string]: B}; 538 | declare function mapObjIndexed(fn: (val: A, key: string, o: Object) => B, ...args: Array): (o: {[key: string]: A}) => {[key: string]: B}; 539 | 540 | declare function merge(o1: A, ...rest: Array): (o2: B) => A & B; 541 | declare function merge(o1: A, o2: B): A & B; 542 | 543 | declare function mergeAll(os: Array<{[k:string]:T}>): {[k:string]:T}; 544 | 545 | declare function mergeWith(fn: (v1: T, v2: S) => R): 546 | ((o1: A, ...rest: Array) => (o2: B) => A & B) & ((o1: A, o2: B) => A & B); 547 | declare function mergeWith(fn: (v1: T, v2: S) => R, o1: A, o2: B): A & B; 548 | declare function mergeWith(fn: (v1: T, v2: S) => R, o1: A, ...rest: Array): (o2: B) => A & B; 549 | 550 | declare function mergeWithKey(fn: (key: $Keys, v1: T, v2: S) => R): 551 | ((o1: A, ...rest: Array) => (o2: B) => A & B) & ((o1: A, o2: B) => A & B); 552 | declare function mergeWithKey(fn: (key: $Keys, v1: T, v2: S) => R, o1: A, o2: B): A & B; 553 | declare function mergeWithKey(fn: (key: $Keys, v1: T, v2: S) => R, o1: A, ...rest: Array): (o2: B) => A & B; 554 | 555 | declare function objOf(key: string, ...rest: Array): (val: T) => {[key: string]: T}; 556 | declare function objOf(key: string, val: T): {[key: string]: T}; 557 | 558 | declare function omit(keys: Array<$Keys>, ...rest: Array): (val: T) => Object; 559 | declare function omit(keys: Array<$Keys>, val: T): Object; 560 | 561 | // TODO over 562 | 563 | declare function path>(p: Array, ...rest: Array): (o: A) => ?V; 564 | declare function path>(p: Array, o: A): ?V; 565 | 566 | declare function pathOr>(or: T, ...rest: Array): 567 | ((p: Array, ...rest: Array) => (o: ?A) => V|T) 568 | & ((p: Array, o: ?A) => V|T); 569 | declare function pathOr>(or: T, p: Array, ...rest: Array): (o: ?A) => V|T; 570 | declare function pathOr>(or: T, p: Array, o: ?A): V|T; 571 | 572 | declare function pick(keys: Array, ...rest: Array): (val: {[key:string]: A}) => {[key:string]: A}; 573 | declare function pick(keys: Array, val: {[key:string]: A}): {[key:string]: A}; 574 | 575 | declare function pickAll(keys: Array, ...rest: Array): (val: {[key:string]: A}) => {[key:string]: ?A}; 576 | declare function pickAll(keys: Array, val: {[key:string]: A}): {[key:string]: ?A}; 577 | 578 | declare function pickBy(fn: BinaryPredicateFn2, ...rest: Array): (val: {[key:string]: A}) => {[key:string]: A}; 579 | declare function pickBy(fn: BinaryPredicateFn2, val: {[key:string]: A}): {[key:string]: A}; 580 | 581 | declare function project(keys: Array, ...rest: Array): (val: Array<{[key:string]: T}>) => Array<{[key:string]: T}>; 582 | declare function project(keys: Array, val: Array<{[key:string]: T}>): Array<{[key:string]: T}>; 583 | 584 | declare function prop(key: $Keys, ...rest: Array): (o: O) => ?T; 585 | declare function prop(key: $Keys, o: O): ?T; 586 | 587 | declare function propOr(or: T, ...rest: Array): 588 | ((p: $Keys, ...rest: Array) => (o: A) => V|T) 589 | & ((p: $Keys, o: A) => V|T); 590 | declare function propOr(or: T, p: $Keys, ...rest: Array): (o: A) => V|T; 591 | declare function propOr(or: T, p: $Keys, o: A): V|T; 592 | 593 | declare function keysIn(o: Object): Array; 594 | 595 | declare function props(keys: Array<$Keys>, ...rest: Array): (o: O) => Array; 596 | declare function props(keys: Array<$Keys>, o: O): Array; 597 | 598 | // TODO set 599 | 600 | declare function toPairs(o: O): Array<[$Keys, T]>; 601 | 602 | declare function toPairsIn(o: O): Array<[string, T]>; 603 | 604 | 605 | declare function values(o: O): Array; 606 | 607 | declare function valuesIn(o: O): Array; 608 | 609 | declare function where(predObj: {[key: string]: UnaryPredicateFn}, ...rest: Array): (o: {[k:string]:T}) => boolean; 610 | declare function where(predObj: {[key: string]: UnaryPredicateFn}, o: {[k:string]:T}): boolean; 611 | 612 | declare function whereEq(predObj: O, ...rest: Array): (o: $Shape) => boolean; 613 | declare function whereEq(predObj: O, o: $Shape): boolean; 614 | 615 | // TODO view 616 | 617 | // *Function 618 | declare var __: *; 619 | 620 | declare var T: (_: any) => boolean; 621 | declare var F: (_: any) => boolean; 622 | 623 | declare function addIndex(iterFn:(fn:(x:A) => B, xs: Array) => Array): (fn: (x: A, idx: number, xs: Array) => B, xs: Array) => Array; 624 | 625 | declare function always(x:T): (x: any) => T; 626 | 627 | declare function ap(fns: Array<(x:T) => V>, ...rest: Array): (xs: Array) => Array; 628 | declare function ap(fns: Array<(x:T) => V>, xs: Array): Array; 629 | 630 | declare function apply(fn: (...args: Array) => V, ...rest: Array): (xs: Array) => V; 631 | declare function apply(fn: (...args: Array) => V, xs: Array): V; 632 | 633 | declare function applySpec) => S>>(spec: T): (...args: Array) => NestedObject; 634 | 635 | declare function binary(fn:(...args: Array) => T): (x: any, y: any) => T; 636 | 637 | declare function bind(fn: (...args: Array) => any, thisObj: T): (...args: Array) => any; 638 | 639 | declare function call(fn: (...args: Array) => T, ...args: Array): T; 640 | 641 | declare function comparator(fn: BinaryPredicateFn): (x:T, y:T) => number; 642 | 643 | // TODO add tests 644 | declare function construct(ctor: Class>): (x: T) => GenericContructor; 645 | 646 | // TODO add tests 647 | declare function constructN(n: number, ctor: Class>): (...args: any) => GenericContructorMulti; 648 | 649 | // TODO make less generic 650 | declare function converge(after: Function, fns: Array): Function; 651 | 652 | declare function empty(x: T): T; 653 | 654 | declare function flip(fn: (arg0: A, arg1: B) => TResult): CurriedFunction2; 655 | declare function flip(fn: (arg0: A, arg1: B, arg2: C) => TResult): (( arg0: B, arg1: A, ...rest: Array) => (arg2: C) => TResult) & (( arg0: B, arg1: A, arg2: C) => TResult); 656 | declare function flip(fn: (arg0: A, arg1: B, arg2: C, arg3: D) => TResult): ((arg1: B, arg0: A, ...rest: Array) => (arg2: C, arg3: D) => TResult) & ((arg1: B, arg0: A, arg2: C, arg3: D) => TResult); 657 | declare function flip(fn: (arg0: A, arg1: B, arg2: C, arg3: D, arg4:E) => TResult): ((arg1: B, arg0: A, ...rest: Array) => (arg2: C, arg3: D, arg4: E) => TResult) & ((arg1: B, arg0: A, arg2: C, arg3: D, arg4: E) => TResult); 658 | 659 | declare function identity(x:T): T; 660 | 661 | declare function invoker(arity: number, name: $Enum): CurriedFunction2 & CurriedFunction3 & CurriedFunction4 662 | 663 | declare function juxt(fns: Array<(...args: Array) => T>): (...args: Array) => Array; 664 | 665 | // TODO lift 666 | 667 | // TODO liftN 668 | 669 | declare function memoize) => B>(fn:T):T; 670 | 671 | declare function nAry(arity: number, fn:(...args: Array) => T): (...args: Array) => T; 672 | 673 | declare function nthArg(n: number): (...args: Array) => T; 674 | 675 | declare function of(x: T): Array; 676 | 677 | declare function once) => B>(fn:T):T; 678 | 679 | // TODO partial 680 | // TODO partialRight 681 | // TODO pipeK 682 | // TODO pipeP 683 | 684 | declare function tap(fn: (x: T) => any, ...rest: Array): (x: T) => T; 685 | declare function tap(fn: (x: T) => any, x: T): T; 686 | 687 | // TODO tryCatch 688 | 689 | declare function unapply(fn: (xs: Array) => V): (...args: Array) => V; 690 | 691 | declare function unary(fn:(...args: Array) => T): (x: any) => T; 692 | 693 | declare var uncurryN: 694 | & ((2, A => B => C) => (A, B) => C) 695 | & ((3, A => B => C => D) => (A, B, C) => D) 696 | & ((4, A => B => C => D => E) => (A, B, C, D) => E) 697 | & ((5, A => B => C => D => E => F) => (A, B, C, D, E) => F) 698 | & ((6, A => B => C => D => E => F => G) => (A, B, C, D, E, F) => G) 699 | & ((7, A => B => C => D => E => F => G => H) => (A, B, C, D, E, F, G) => H) 700 | & ((8, A => B => C => D => E => F => G => H => I) => (A, B, C, D, E, F, G, H) => I) 701 | 702 | //TODO useWith 703 | 704 | declare function wrap) => B>(fn: F, fn2: (fn: F, ...args: Array) => D): (...args: Array) => D; 705 | 706 | // *Logic 707 | 708 | declare function allPass(fns: Array<(...args: Array) => boolean>): (...args: Array) => boolean; 709 | 710 | declare function and(x: boolean, ...rest: Array): (y: boolean) => boolean; 711 | declare function and(x: boolean, y: boolean): boolean; 712 | 713 | declare function anyPass(fns: Array<(...args: Array) => boolean>): (...args: Array) => boolean; 714 | 715 | declare function both(x: (...args: Array) => boolean, ...rest: Array): (y: (...args: Array) => boolean) => (...args: Array) => boolean; 716 | declare function both(x: (...args: Array) => boolean, y: (...args: Array) => boolean): (...args: Array) => boolean; 717 | 718 | declare function complement(x: (...args: Array) => boolean): (...args: Array) => boolean; 719 | 720 | declare function cond(fns: Array<[(...args: Array) => boolean, (...args: Array) => B]>): (...args: Array) => B; 721 | 722 | 723 | declare function defaultTo(d: T, ...rest: Array): (x: ?V) => V|T; 724 | declare function defaultTo(d: T, x: ?V): V|T; 725 | 726 | declare function either(x: (...args: Array) => boolean, ...rest: Array): (y: (...args: Array) => boolean) => (...args: Array) => boolean; 727 | declare function either(x: (...args: Array) => boolean, y: (...args: Array) => boolean): (...args: Array) => boolean; 728 | 729 | declare function ifElse(cond:(...args: Array) => boolean, ...rest: Array): 730 | ((f1: (...args: Array) => B, ...rest: Array) => (f2: (...args: Array) => C) => (...args: Array) => B|C) 731 | & ((f1: (...args: Array) => B, f2: (...args: Array) => C) => (...args: Array) => B|C) 732 | declare function ifElse( 733 | cond:(...args: Array) => boolean, 734 | f1: (...args: Array) => B, 735 | f2: (...args: Array) => C 736 | ): (...args: Array) => B|C; 737 | 738 | declare function isEmpty(x:?Array|Object|string): boolean; 739 | 740 | declare function not(x:boolean): boolean; 741 | 742 | declare function or(x: boolean, y: boolean): boolean; 743 | declare function or(x: boolean): (y: boolean) => boolean; 744 | 745 | // TODO: pathSatisfies: Started failing in v39... 746 | // declare function pathSatisfies(cond: (x: T) => boolean, path: Array, o: NestedObject): boolean; 747 | // declare function pathSatisfies(cond: (x: T) => boolean, path: Array, ...rest: Array): (o: NestedObject) => boolean; 748 | // declare function pathSatisfies(cond: (x: T) => boolean, ...rest: Array): 749 | // ((path: Array, ...rest: Array) => (o: NestedObject) => boolean) 750 | // & ((path: Array, o: NestedObject) => boolean) 751 | 752 | declare function propSatisfies(cond: (x: T) => boolean, prop: string, o: NestedObject): boolean; 753 | declare function propSatisfies(cond: (x: T) => boolean, prop: string, ...rest: Array): (o: NestedObject) => boolean; 754 | declare function propSatisfies(cond: (x: T) => boolean, ...rest: Array): 755 | ((prop: string, ...rest: Array) => (o: NestedObject) => boolean) 756 | & ((prop: string, o: NestedObject) => boolean) 757 | 758 | declare function unless(pred: UnaryPredicateFn, ...rest: Array): 759 | ((fn: (x: S) => V, ...rest: Array) => (x: T|S) => T|V) 760 | & ((fn: (x: S) => V, x: T|S) => T|V); 761 | declare function unless(pred: UnaryPredicateFn, fn: (x: S) => V, ...rest: Array): (x: T|S) => V|T; 762 | declare function unless(pred: UnaryPredicateFn, fn: (x: S) => V, x: T|S): T|V; 763 | 764 | declare function until(pred: UnaryPredicateFn, ...rest: Array): 765 | ((fn: (x: T) => T, ...rest: Array) => (x: T) => T) 766 | & ((fn: (x: T) => T, x: T) => T); 767 | declare function until(pred: UnaryPredicateFn, fn: (x: T) => T, ...rest: Array): (x: T) => T; 768 | declare function until(pred: UnaryPredicateFn, fn: (x: T) => T, x: T): T; 769 | 770 | declare function when(pred: UnaryPredicateFn, ...rest: Array): 771 | ((fn: (x: S) => V, ...rest: Array) => (x: T|S) => T|V) 772 | & ((fn: (x: S) => V, x: T|S) => T|V); 773 | declare function when(pred: UnaryPredicateFn, fn: (x: S) => V, ...rest: Array): (x: T|S) => V|T; 774 | declare function when(pred: UnaryPredicateFn, fn: (x: S) => V, x: T|S): T|V; 775 | } 776 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spected", 3 | "version": "0.7.1", 4 | "description": "Validation Library", 5 | "main": "lib/index.js", 6 | "author": "25th-floor", 7 | "license": "MIT", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/25th-floor/spected.git" 11 | }, 12 | "scripts": { 13 | "clean": "rimraf lib dist", 14 | "build": "npm run build:lib && npm run build:dist", 15 | "build:lib": "babel src -d lib", 16 | "build:dist": "NODE_ENV=production rollup -c", 17 | "test": "npm run flow && npm run lint && npm run test:lib", 18 | "test:lib": "mocha --compilers js:babel-core/register --recursive --colors", 19 | "flow": "flow check", 20 | "lint": "eslint src", 21 | "prepublish": "npm run clean && npm run build" 22 | }, 23 | "keywords": [ 24 | "Validation", 25 | "Deeply Nested Validation Rules", 26 | "Forms" 27 | ], 28 | "devDependencies": { 29 | "babel": "^6.23.0", 30 | "babel-cli": "^6.24.1", 31 | "babel-core": "^6.25.0", 32 | "babel-eslint": "^10.0.1", 33 | "babel-loader": "^7.0.0", 34 | "babel-plugin-add-module-exports": "^0.2.1", 35 | "babel-plugin-external-helpers": "^6.22.0", 36 | "babel-plugin-ramda": "^1.2.0", 37 | "babel-plugin-transform-flow-strip-types": "^6.22.0", 38 | "babel-plugin-transform-object-rest-spread": "^6.23.0", 39 | "babel-preset-es2015": "^6.24.1", 40 | "babel-preset-react": "^6.24.1", 41 | "babel-preset-stage-0": "^6.24.1", 42 | "eslint": "^5.16.0", 43 | "eslint-config-airbnb-base": "^13.1.0", 44 | "eslint-plugin-import": "^2.17.2", 45 | "flow-bin": "^0.47.0", 46 | "mocha": "^3.4.2", 47 | "rimraf": "^2.6.1", 48 | "rollup": "^0.42.0", 49 | "rollup-plugin-babel": "^2.7.1", 50 | "rollup-plugin-commonjs": "^8.0.2", 51 | "rollup-plugin-flow": "^1.1.1", 52 | "rollup-plugin-node-resolve": "^3.0.0", 53 | "rollup-plugin-replace": "^1.1.1", 54 | "rollup-plugin-uglify": "^2.0.1" 55 | }, 56 | "dependencies": { 57 | "ramda": "^0.28.0" 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import nodeResolve from 'rollup-plugin-node-resolve' 2 | import babel from 'rollup-plugin-babel' 3 | import replace from 'rollup-plugin-replace' 4 | import uglify from 'rollup-plugin-uglify' 5 | import commonjs from 'rollup-plugin-commonjs' 6 | import flow from 'rollup-plugin-flow' 7 | 8 | var env = process.env.NODE_ENV 9 | 10 | var config = { 11 | entry: 'src/index.js', 12 | moduleName: 'Spected', 13 | exports: 'named', 14 | format: 'umd', 15 | sourceMap: env !== 'production', 16 | targets: (env == 'production') ? 17 | [ 18 | { dest: 'dist/spected.min.js', format: 'umd' }, 19 | ] : 20 | [ 21 | { dest: 'dist/spected.js', format: 'umd' }, 22 | { dest: 'dist/spected.es.js', format: 'es' }, 23 | ], 24 | plugins: [ 25 | babel({ 26 | babelrc: false, 27 | presets: [["es2015", { "modules": false }], "stage-0"], 28 | plugins: [ 29 | "external-helpers", 30 | 'transform-object-rest-spread', 31 | 'transform-flow-strip-types', 32 | 'ramda', 33 | ], 34 | exclude: 'node_modules/**', 35 | }), 36 | flow(), 37 | commonjs(), 38 | nodeResolve({ 39 | jsnext: true, 40 | }), 41 | replace({ 42 | 'process.env.NODE_ENV': JSON.stringify(env) 43 | }) 44 | ] 45 | } 46 | 47 | if (env === 'production') { 48 | config.plugins.push( 49 | uglify({ 50 | compress: { 51 | pure_getters: true, 52 | unsafe: true, 53 | unsafe_comps: true, 54 | }, 55 | warnings: false, 56 | }) 57 | ) 58 | } 59 | 60 | export default config 61 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | import { 3 | all, 4 | curry, 5 | equals, 6 | filter, 7 | identity, 8 | map, 9 | reduce, 10 | } from 'ramda' 11 | 12 | /** 13 | * 14 | * @param {Function} successFn callback function in case of valid input 15 | * @param {Function} failFn callback function in case of invalid input 16 | * @param {Array} input 17 | * @returns {*} 18 | */ 19 | const transform = (successFn: Function, failFn: Function, input: Array): any => { 20 | const valid = all(equals(true), input) 21 | return valid ? successFn() : failFn(filter(a => a !== true, input)) 22 | } 23 | 24 | /** 25 | * 26 | * @param {Function} predicate validation function to apply inputs on 27 | * @param {String|Function} errorMsg error message to return in case of fail 28 | * @param {*} value the actual value 29 | * @param {Object} inputs the input object - in case the predicate function needs access to dependent values 30 | * @returns {Boolean} 31 | */ 32 | const runPredicate = ([predicate, errorMsg]:[Function, string], 33 | value:any, 34 | inputs:Object, field:string) => predicate(value, inputs) // eslint-disable-line no-nested-ternary 35 | ? true 36 | : typeof errorMsg === 'function' 37 | ? errorMsg(value, field) 38 | : errorMsg 39 | 40 | /** 41 | * 42 | * @param {Function} successFn callback function in case of valid input 43 | * @param {Function} failFn callback function in case of invalid input 44 | * @param {Object} spec the rule object 45 | * @param {Object|Function} input the validation input data 46 | * @returns {{}} 47 | */ 48 | export const validate = curry((successFn: Function, failFn: Function, spec: Object, input: Object): Object => { 49 | const inputFn = typeof input === 'function' ? input : (key?: string) => key ? input : input 50 | const keys = Object.keys(inputFn()) 51 | return reduce((result, key) => { 52 | const inputObj = inputFn(key) 53 | const value = inputObj[key] 54 | const predicates = spec[key] 55 | if (Array.isArray(predicates)) { 56 | return { ...result, [key]: transform(() => successFn(value), failFn, map(f => runPredicate(f, value, inputObj, key), predicates)) } 57 | } else if (typeof predicates === 'object') { 58 | return { ...result, [key]: validate(successFn, failFn, predicates, value) } 59 | } else if (typeof predicates === 'function') { 60 | const rules = predicates(value) 61 | return { ...result, [key]: validate(successFn, failFn, rules, value) } 62 | } else { 63 | return { ...result, [key]: successFn([]) } 64 | } 65 | }, {}, keys) 66 | }) 67 | 68 | /** 69 | * 70 | * @param {Object} spec the rule object 71 | * @param {Object} input the validation input data 72 | * @returns {{}} 73 | */ 74 | const spected = validate(() => true, identity) 75 | 76 | export default spected 77 | -------------------------------------------------------------------------------- /src/utils/warning.js: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | /* eslint-disable no-console */ 3 | 4 | /** 5 | * 6 | * @param {String} message 7 | */ 8 | export default function warning(message: string): void { 9 | if (console && console.warn) { 10 | console.warn(message) 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | import { equal, deepEqual } from 'assert' 2 | import { 3 | all, 4 | always, 5 | compose, 6 | curry, 7 | filter, 8 | head, 9 | indexOf, 10 | isEmpty, 11 | length, 12 | partial, 13 | map, 14 | not, 15 | path, 16 | prop, 17 | flip, 18 | uncurryN 19 | } from 'ramda' 20 | 21 | import spected, {validate} from '../src/' 22 | 23 | const verify = validate(() => true, head) 24 | 25 | // Predicates 26 | 27 | const colors = ['green', 'blue', 'red'] 28 | const notEmpty = compose(not, isEmpty) 29 | const minLength = a => b => length(b) > a 30 | const hasPresetColors = x => indexOf(x, colors) !== -1 31 | const hasCapitalLetter = a => /[A-Z]/.test(a) 32 | const isGreaterThan = curry((len, a) => (a > len)) 33 | const isLengthGreaterThan = len => compose(isGreaterThan(len), prop('length')) 34 | const isEqual = compareKey => (a, all) => a === all[compareKey] 35 | 36 | // Messages 37 | 38 | const notEmptyMsg = field => `${field} should not be empty.` 39 | const minimumMsg = (field, len) => `Minimum ${field} length of ${len} is required.` 40 | const capitalLetterMag = field => `${field} should contain at least one uppercase letter.` 41 | const capitalLetterMsgWithValue = (field) => (value) => `${field} should contain at least one uppercase letter. ${value} is missing an uppercase letter.` 42 | const equalMsg = (field1, field2) => `${field2} should be equal with ${field1}` 43 | 44 | // Rules 45 | 46 | const nameValidationRule = [[notEmpty, notEmptyMsg('Name')]] 47 | 48 | const randomValidationRule = [ 49 | [isLengthGreaterThan(2), minimumMsg('Random', 3)], 50 | [hasCapitalLetter, capitalLetterMag('Random')], 51 | ] 52 | 53 | const passwordValidationRule = [ 54 | [isLengthGreaterThan(5), minimumMsg('Password', 6)], 55 | [hasCapitalLetter, capitalLetterMag('Password')], 56 | ] 57 | 58 | const repeatPasswordValidationRule = [ 59 | [isLengthGreaterThan(5), minimumMsg('RepeatedPassword', 6)], 60 | [hasCapitalLetter, capitalLetterMag('RepeatedPassword')], 61 | [isEqual('password'), equalMsg('Password', 'RepeatPassword')], 62 | ] 63 | 64 | const spec = { 65 | id: [[notEmpty, notEmptyMsg('id')]], 66 | userName: [[notEmpty, notEmptyMsg('userName')], [minLength(5), minimumMsg('UserName', 6)]], 67 | address: { 68 | street: [[notEmpty, notEmptyMsg('street')]], 69 | }, 70 | settings: { 71 | profile: { 72 | design: { 73 | color: [[notEmpty, notEmptyMsg('color')], [hasPresetColors, 'Use defined colors']], 74 | background: [[notEmpty, notEmptyMsg('background')], [hasPresetColors, 'Use defined colors']], 75 | }, 76 | }, 77 | }, 78 | } 79 | 80 | describe('spected', () => { 81 | 82 | it('should return an error when invalid', () => { 83 | const validationRules = { 84 | name: nameValidationRule, 85 | } 86 | const result = spected(validationRules, {name: ''}) 87 | deepEqual({name: [notEmptyMsg('Name')]}, result) 88 | }) 89 | 90 | it('should return true for field when valid', () => { 91 | const validationRules = { 92 | name: nameValidationRule, 93 | } 94 | const result = spected(validationRules, {name: 'foo'}) 95 | deepEqual({name: true}, result) 96 | }) 97 | 98 | it('should handle multiple validations and return the correct errors', () => { 99 | const validationRules = { 100 | name: nameValidationRule, 101 | random: randomValidationRule, 102 | } 103 | const result = spected(validationRules, {name: 'foo', random: 'A'}) 104 | deepEqual({name: true, random: [minimumMsg('Random', 3)]}, result) 105 | }) 106 | 107 | it('should handle multiple validations and return true for all fields when valid', () => { 108 | const validationRules = { 109 | name: nameValidationRule, 110 | random: randomValidationRule, 111 | } 112 | const result = spected(validationRules, {name: 'foo', random: 'Abcd'}) 113 | deepEqual({name: true, random: true}, result) 114 | }) 115 | 116 | it('should enable to spected to true if two form field values are equal', () => { 117 | const validationRules = { 118 | password: passwordValidationRule, 119 | repeatPassword: repeatPasswordValidationRule, 120 | } 121 | const result = spected(validationRules, {password: 'fooBar', repeatPassword: 'fooBar'}) 122 | deepEqual({password: true, repeatPassword: true}, result) 123 | }) 124 | 125 | it('should enable to spected to falsy if two form field values are not equal', () => { 126 | const validationRules = { 127 | password: passwordValidationRule, 128 | repeatPassword: repeatPasswordValidationRule, 129 | } 130 | const result = spected(validationRules, {password: 'fooBar', repeatPassword: 'fooBarBaz'}) 131 | deepEqual({password: true, repeatPassword: [equalMsg('Password', 'RepeatPassword')]}, result) 132 | }) 133 | 134 | it('should skip validation if no predicate function is provided.', () => { 135 | const validationRules = { 136 | password: [], 137 | } 138 | const result = spected(validationRules, {password: 'fooBar'}) 139 | deepEqual({password: true}, result) 140 | }) 141 | 142 | 143 | it('should skip validation if no predicate function is provided and other fields have rules', () => { 144 | const validationRules = { 145 | password: [], 146 | repeatPassword: repeatPasswordValidationRule, 147 | } 148 | const result = spected(validationRules, {password: 'fooBar', repeatPassword: 'fooBarBaz'}) 149 | deepEqual({password: true, repeatPassword: [equalMsg('Password', 'RepeatPassword')]}, result) 150 | }) 151 | 152 | it('should return true when no predicates are defined for an input', () => { 153 | const validationRules = { 154 | password: [], 155 | repeatPassword: [], 156 | } 157 | const result = spected(validationRules, {password: '', repeatPassword: ''}) 158 | deepEqual({password: true, repeatPassword: true}, result) 159 | }) 160 | 161 | it('should neglect key ordering', () => { 162 | const validationRules = { 163 | repeatPassword: repeatPasswordValidationRule, 164 | password: passwordValidationRule, 165 | } 166 | const result = spected(validationRules, {password: 'fooBar', repeatPassword: 'foobarbaZ'}) 167 | deepEqual({password: true, repeatPassword: [equalMsg('Password', 'RepeatPassword')]}, result) 168 | }) 169 | 170 | it('should return true when missing validations', () => { 171 | const validationRules = { 172 | password: passwordValidationRule, 173 | } 174 | const result = spected(validationRules, {password: 'fooBar', repeatPassword: 'foobarbaZ'}) 175 | deepEqual({password: true, repeatPassword: true}, result) 176 | }) 177 | 178 | it('should skip missing inputs', () => { 179 | const validationRules = { 180 | password: passwordValidationRule, 181 | repeatPassword: repeatPasswordValidationRule, 182 | } 183 | const result = spected(validationRules, {password: 'fooBar'}) 184 | deepEqual({password: true}, result) 185 | }) 186 | 187 | it('should handle deeply nested inputs', () => { 188 | const input = { 189 | id: 1, 190 | userName: 'Random', 191 | address: { 192 | street: 'Foobar', 193 | }, 194 | settings: { 195 | profile: { 196 | design: { 197 | color: 'green', 198 | background: 'blue', 199 | }, 200 | }, 201 | }, 202 | } 203 | 204 | const result = spected(spec, input) 205 | deepEqual({ 206 | id: true, 207 | userName: true, 208 | address: { 209 | street: true, 210 | }, 211 | settings: { 212 | profile: { 213 | design: { 214 | color: true, 215 | background: true, 216 | }, 217 | }, 218 | }, 219 | }, result) 220 | }) 221 | 222 | it('should return true when no predicates are defined for a nested input', () => { 223 | const repeatDeepPasswordValidationRule = [ 224 | [isLengthGreaterThan(5), minimumMsg('RepeatedPassword', 6)], 225 | [hasCapitalLetter, capitalLetterMag('RepeatedPassword')], 226 | [(a, all) => path(['user', 'password'], all) == a, equalMsg('Password', 'RepeatPassword')], 227 | ] 228 | 229 | const validationRules = { 230 | user: { 231 | password: passwordValidationRule, 232 | repeatPassword: repeatDeepPasswordValidationRule, 233 | }, 234 | } 235 | const result = spected(validationRules, {user: {password: 'foobarR', repeatPassword: 'foobar', random: 'bar'}}) 236 | deepEqual({ 237 | user: { 238 | password: true, 239 | repeatPassword: [capitalLetterMag('RepeatedPassword'), equalMsg('Password', 'RepeatPassword')], 240 | random: true, 241 | } 242 | }, result) 243 | }) 244 | 245 | it('should skip missing nested inputs', () => { 246 | const repeatDeepPasswordValidationRule = [ 247 | [isLengthGreaterThan(5), minimumMsg('RepeatedPassword', 6)], 248 | [hasCapitalLetter, capitalLetterMag('RepeatedPassword')], 249 | [(a, all) => path(['user', 'password'], all) == a, equalMsg('Password', 'RepeatPassword')], 250 | ] 251 | 252 | const validationRules = { 253 | user: { 254 | password: passwordValidationRule, 255 | repeatPassword: repeatDeepPasswordValidationRule, 256 | }, 257 | } 258 | const result = spected(validationRules, {user: {password: 'foobarR'}}) 259 | deepEqual({ 260 | user: { 261 | password: true, 262 | } 263 | }, result) 264 | }) 265 | 266 | describe('validate', () => { 267 | 268 | it('should return the original value if validation is successful based on a success callback a => a', () => { 269 | const verify = validate(a => a, a => a) 270 | const validationRules = { 271 | name: nameValidationRule, 272 | } 273 | const result = verify(validationRules, {name: 'foobarbaz'}) 274 | deepEqual({name: 'foobarbaz'}, result) 275 | }) 276 | 277 | it('should return true if validation is successful based on a success callback a => true', () => { 278 | const verify = validate(() => true, () => false) 279 | const validationRules = { 280 | name: nameValidationRule, 281 | } 282 | const result = verify(validationRules, {name: 'foobarbaz'}) 283 | deepEqual({name: true}, result) 284 | }) 285 | 286 | it('should return false if validation has failed for an input based on an error callback () => false', () => { 287 | const verify = validate(() => true, () => false) 288 | const validationRules = { 289 | name: nameValidationRule, 290 | } 291 | const result = verify(validationRules, {name: ''}) 292 | deepEqual({name: false}, result) 293 | }) 294 | 295 | it('should return false if validation has failed for an input based on an error callback xs => xs[o]', () => { 296 | const verify = validate(() => true, xs => xs[0]) 297 | const validationRules = { 298 | name: nameValidationRule, 299 | } 300 | const result = verify(validationRules, {name: ''}) 301 | deepEqual({name: notEmptyMsg('Name')}, result) 302 | }) 303 | 304 | it('should return an error when invalid', () => { 305 | const validationRules = { 306 | name: nameValidationRule, 307 | } 308 | const result = verify(validationRules, {name: ''}) 309 | deepEqual({name: notEmptyMsg('Name')}, result) 310 | }) 311 | 312 | it('should return true for field when valid', () => { 313 | const validationRules = { 314 | name: nameValidationRule, 315 | } 316 | const result = verify(validationRules, {name: 'foo'}) 317 | deepEqual({name: true}, result) 318 | }) 319 | 320 | it('should handle multiple validations and return the correct errors', () => { 321 | const validationRules = { 322 | name: nameValidationRule, 323 | random: randomValidationRule, 324 | } 325 | const result = verify(validationRules, {name: 'foo', random: 'A'}) 326 | deepEqual({name: true, random: minimumMsg('Random', 3)}, result) 327 | }) 328 | 329 | it('should handle multiple validations and return true for all fields when valid', () => { 330 | const validationRules = { 331 | name: nameValidationRule, 332 | random: randomValidationRule, 333 | } 334 | const result = verify(validationRules, {name: 'foo', random: 'Abcd'}) 335 | deepEqual({name: true, random: true}, result) 336 | }) 337 | 338 | it('should enable to verify to true if two form field values are equal', () => { 339 | const validationRules = { 340 | password: passwordValidationRule, 341 | repeatPassword: repeatPasswordValidationRule, 342 | } 343 | const result = verify(validationRules, {password: 'fooBar', repeatPassword: 'fooBar'}) 344 | deepEqual({password: true, repeatPassword: true}, result) 345 | }) 346 | 347 | it('should enable to verify to falsy if two form field values are not equal', () => { 348 | const validationRules = { 349 | password: passwordValidationRule, 350 | repeatPassword: repeatPasswordValidationRule, 351 | } 352 | const result = verify(validationRules, {password: 'fooBar', repeatPassword: 'fooBarBaz'}) 353 | deepEqual({password: true, repeatPassword: equalMsg('Password', 'RepeatPassword')}, result) 354 | }) 355 | 356 | it('should skip validation if no predicate function is provided.', () => { 357 | const validationRules = { 358 | password: [], 359 | } 360 | const result = verify(validationRules, {password: 'fooBar'}) 361 | deepEqual({password: true}, result) 362 | }) 363 | 364 | 365 | it('should skip validation if no predicate function is provided and other fields have rules', () => { 366 | const validationRules = { 367 | password: [], 368 | repeatPassword: repeatPasswordValidationRule, 369 | } 370 | const result = verify(validationRules, {password: 'fooBar', repeatPassword: 'fooBarBaz'}) 371 | deepEqual({password: true, repeatPassword: equalMsg('Password', 'RepeatPassword')}, result) 372 | }) 373 | 374 | it('should return true when no predicates are defined for an input', () => { 375 | const validationRules = { 376 | password: [], 377 | repeatPassword: [], 378 | } 379 | const result = verify(validationRules, {password: '', repeatPassword: ''}) 380 | deepEqual({password: true, repeatPassword: true}, result) 381 | }) 382 | 383 | it('should neglect key ordering', () => { 384 | const validationRules = { 385 | repeatPassword: repeatPasswordValidationRule, 386 | password: passwordValidationRule, 387 | } 388 | const result = verify(validationRules, {password: 'fooBar', repeatPassword: 'foobarbaZ'}) 389 | deepEqual({password: true, repeatPassword: equalMsg('Password', 'RepeatPassword')}, result) 390 | }) 391 | 392 | it('should return true when missing validations', () => { 393 | const validationRules = { 394 | password: passwordValidationRule, 395 | } 396 | const result = verify(validationRules, {password: 'fooBar', repeatPassword: 'foobarbaZ'}) 397 | deepEqual({password: true, repeatPassword: true}, result) 398 | }) 399 | 400 | it('should skip missing inputs', () => { 401 | const validationRules = { 402 | password: passwordValidationRule, 403 | repeatPassword: repeatPasswordValidationRule, 404 | } 405 | const result = verify(validationRules, {password: 'fooBar'}) 406 | deepEqual({password: true}, result) 407 | }) 408 | 409 | it('should handle deeply nested inputs', () => { 410 | const input = { 411 | id: 1, 412 | userName: 'Random', 413 | address: { 414 | street: 'Foobar', 415 | }, 416 | settings: { 417 | profile: { 418 | design: { 419 | color: 'green', 420 | background: 'blue', 421 | }, 422 | }, 423 | }, 424 | } 425 | 426 | const result = verify(spec, input) 427 | deepEqual({ 428 | id: true, 429 | userName: true, 430 | address: { 431 | street: true, 432 | }, 433 | settings: { 434 | profile: { 435 | design: { 436 | color: true, 437 | background: true, 438 | }, 439 | }, 440 | }, 441 | }, result) 442 | }) 443 | 444 | it('should return true when no predicates are defined for a nested input', () => { 445 | const repeatDeepPasswordValidationRule = [ 446 | [isLengthGreaterThan(5), minimumMsg('RepeatedPassword', 6)], 447 | [hasCapitalLetter, capitalLetterMag('RepeatedPassword')], 448 | [(a, all) => path(['user', 'password'], all) == a, equalMsg('Password', 'RepeatPassword')], 449 | ] 450 | 451 | const validationRules = { 452 | user: { 453 | password: passwordValidationRule, 454 | repeatPassword: repeatDeepPasswordValidationRule, 455 | }, 456 | } 457 | const result = verify(validationRules, {user: {password: 'foobarR', repeatPassword: 'foobar', random: 'bar'}}) 458 | deepEqual({ 459 | user: { 460 | password: true, 461 | repeatPassword: capitalLetterMag('RepeatedPassword'), 462 | random: true, 463 | } 464 | }, result) 465 | }) 466 | 467 | it('should skip missing nested inputs', () => { 468 | const repeatDeepPasswordValidationRule = [ 469 | [isLengthGreaterThan(5), minimumMsg('RepeatedPassword', 6)], 470 | [hasCapitalLetter, capitalLetterMag('RepeatedPassword')], 471 | [(a, all) => path(['user', 'password'], all) == a, equalMsg('Password', 'RepeatPassword')], 472 | ] 473 | 474 | const validationRules = { 475 | user: { 476 | password: passwordValidationRule, 477 | repeatPassword: repeatDeepPasswordValidationRule, 478 | }, 479 | } 480 | const result = verify(validationRules, {user: {password: 'foobarR'}}) 481 | deepEqual({ 482 | user: { 483 | password: true, 484 | } 485 | }, result) 486 | }) 487 | 488 | it('should pass the key and the value to the error message if it is a function', () => { 489 | const validationRules = { 490 | password: [[hasCapitalLetter, compose(flip, uncurryN(2))(capitalLetterMsgWithValue)]], 491 | } 492 | const result = verify(validationRules, { password: 'foobar' }) 493 | deepEqual({ password: 'password should contain at least one uppercase letter. foobar is missing an uppercase letter.' }, result) 494 | }) 495 | 496 | it('should work with dynamic rules: an array of inputs', () => { 497 | const capitalLetterMsg = 'capital letter missing' 498 | const userSpec = { 499 | firstName: [[isLengthGreaterThan(5), minimumMsg('firstName', 6)]], 500 | lastName: [[hasCapitalLetter, capitalLetterMsg]], 501 | } 502 | 503 | const validationRules = { 504 | id: [[ notEmpty, notEmptyMsg('id') ]], 505 | users: map(always(userSpec)), 506 | } 507 | 508 | const input = { 509 | id: 4, 510 | users: [ 511 | {firstName: 'foobar', lastName: 'action'}, 512 | {firstName: 'foo', lastName: 'bar'}, 513 | {firstName: 'foobar', lastName: 'Action'}, 514 | ] 515 | } 516 | 517 | const expected = { 518 | id: true, 519 | users: [ 520 | {firstName: true, lastName: capitalLetterMsg}, 521 | {firstName: minimumMsg('firstName', 6), lastName: capitalLetterMsg}, 522 | {firstName: true, lastName: true}, 523 | ] 524 | } 525 | 526 | const result = verify(validationRules, input) 527 | deepEqual(expected, result) 528 | }) 529 | 530 | it('should work with dynamic rules: an object containing arbitrary inputs', () => { 531 | const capitalLetterMsg = 'capital letter missing' 532 | const userSpec = { 533 | firstName: [[isLengthGreaterThan(5), minimumMsg('firstName', 6)]], 534 | lastName: [[hasCapitalLetter, capitalLetterMsg]], 535 | } 536 | 537 | const validationRules = { 538 | id: [[ notEmpty, notEmptyMsg('id') ]], 539 | users: map((always(userSpec))) 540 | } 541 | 542 | const input = { 543 | id: 4, 544 | users: { 545 | one: {firstName: 'foobar', lastName: 'action'}, 546 | two: {firstName: 'foo', lastName: 'bar'}, 547 | three: {firstName: 'foobar', lastName: 'Action'}, 548 | } 549 | } 550 | 551 | const expected = { 552 | id: true, 553 | users: { 554 | one: {firstName: true, lastName: capitalLetterMsg}, 555 | two: {firstName: minimumMsg('firstName', 6), lastName: capitalLetterMsg}, 556 | three: {firstName: true, lastName: true}, 557 | } 558 | } 559 | 560 | const result = verify(validationRules, input) 561 | deepEqual(expected, result) 562 | }) 563 | 564 | it('should work with an array as input value and display an error when validation fails', () => { 565 | const userSpec = [ 566 | [ items => all(isLengthGreaterThan(5), items), 'Every item must have have at least 6 characters!'], 567 | ] 568 | 569 | const validationRules = { 570 | id: [[ notEmpty, notEmptyMsg('id') ]], 571 | users: userSpec, 572 | } 573 | 574 | const input = { 575 | id: 4, 576 | users: ['foo', 'foobar', 'foobarbaz'] 577 | } 578 | 579 | const expected = { 580 | id: true, 581 | users: 'Every item must have have at least 6 characters!' 582 | } 583 | 584 | const result = verify(validationRules, input) 585 | deepEqual(expected, result) 586 | }) 587 | 588 | it('should work with an array as input value and run the success function when all inputs validate successfully', () => { 589 | const userSpec = [ 590 | [ items => all(isLengthGreaterThan(5), items), 'Every item must have have at least 6 characters!'], 591 | ] 592 | 593 | const validationRules = { 594 | id: [[ notEmpty, notEmptyMsg('id') ]], 595 | users: userSpec, 596 | } 597 | 598 | const input = { 599 | id: 4, 600 | users: ['foobar', 'foobarbaz'] 601 | } 602 | 603 | const expected = { 604 | id: true, 605 | users: true, 606 | } 607 | 608 | const result = verify(validationRules, input) 609 | deepEqual(expected, result) 610 | }) 611 | 612 | it('should work with a function as input value', () => { 613 | const verify = validate(a => a, a => a) 614 | const validationRules = { 615 | name: nameValidationRule, 616 | } 617 | const input = {name: 'foobarbaz'} 618 | const result = verify(validationRules, key => key ? ({...input, [key]: ''}) : input) 619 | deepEqual({name: ['Name should not be empty.']}, result) 620 | }) 621 | 622 | }) 623 | 624 | }) 625 | -------------------------------------------------------------------------------- /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": 6 | version "7.0.0" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" 8 | dependencies: 9 | "@babel/highlight" "^7.0.0" 10 | 11 | "@babel/generator@^7.4.4": 12 | version "7.4.4" 13 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.4.tgz#174a215eb843fc392c7edcaabeaa873de6e8f041" 14 | dependencies: 15 | "@babel/types" "^7.4.4" 16 | jsesc "^2.5.1" 17 | lodash "^4.17.11" 18 | source-map "^0.5.0" 19 | trim-right "^1.0.1" 20 | 21 | "@babel/helper-function-name@^7.1.0": 22 | version "7.1.0" 23 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" 24 | dependencies: 25 | "@babel/helper-get-function-arity" "^7.0.0" 26 | "@babel/template" "^7.1.0" 27 | "@babel/types" "^7.0.0" 28 | 29 | "@babel/helper-get-function-arity@^7.0.0": 30 | version "7.0.0" 31 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" 32 | dependencies: 33 | "@babel/types" "^7.0.0" 34 | 35 | "@babel/helper-module-imports@^7.0.0-beta.40": 36 | version "7.0.0" 37 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" 38 | dependencies: 39 | "@babel/types" "^7.0.0" 40 | 41 | "@babel/helper-split-export-declaration@^7.4.4": 42 | version "7.4.4" 43 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" 44 | dependencies: 45 | "@babel/types" "^7.4.4" 46 | 47 | "@babel/highlight@^7.0.0": 48 | version "7.0.0" 49 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" 50 | dependencies: 51 | chalk "^2.0.0" 52 | esutils "^2.0.2" 53 | js-tokens "^4.0.0" 54 | 55 | "@babel/parser@^7.0.0", "@babel/parser@^7.4.4": 56 | version "7.4.4" 57 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.4.tgz#5977129431b8fe33471730d255ce8654ae1250b6" 58 | 59 | "@babel/template@^7.1.0": 60 | version "7.4.4" 61 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" 62 | dependencies: 63 | "@babel/code-frame" "^7.0.0" 64 | "@babel/parser" "^7.4.4" 65 | "@babel/types" "^7.4.4" 66 | 67 | "@babel/traverse@^7.0.0": 68 | version "7.4.4" 69 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.4.tgz#0776f038f6d78361860b6823887d4f3937133fe8" 70 | dependencies: 71 | "@babel/code-frame" "^7.0.0" 72 | "@babel/generator" "^7.4.4" 73 | "@babel/helper-function-name" "^7.1.0" 74 | "@babel/helper-split-export-declaration" "^7.4.4" 75 | "@babel/parser" "^7.4.4" 76 | "@babel/types" "^7.4.4" 77 | debug "^4.1.0" 78 | globals "^11.1.0" 79 | lodash "^4.17.11" 80 | 81 | "@babel/types@^7.0.0", "@babel/types@^7.4.4": 82 | version "7.4.4" 83 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.4.tgz#8db9e9a629bb7c29370009b4b779ed93fe57d5f0" 84 | dependencies: 85 | esutils "^2.0.2" 86 | lodash "^4.17.11" 87 | to-fast-properties "^2.0.0" 88 | 89 | abbrev@1: 90 | version "1.1.1" 91 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 92 | 93 | acorn-jsx@^5.0.0: 94 | version "5.0.1" 95 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" 96 | 97 | acorn@^5.2.1: 98 | version "5.7.3" 99 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" 100 | 101 | acorn@^6.0.7: 102 | version "6.1.1" 103 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" 104 | 105 | ajv@^6.9.1: 106 | version "6.10.0" 107 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" 108 | dependencies: 109 | fast-deep-equal "^2.0.1" 110 | fast-json-stable-stringify "^2.0.0" 111 | json-schema-traverse "^0.4.1" 112 | uri-js "^4.2.2" 113 | 114 | ansi-escapes@^3.2.0: 115 | version "3.2.0" 116 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 117 | 118 | ansi-regex@^2.0.0: 119 | version "2.1.1" 120 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 121 | 122 | ansi-regex@^3.0.0: 123 | version "3.0.0" 124 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 125 | 126 | ansi-regex@^4.1.0: 127 | version "4.1.0" 128 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 129 | 130 | ansi-styles@^2.2.1: 131 | version "2.2.1" 132 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 133 | 134 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 135 | version "3.2.1" 136 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 137 | dependencies: 138 | color-convert "^1.9.0" 139 | 140 | anymatch@^1.3.0: 141 | version "1.3.2" 142 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 143 | dependencies: 144 | micromatch "^2.1.5" 145 | normalize-path "^2.0.0" 146 | 147 | aproba@^1.0.3: 148 | version "1.2.0" 149 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 150 | 151 | are-we-there-yet@~1.1.2: 152 | version "1.1.5" 153 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 154 | dependencies: 155 | delegates "^1.0.0" 156 | readable-stream "^2.0.6" 157 | 158 | argparse@^1.0.7: 159 | version "1.0.10" 160 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 161 | dependencies: 162 | sprintf-js "~1.0.2" 163 | 164 | arr-diff@^2.0.0: 165 | version "2.0.0" 166 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 167 | dependencies: 168 | arr-flatten "^1.0.1" 169 | 170 | arr-diff@^4.0.0: 171 | version "4.0.0" 172 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 173 | 174 | arr-flatten@^1.0.1, arr-flatten@^1.1.0: 175 | version "1.1.0" 176 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 177 | 178 | arr-union@^3.1.0: 179 | version "3.1.0" 180 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 181 | 182 | array-includes@^3.0.3: 183 | version "3.0.3" 184 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" 185 | dependencies: 186 | define-properties "^1.1.2" 187 | es-abstract "^1.7.0" 188 | 189 | array-unique@^0.2.1: 190 | version "0.2.1" 191 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 192 | 193 | array-unique@^0.3.2: 194 | version "0.3.2" 195 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 196 | 197 | assign-symbols@^1.0.0: 198 | version "1.0.0" 199 | resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" 200 | 201 | astral-regex@^1.0.0: 202 | version "1.0.0" 203 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 204 | 205 | async-each@^1.0.0: 206 | version "1.0.3" 207 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" 208 | 209 | atob@^2.1.1: 210 | version "2.1.2" 211 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 212 | 213 | babel-cli@^6.24.1: 214 | version "6.26.0" 215 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" 216 | dependencies: 217 | babel-core "^6.26.0" 218 | babel-polyfill "^6.26.0" 219 | babel-register "^6.26.0" 220 | babel-runtime "^6.26.0" 221 | commander "^2.11.0" 222 | convert-source-map "^1.5.0" 223 | fs-readdir-recursive "^1.0.0" 224 | glob "^7.1.2" 225 | lodash "^4.17.4" 226 | output-file-sync "^1.1.2" 227 | path-is-absolute "^1.0.1" 228 | slash "^1.0.0" 229 | source-map "^0.5.6" 230 | v8flags "^2.1.1" 231 | optionalDependencies: 232 | chokidar "^1.6.1" 233 | 234 | babel-code-frame@^6.26.0: 235 | version "6.26.0" 236 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 237 | dependencies: 238 | chalk "^1.1.3" 239 | esutils "^2.0.2" 240 | js-tokens "^3.0.2" 241 | 242 | babel-core@6, babel-core@^6.25.0, babel-core@^6.26.0: 243 | version "6.26.3" 244 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" 245 | dependencies: 246 | babel-code-frame "^6.26.0" 247 | babel-generator "^6.26.0" 248 | babel-helpers "^6.24.1" 249 | babel-messages "^6.23.0" 250 | babel-register "^6.26.0" 251 | babel-runtime "^6.26.0" 252 | babel-template "^6.26.0" 253 | babel-traverse "^6.26.0" 254 | babel-types "^6.26.0" 255 | babylon "^6.18.0" 256 | convert-source-map "^1.5.1" 257 | debug "^2.6.9" 258 | json5 "^0.5.1" 259 | lodash "^4.17.4" 260 | minimatch "^3.0.4" 261 | path-is-absolute "^1.0.1" 262 | private "^0.1.8" 263 | slash "^1.0.0" 264 | source-map "^0.5.7" 265 | 266 | babel-eslint@^10.0.1: 267 | version "10.0.1" 268 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" 269 | dependencies: 270 | "@babel/code-frame" "^7.0.0" 271 | "@babel/parser" "^7.0.0" 272 | "@babel/traverse" "^7.0.0" 273 | "@babel/types" "^7.0.0" 274 | eslint-scope "3.7.1" 275 | eslint-visitor-keys "^1.0.0" 276 | 277 | babel-generator@^6.26.0: 278 | version "6.26.1" 279 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" 280 | dependencies: 281 | babel-messages "^6.23.0" 282 | babel-runtime "^6.26.0" 283 | babel-types "^6.26.0" 284 | detect-indent "^4.0.0" 285 | jsesc "^1.3.0" 286 | lodash "^4.17.4" 287 | source-map "^0.5.7" 288 | trim-right "^1.0.1" 289 | 290 | babel-helper-bindify-decorators@^6.24.1: 291 | version "6.24.1" 292 | resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" 293 | dependencies: 294 | babel-runtime "^6.22.0" 295 | babel-traverse "^6.24.1" 296 | babel-types "^6.24.1" 297 | 298 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: 299 | version "6.24.1" 300 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" 301 | dependencies: 302 | babel-helper-explode-assignable-expression "^6.24.1" 303 | babel-runtime "^6.22.0" 304 | babel-types "^6.24.1" 305 | 306 | babel-helper-builder-react-jsx@^6.24.1: 307 | version "6.26.0" 308 | resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" 309 | dependencies: 310 | babel-runtime "^6.26.0" 311 | babel-types "^6.26.0" 312 | esutils "^2.0.2" 313 | 314 | babel-helper-call-delegate@^6.24.1: 315 | version "6.24.1" 316 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 317 | dependencies: 318 | babel-helper-hoist-variables "^6.24.1" 319 | babel-runtime "^6.22.0" 320 | babel-traverse "^6.24.1" 321 | babel-types "^6.24.1" 322 | 323 | babel-helper-define-map@^6.24.1: 324 | version "6.26.0" 325 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" 326 | dependencies: 327 | babel-helper-function-name "^6.24.1" 328 | babel-runtime "^6.26.0" 329 | babel-types "^6.26.0" 330 | lodash "^4.17.4" 331 | 332 | babel-helper-explode-assignable-expression@^6.24.1: 333 | version "6.24.1" 334 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" 335 | dependencies: 336 | babel-runtime "^6.22.0" 337 | babel-traverse "^6.24.1" 338 | babel-types "^6.24.1" 339 | 340 | babel-helper-explode-class@^6.24.1: 341 | version "6.24.1" 342 | resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" 343 | dependencies: 344 | babel-helper-bindify-decorators "^6.24.1" 345 | babel-runtime "^6.22.0" 346 | babel-traverse "^6.24.1" 347 | babel-types "^6.24.1" 348 | 349 | babel-helper-function-name@^6.24.1: 350 | version "6.24.1" 351 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 352 | dependencies: 353 | babel-helper-get-function-arity "^6.24.1" 354 | babel-runtime "^6.22.0" 355 | babel-template "^6.24.1" 356 | babel-traverse "^6.24.1" 357 | babel-types "^6.24.1" 358 | 359 | babel-helper-get-function-arity@^6.24.1: 360 | version "6.24.1" 361 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 362 | dependencies: 363 | babel-runtime "^6.22.0" 364 | babel-types "^6.24.1" 365 | 366 | babel-helper-hoist-variables@^6.24.1: 367 | version "6.24.1" 368 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 369 | dependencies: 370 | babel-runtime "^6.22.0" 371 | babel-types "^6.24.1" 372 | 373 | babel-helper-optimise-call-expression@^6.24.1: 374 | version "6.24.1" 375 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 376 | dependencies: 377 | babel-runtime "^6.22.0" 378 | babel-types "^6.24.1" 379 | 380 | babel-helper-regex@^6.24.1: 381 | version "6.26.0" 382 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" 383 | dependencies: 384 | babel-runtime "^6.26.0" 385 | babel-types "^6.26.0" 386 | lodash "^4.17.4" 387 | 388 | babel-helper-remap-async-to-generator@^6.24.1: 389 | version "6.24.1" 390 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" 391 | dependencies: 392 | babel-helper-function-name "^6.24.1" 393 | babel-runtime "^6.22.0" 394 | babel-template "^6.24.1" 395 | babel-traverse "^6.24.1" 396 | babel-types "^6.24.1" 397 | 398 | babel-helper-replace-supers@^6.24.1: 399 | version "6.24.1" 400 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 401 | dependencies: 402 | babel-helper-optimise-call-expression "^6.24.1" 403 | babel-messages "^6.23.0" 404 | babel-runtime "^6.22.0" 405 | babel-template "^6.24.1" 406 | babel-traverse "^6.24.1" 407 | babel-types "^6.24.1" 408 | 409 | babel-helpers@^6.24.1: 410 | version "6.24.1" 411 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 412 | dependencies: 413 | babel-runtime "^6.22.0" 414 | babel-template "^6.24.1" 415 | 416 | babel-loader@^7.0.0: 417 | version "7.1.5" 418 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" 419 | dependencies: 420 | find-cache-dir "^1.0.0" 421 | loader-utils "^1.0.2" 422 | mkdirp "^0.5.1" 423 | 424 | babel-messages@^6.23.0: 425 | version "6.23.0" 426 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 427 | dependencies: 428 | babel-runtime "^6.22.0" 429 | 430 | babel-plugin-add-module-exports@^0.2.1: 431 | version "0.2.1" 432 | resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25" 433 | 434 | babel-plugin-check-es2015-constants@^6.22.0: 435 | version "6.22.0" 436 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 437 | dependencies: 438 | babel-runtime "^6.22.0" 439 | 440 | babel-plugin-external-helpers@^6.22.0: 441 | version "6.22.0" 442 | resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" 443 | dependencies: 444 | babel-runtime "^6.22.0" 445 | 446 | babel-plugin-ramda@^1.2.0: 447 | version "1.6.3" 448 | resolved "https://registry.yarnpkg.com/babel-plugin-ramda/-/babel-plugin-ramda-1.6.3.tgz#7afc0b40217f1cf197f0146c2f1eb2396e6c3631" 449 | dependencies: 450 | "@babel/helper-module-imports" "^7.0.0-beta.40" 451 | ramda "0.x" 452 | 453 | babel-plugin-syntax-async-functions@^6.8.0: 454 | version "6.13.0" 455 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" 456 | 457 | babel-plugin-syntax-async-generators@^6.5.0: 458 | version "6.13.0" 459 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" 460 | 461 | babel-plugin-syntax-class-constructor-call@^6.18.0: 462 | version "6.18.0" 463 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" 464 | 465 | babel-plugin-syntax-class-properties@^6.8.0: 466 | version "6.13.0" 467 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" 468 | 469 | babel-plugin-syntax-decorators@^6.13.0: 470 | version "6.13.0" 471 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" 472 | 473 | babel-plugin-syntax-do-expressions@^6.8.0: 474 | version "6.13.0" 475 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" 476 | 477 | babel-plugin-syntax-dynamic-import@^6.18.0: 478 | version "6.18.0" 479 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" 480 | 481 | babel-plugin-syntax-exponentiation-operator@^6.8.0: 482 | version "6.13.0" 483 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 484 | 485 | babel-plugin-syntax-export-extensions@^6.8.0: 486 | version "6.13.0" 487 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" 488 | 489 | babel-plugin-syntax-flow@^6.18.0: 490 | version "6.18.0" 491 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" 492 | 493 | babel-plugin-syntax-function-bind@^6.8.0: 494 | version "6.13.0" 495 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" 496 | 497 | babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: 498 | version "6.18.0" 499 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" 500 | 501 | babel-plugin-syntax-object-rest-spread@^6.8.0: 502 | version "6.13.0" 503 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" 504 | 505 | babel-plugin-syntax-trailing-function-commas@^6.22.0: 506 | version "6.22.0" 507 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" 508 | 509 | babel-plugin-transform-async-generator-functions@^6.24.1: 510 | version "6.24.1" 511 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" 512 | dependencies: 513 | babel-helper-remap-async-to-generator "^6.24.1" 514 | babel-plugin-syntax-async-generators "^6.5.0" 515 | babel-runtime "^6.22.0" 516 | 517 | babel-plugin-transform-async-to-generator@^6.24.1: 518 | version "6.24.1" 519 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" 520 | dependencies: 521 | babel-helper-remap-async-to-generator "^6.24.1" 522 | babel-plugin-syntax-async-functions "^6.8.0" 523 | babel-runtime "^6.22.0" 524 | 525 | babel-plugin-transform-class-constructor-call@^6.24.1: 526 | version "6.24.1" 527 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" 528 | dependencies: 529 | babel-plugin-syntax-class-constructor-call "^6.18.0" 530 | babel-runtime "^6.22.0" 531 | babel-template "^6.24.1" 532 | 533 | babel-plugin-transform-class-properties@^6.24.1: 534 | version "6.24.1" 535 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" 536 | dependencies: 537 | babel-helper-function-name "^6.24.1" 538 | babel-plugin-syntax-class-properties "^6.8.0" 539 | babel-runtime "^6.22.0" 540 | babel-template "^6.24.1" 541 | 542 | babel-plugin-transform-decorators@^6.24.1: 543 | version "6.24.1" 544 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" 545 | dependencies: 546 | babel-helper-explode-class "^6.24.1" 547 | babel-plugin-syntax-decorators "^6.13.0" 548 | babel-runtime "^6.22.0" 549 | babel-template "^6.24.1" 550 | babel-types "^6.24.1" 551 | 552 | babel-plugin-transform-do-expressions@^6.22.0: 553 | version "6.22.0" 554 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" 555 | dependencies: 556 | babel-plugin-syntax-do-expressions "^6.8.0" 557 | babel-runtime "^6.22.0" 558 | 559 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 560 | version "6.22.0" 561 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 562 | dependencies: 563 | babel-runtime "^6.22.0" 564 | 565 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 566 | version "6.22.0" 567 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 568 | dependencies: 569 | babel-runtime "^6.22.0" 570 | 571 | babel-plugin-transform-es2015-block-scoping@^6.24.1: 572 | version "6.26.0" 573 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" 574 | dependencies: 575 | babel-runtime "^6.26.0" 576 | babel-template "^6.26.0" 577 | babel-traverse "^6.26.0" 578 | babel-types "^6.26.0" 579 | lodash "^4.17.4" 580 | 581 | babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.9.0: 582 | version "6.24.1" 583 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 584 | dependencies: 585 | babel-helper-define-map "^6.24.1" 586 | babel-helper-function-name "^6.24.1" 587 | babel-helper-optimise-call-expression "^6.24.1" 588 | babel-helper-replace-supers "^6.24.1" 589 | babel-messages "^6.23.0" 590 | babel-runtime "^6.22.0" 591 | babel-template "^6.24.1" 592 | babel-traverse "^6.24.1" 593 | babel-types "^6.24.1" 594 | 595 | babel-plugin-transform-es2015-computed-properties@^6.24.1: 596 | version "6.24.1" 597 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 598 | dependencies: 599 | babel-runtime "^6.22.0" 600 | babel-template "^6.24.1" 601 | 602 | babel-plugin-transform-es2015-destructuring@^6.22.0: 603 | version "6.23.0" 604 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 605 | dependencies: 606 | babel-runtime "^6.22.0" 607 | 608 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1: 609 | version "6.24.1" 610 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 611 | dependencies: 612 | babel-runtime "^6.22.0" 613 | babel-types "^6.24.1" 614 | 615 | babel-plugin-transform-es2015-for-of@^6.22.0: 616 | version "6.23.0" 617 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 618 | dependencies: 619 | babel-runtime "^6.22.0" 620 | 621 | babel-plugin-transform-es2015-function-name@^6.24.1: 622 | version "6.24.1" 623 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 624 | dependencies: 625 | babel-helper-function-name "^6.24.1" 626 | babel-runtime "^6.22.0" 627 | babel-types "^6.24.1" 628 | 629 | babel-plugin-transform-es2015-literals@^6.22.0: 630 | version "6.22.0" 631 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 632 | dependencies: 633 | babel-runtime "^6.22.0" 634 | 635 | babel-plugin-transform-es2015-modules-amd@^6.24.1: 636 | version "6.24.1" 637 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 638 | dependencies: 639 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 640 | babel-runtime "^6.22.0" 641 | babel-template "^6.24.1" 642 | 643 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 644 | version "6.26.2" 645 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" 646 | dependencies: 647 | babel-plugin-transform-strict-mode "^6.24.1" 648 | babel-runtime "^6.26.0" 649 | babel-template "^6.26.0" 650 | babel-types "^6.26.0" 651 | 652 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1: 653 | version "6.24.1" 654 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 655 | dependencies: 656 | babel-helper-hoist-variables "^6.24.1" 657 | babel-runtime "^6.22.0" 658 | babel-template "^6.24.1" 659 | 660 | babel-plugin-transform-es2015-modules-umd@^6.24.1: 661 | version "6.24.1" 662 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 663 | dependencies: 664 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 665 | babel-runtime "^6.22.0" 666 | babel-template "^6.24.1" 667 | 668 | babel-plugin-transform-es2015-object-super@^6.24.1: 669 | version "6.24.1" 670 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 671 | dependencies: 672 | babel-helper-replace-supers "^6.24.1" 673 | babel-runtime "^6.22.0" 674 | 675 | babel-plugin-transform-es2015-parameters@^6.24.1: 676 | version "6.24.1" 677 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 678 | dependencies: 679 | babel-helper-call-delegate "^6.24.1" 680 | babel-helper-get-function-arity "^6.24.1" 681 | babel-runtime "^6.22.0" 682 | babel-template "^6.24.1" 683 | babel-traverse "^6.24.1" 684 | babel-types "^6.24.1" 685 | 686 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1: 687 | version "6.24.1" 688 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 689 | dependencies: 690 | babel-runtime "^6.22.0" 691 | babel-types "^6.24.1" 692 | 693 | babel-plugin-transform-es2015-spread@^6.22.0: 694 | version "6.22.0" 695 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 696 | dependencies: 697 | babel-runtime "^6.22.0" 698 | 699 | babel-plugin-transform-es2015-sticky-regex@^6.24.1: 700 | version "6.24.1" 701 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 702 | dependencies: 703 | babel-helper-regex "^6.24.1" 704 | babel-runtime "^6.22.0" 705 | babel-types "^6.24.1" 706 | 707 | babel-plugin-transform-es2015-template-literals@^6.22.0: 708 | version "6.22.0" 709 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 710 | dependencies: 711 | babel-runtime "^6.22.0" 712 | 713 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0: 714 | version "6.23.0" 715 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 716 | dependencies: 717 | babel-runtime "^6.22.0" 718 | 719 | babel-plugin-transform-es2015-unicode-regex@^6.24.1: 720 | version "6.24.1" 721 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 722 | dependencies: 723 | babel-helper-regex "^6.24.1" 724 | babel-runtime "^6.22.0" 725 | regexpu-core "^2.0.0" 726 | 727 | babel-plugin-transform-exponentiation-operator@^6.24.1: 728 | version "6.24.1" 729 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" 730 | dependencies: 731 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" 732 | babel-plugin-syntax-exponentiation-operator "^6.8.0" 733 | babel-runtime "^6.22.0" 734 | 735 | babel-plugin-transform-export-extensions@^6.22.0: 736 | version "6.22.0" 737 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" 738 | dependencies: 739 | babel-plugin-syntax-export-extensions "^6.8.0" 740 | babel-runtime "^6.22.0" 741 | 742 | babel-plugin-transform-flow-strip-types@^6.22.0: 743 | version "6.22.0" 744 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" 745 | dependencies: 746 | babel-plugin-syntax-flow "^6.18.0" 747 | babel-runtime "^6.22.0" 748 | 749 | babel-plugin-transform-function-bind@^6.22.0: 750 | version "6.22.0" 751 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" 752 | dependencies: 753 | babel-plugin-syntax-function-bind "^6.8.0" 754 | babel-runtime "^6.22.0" 755 | 756 | babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.23.0: 757 | version "6.26.0" 758 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" 759 | dependencies: 760 | babel-plugin-syntax-object-rest-spread "^6.8.0" 761 | babel-runtime "^6.26.0" 762 | 763 | babel-plugin-transform-react-display-name@^6.23.0: 764 | version "6.25.0" 765 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" 766 | dependencies: 767 | babel-runtime "^6.22.0" 768 | 769 | babel-plugin-transform-react-jsx-self@^6.22.0: 770 | version "6.22.0" 771 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" 772 | dependencies: 773 | babel-plugin-syntax-jsx "^6.8.0" 774 | babel-runtime "^6.22.0" 775 | 776 | babel-plugin-transform-react-jsx-source@^6.22.0: 777 | version "6.22.0" 778 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" 779 | dependencies: 780 | babel-plugin-syntax-jsx "^6.8.0" 781 | babel-runtime "^6.22.0" 782 | 783 | babel-plugin-transform-react-jsx@^6.24.1: 784 | version "6.24.1" 785 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" 786 | dependencies: 787 | babel-helper-builder-react-jsx "^6.24.1" 788 | babel-plugin-syntax-jsx "^6.8.0" 789 | babel-runtime "^6.22.0" 790 | 791 | babel-plugin-transform-regenerator@^6.24.1: 792 | version "6.26.0" 793 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" 794 | dependencies: 795 | regenerator-transform "^0.10.0" 796 | 797 | babel-plugin-transform-strict-mode@^6.24.1: 798 | version "6.24.1" 799 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 800 | dependencies: 801 | babel-runtime "^6.22.0" 802 | babel-types "^6.24.1" 803 | 804 | babel-polyfill@^6.26.0: 805 | version "6.26.0" 806 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" 807 | dependencies: 808 | babel-runtime "^6.26.0" 809 | core-js "^2.5.0" 810 | regenerator-runtime "^0.10.5" 811 | 812 | babel-preset-es2015@^6.24.1: 813 | version "6.24.1" 814 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" 815 | dependencies: 816 | babel-plugin-check-es2015-constants "^6.22.0" 817 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 818 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 819 | babel-plugin-transform-es2015-block-scoping "^6.24.1" 820 | babel-plugin-transform-es2015-classes "^6.24.1" 821 | babel-plugin-transform-es2015-computed-properties "^6.24.1" 822 | babel-plugin-transform-es2015-destructuring "^6.22.0" 823 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1" 824 | babel-plugin-transform-es2015-for-of "^6.22.0" 825 | babel-plugin-transform-es2015-function-name "^6.24.1" 826 | babel-plugin-transform-es2015-literals "^6.22.0" 827 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 828 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 829 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1" 830 | babel-plugin-transform-es2015-modules-umd "^6.24.1" 831 | babel-plugin-transform-es2015-object-super "^6.24.1" 832 | babel-plugin-transform-es2015-parameters "^6.24.1" 833 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1" 834 | babel-plugin-transform-es2015-spread "^6.22.0" 835 | babel-plugin-transform-es2015-sticky-regex "^6.24.1" 836 | babel-plugin-transform-es2015-template-literals "^6.22.0" 837 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0" 838 | babel-plugin-transform-es2015-unicode-regex "^6.24.1" 839 | babel-plugin-transform-regenerator "^6.24.1" 840 | 841 | babel-preset-flow@^6.23.0: 842 | version "6.23.0" 843 | resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" 844 | dependencies: 845 | babel-plugin-transform-flow-strip-types "^6.22.0" 846 | 847 | babel-preset-react@^6.24.1: 848 | version "6.24.1" 849 | resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" 850 | dependencies: 851 | babel-plugin-syntax-jsx "^6.3.13" 852 | babel-plugin-transform-react-display-name "^6.23.0" 853 | babel-plugin-transform-react-jsx "^6.24.1" 854 | babel-plugin-transform-react-jsx-self "^6.22.0" 855 | babel-plugin-transform-react-jsx-source "^6.22.0" 856 | babel-preset-flow "^6.23.0" 857 | 858 | babel-preset-stage-0@^6.24.1: 859 | version "6.24.1" 860 | resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" 861 | dependencies: 862 | babel-plugin-transform-do-expressions "^6.22.0" 863 | babel-plugin-transform-function-bind "^6.22.0" 864 | babel-preset-stage-1 "^6.24.1" 865 | 866 | babel-preset-stage-1@^6.24.1: 867 | version "6.24.1" 868 | resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" 869 | dependencies: 870 | babel-plugin-transform-class-constructor-call "^6.24.1" 871 | babel-plugin-transform-export-extensions "^6.22.0" 872 | babel-preset-stage-2 "^6.24.1" 873 | 874 | babel-preset-stage-2@^6.24.1: 875 | version "6.24.1" 876 | resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" 877 | dependencies: 878 | babel-plugin-syntax-dynamic-import "^6.18.0" 879 | babel-plugin-transform-class-properties "^6.24.1" 880 | babel-plugin-transform-decorators "^6.24.1" 881 | babel-preset-stage-3 "^6.24.1" 882 | 883 | babel-preset-stage-3@^6.24.1: 884 | version "6.24.1" 885 | resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" 886 | dependencies: 887 | babel-plugin-syntax-trailing-function-commas "^6.22.0" 888 | babel-plugin-transform-async-generator-functions "^6.24.1" 889 | babel-plugin-transform-async-to-generator "^6.24.1" 890 | babel-plugin-transform-exponentiation-operator "^6.24.1" 891 | babel-plugin-transform-object-rest-spread "^6.22.0" 892 | 893 | babel-register@^6.26.0: 894 | version "6.26.0" 895 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 896 | dependencies: 897 | babel-core "^6.26.0" 898 | babel-runtime "^6.26.0" 899 | core-js "^2.5.0" 900 | home-or-tmp "^2.0.0" 901 | lodash "^4.17.4" 902 | mkdirp "^0.5.1" 903 | source-map-support "^0.4.15" 904 | 905 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: 906 | version "6.26.0" 907 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 908 | dependencies: 909 | core-js "^2.4.0" 910 | regenerator-runtime "^0.11.0" 911 | 912 | babel-template@^6.24.1, babel-template@^6.26.0: 913 | version "6.26.0" 914 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 915 | dependencies: 916 | babel-runtime "^6.26.0" 917 | babel-traverse "^6.26.0" 918 | babel-types "^6.26.0" 919 | babylon "^6.18.0" 920 | lodash "^4.17.4" 921 | 922 | babel-traverse@^6.24.1, babel-traverse@^6.26.0: 923 | version "6.26.0" 924 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 925 | dependencies: 926 | babel-code-frame "^6.26.0" 927 | babel-messages "^6.23.0" 928 | babel-runtime "^6.26.0" 929 | babel-types "^6.26.0" 930 | babylon "^6.18.0" 931 | debug "^2.6.8" 932 | globals "^9.18.0" 933 | invariant "^2.2.2" 934 | lodash "^4.17.4" 935 | 936 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: 937 | version "6.26.0" 938 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 939 | dependencies: 940 | babel-runtime "^6.26.0" 941 | esutils "^2.0.2" 942 | lodash "^4.17.4" 943 | to-fast-properties "^1.0.3" 944 | 945 | babel@^6.23.0: 946 | version "6.23.0" 947 | resolved "https://registry.yarnpkg.com/babel/-/babel-6.23.0.tgz#d0d1e7d803e974765beea3232d4e153c0efb90f4" 948 | 949 | babylon@^6.15.0, babylon@^6.18.0: 950 | version "6.18.0" 951 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 952 | 953 | balanced-match@^1.0.0: 954 | version "1.0.0" 955 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 956 | 957 | base@^0.11.1: 958 | version "0.11.2" 959 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 960 | dependencies: 961 | cache-base "^1.0.1" 962 | class-utils "^0.3.5" 963 | component-emitter "^1.2.1" 964 | define-property "^1.0.0" 965 | isobject "^3.0.1" 966 | mixin-deep "^1.2.0" 967 | pascalcase "^0.1.1" 968 | 969 | big.js@^5.2.2: 970 | version "5.2.2" 971 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" 972 | 973 | binary-extensions@^1.0.0: 974 | version "1.13.1" 975 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" 976 | 977 | brace-expansion@^1.1.7: 978 | version "1.1.11" 979 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 980 | dependencies: 981 | balanced-match "^1.0.0" 982 | concat-map "0.0.1" 983 | 984 | braces@^1.8.2: 985 | version "1.8.5" 986 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 987 | dependencies: 988 | expand-range "^1.8.1" 989 | preserve "^0.2.0" 990 | repeat-element "^1.1.2" 991 | 992 | braces@^2.3.1: 993 | version "2.3.2" 994 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" 995 | dependencies: 996 | arr-flatten "^1.1.0" 997 | array-unique "^0.3.2" 998 | extend-shallow "^2.0.1" 999 | fill-range "^4.0.0" 1000 | isobject "^3.0.1" 1001 | repeat-element "^1.1.2" 1002 | snapdragon "^0.8.1" 1003 | snapdragon-node "^2.0.1" 1004 | split-string "^3.0.2" 1005 | to-regex "^3.0.1" 1006 | 1007 | browser-stdout@1.3.0: 1008 | version "1.3.0" 1009 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 1010 | 1011 | builtin-modules@^2.0.0: 1012 | version "2.0.0" 1013 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" 1014 | 1015 | cache-base@^1.0.1: 1016 | version "1.0.1" 1017 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 1018 | dependencies: 1019 | collection-visit "^1.0.0" 1020 | component-emitter "^1.2.1" 1021 | get-value "^2.0.6" 1022 | has-value "^1.0.0" 1023 | isobject "^3.0.1" 1024 | set-value "^2.0.0" 1025 | to-object-path "^0.3.0" 1026 | union-value "^1.0.0" 1027 | unset-value "^1.0.0" 1028 | 1029 | callsites@^3.0.0: 1030 | version "3.1.0" 1031 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 1032 | 1033 | chalk@^1.1.3: 1034 | version "1.1.3" 1035 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 1036 | dependencies: 1037 | ansi-styles "^2.2.1" 1038 | escape-string-regexp "^1.0.2" 1039 | has-ansi "^2.0.0" 1040 | strip-ansi "^3.0.0" 1041 | supports-color "^2.0.0" 1042 | 1043 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: 1044 | version "2.4.2" 1045 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1046 | dependencies: 1047 | ansi-styles "^3.2.1" 1048 | escape-string-regexp "^1.0.5" 1049 | supports-color "^5.3.0" 1050 | 1051 | chardet@^0.7.0: 1052 | version "0.7.0" 1053 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 1054 | 1055 | chokidar@^1.6.1: 1056 | version "1.7.0" 1057 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 1058 | dependencies: 1059 | anymatch "^1.3.0" 1060 | async-each "^1.0.0" 1061 | glob-parent "^2.0.0" 1062 | inherits "^2.0.1" 1063 | is-binary-path "^1.0.0" 1064 | is-glob "^2.0.0" 1065 | path-is-absolute "^1.0.0" 1066 | readdirp "^2.0.0" 1067 | optionalDependencies: 1068 | fsevents "^1.0.0" 1069 | 1070 | chownr@^1.1.1: 1071 | version "1.1.1" 1072 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" 1073 | 1074 | class-utils@^0.3.5: 1075 | version "0.3.6" 1076 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 1077 | dependencies: 1078 | arr-union "^3.1.0" 1079 | define-property "^0.2.5" 1080 | isobject "^3.0.0" 1081 | static-extend "^0.1.1" 1082 | 1083 | cli-cursor@^2.1.0: 1084 | version "2.1.0" 1085 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 1086 | dependencies: 1087 | restore-cursor "^2.0.0" 1088 | 1089 | cli-width@^2.0.0: 1090 | version "2.2.0" 1091 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 1092 | 1093 | code-point-at@^1.0.0: 1094 | version "1.1.0" 1095 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 1096 | 1097 | collection-visit@^1.0.0: 1098 | version "1.0.0" 1099 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 1100 | dependencies: 1101 | map-visit "^1.0.0" 1102 | object-visit "^1.0.0" 1103 | 1104 | color-convert@^1.9.0: 1105 | version "1.9.3" 1106 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1107 | dependencies: 1108 | color-name "1.1.3" 1109 | 1110 | color-name@1.1.3: 1111 | version "1.1.3" 1112 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1113 | 1114 | commander@2.9.0: 1115 | version "2.9.0" 1116 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 1117 | dependencies: 1118 | graceful-readlink ">= 1.0.0" 1119 | 1120 | commander@^2.11.0, commander@~2.20.0: 1121 | version "2.20.0" 1122 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 1123 | 1124 | commondir@^1.0.1: 1125 | version "1.0.1" 1126 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 1127 | 1128 | component-emitter@^1.2.1: 1129 | version "1.3.0" 1130 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" 1131 | 1132 | concat-map@0.0.1: 1133 | version "0.0.1" 1134 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1135 | 1136 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 1137 | version "1.1.0" 1138 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 1139 | 1140 | contains-path@^0.1.0: 1141 | version "0.1.0" 1142 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 1143 | 1144 | convert-source-map@^1.5.0, convert-source-map@^1.5.1: 1145 | version "1.6.0" 1146 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" 1147 | dependencies: 1148 | safe-buffer "~5.1.1" 1149 | 1150 | copy-descriptor@^0.1.0: 1151 | version "0.1.1" 1152 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 1153 | 1154 | core-js@^2.4.0, core-js@^2.5.0: 1155 | version "2.6.5" 1156 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" 1157 | 1158 | core-util-is@~1.0.0: 1159 | version "1.0.2" 1160 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 1161 | 1162 | cross-spawn@^6.0.5: 1163 | version "6.0.5" 1164 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 1165 | dependencies: 1166 | nice-try "^1.0.4" 1167 | path-key "^2.0.1" 1168 | semver "^5.5.0" 1169 | shebang-command "^1.2.0" 1170 | which "^1.2.9" 1171 | 1172 | debug@2.6.8: 1173 | version "2.6.8" 1174 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 1175 | dependencies: 1176 | ms "2.0.0" 1177 | 1178 | debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: 1179 | version "2.6.9" 1180 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 1181 | dependencies: 1182 | ms "2.0.0" 1183 | 1184 | debug@^4.0.1, debug@^4.1.0: 1185 | version "4.1.1" 1186 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 1187 | dependencies: 1188 | ms "^2.1.1" 1189 | 1190 | decode-uri-component@^0.2.0: 1191 | version "0.2.0" 1192 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 1193 | 1194 | deep-extend@^0.6.0: 1195 | version "0.6.0" 1196 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 1197 | 1198 | deep-is@~0.1.3: 1199 | version "0.1.3" 1200 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 1201 | 1202 | define-properties@^1.1.2, define-properties@^1.1.3: 1203 | version "1.1.3" 1204 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 1205 | dependencies: 1206 | object-keys "^1.0.12" 1207 | 1208 | define-property@^0.2.5: 1209 | version "0.2.5" 1210 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 1211 | dependencies: 1212 | is-descriptor "^0.1.0" 1213 | 1214 | define-property@^1.0.0: 1215 | version "1.0.0" 1216 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 1217 | dependencies: 1218 | is-descriptor "^1.0.0" 1219 | 1220 | define-property@^2.0.2: 1221 | version "2.0.2" 1222 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" 1223 | dependencies: 1224 | is-descriptor "^1.0.2" 1225 | isobject "^3.0.1" 1226 | 1227 | delegates@^1.0.0: 1228 | version "1.0.0" 1229 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 1230 | 1231 | detect-indent@^4.0.0: 1232 | version "4.0.0" 1233 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 1234 | dependencies: 1235 | repeating "^2.0.0" 1236 | 1237 | detect-libc@^1.0.2: 1238 | version "1.0.3" 1239 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 1240 | 1241 | diff@3.2.0: 1242 | version "3.2.0" 1243 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 1244 | 1245 | doctrine@1.5.0: 1246 | version "1.5.0" 1247 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 1248 | dependencies: 1249 | esutils "^2.0.2" 1250 | isarray "^1.0.0" 1251 | 1252 | doctrine@^3.0.0: 1253 | version "3.0.0" 1254 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 1255 | dependencies: 1256 | esutils "^2.0.2" 1257 | 1258 | emoji-regex@^7.0.1: 1259 | version "7.0.3" 1260 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 1261 | 1262 | emojis-list@^2.0.0: 1263 | version "2.1.0" 1264 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 1265 | 1266 | error-ex@^1.2.0: 1267 | version "1.3.2" 1268 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1269 | dependencies: 1270 | is-arrayish "^0.2.1" 1271 | 1272 | es-abstract@^1.12.0, es-abstract@^1.7.0: 1273 | version "1.13.0" 1274 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" 1275 | dependencies: 1276 | es-to-primitive "^1.2.0" 1277 | function-bind "^1.1.1" 1278 | has "^1.0.3" 1279 | is-callable "^1.1.4" 1280 | is-regex "^1.0.4" 1281 | object-keys "^1.0.12" 1282 | 1283 | es-to-primitive@^1.2.0: 1284 | version "1.2.0" 1285 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" 1286 | dependencies: 1287 | is-callable "^1.1.4" 1288 | is-date-object "^1.0.1" 1289 | is-symbol "^1.0.2" 1290 | 1291 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1292 | version "1.0.5" 1293 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1294 | 1295 | eslint-config-airbnb-base@^13.1.0: 1296 | version "13.1.0" 1297 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz#b5a1b480b80dfad16433d6c4ad84e6605052c05c" 1298 | dependencies: 1299 | eslint-restricted-globals "^0.1.1" 1300 | object.assign "^4.1.0" 1301 | object.entries "^1.0.4" 1302 | 1303 | eslint-import-resolver-node@^0.3.2: 1304 | version "0.3.2" 1305 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" 1306 | dependencies: 1307 | debug "^2.6.9" 1308 | resolve "^1.5.0" 1309 | 1310 | eslint-module-utils@^2.4.0: 1311 | version "2.4.0" 1312 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz#8b93499e9b00eab80ccb6614e69f03678e84e09a" 1313 | dependencies: 1314 | debug "^2.6.8" 1315 | pkg-dir "^2.0.0" 1316 | 1317 | eslint-plugin-import@^2.17.2: 1318 | version "2.17.2" 1319 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.17.2.tgz#d227d5c6dc67eca71eb590d2bb62fb38d86e9fcb" 1320 | dependencies: 1321 | array-includes "^3.0.3" 1322 | contains-path "^0.1.0" 1323 | debug "^2.6.9" 1324 | doctrine "1.5.0" 1325 | eslint-import-resolver-node "^0.3.2" 1326 | eslint-module-utils "^2.4.0" 1327 | has "^1.0.3" 1328 | lodash "^4.17.11" 1329 | minimatch "^3.0.4" 1330 | read-pkg-up "^2.0.0" 1331 | resolve "^1.10.0" 1332 | 1333 | eslint-restricted-globals@^0.1.1: 1334 | version "0.1.1" 1335 | resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" 1336 | 1337 | eslint-scope@3.7.1: 1338 | version "3.7.1" 1339 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" 1340 | dependencies: 1341 | esrecurse "^4.1.0" 1342 | estraverse "^4.1.1" 1343 | 1344 | eslint-scope@^4.0.3: 1345 | version "4.0.3" 1346 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" 1347 | dependencies: 1348 | esrecurse "^4.1.0" 1349 | estraverse "^4.1.1" 1350 | 1351 | eslint-utils@^1.3.1: 1352 | version "1.3.1" 1353 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" 1354 | 1355 | eslint-visitor-keys@^1.0.0: 1356 | version "1.0.0" 1357 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" 1358 | 1359 | eslint@^5.16.0: 1360 | version "5.16.0" 1361 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" 1362 | dependencies: 1363 | "@babel/code-frame" "^7.0.0" 1364 | ajv "^6.9.1" 1365 | chalk "^2.1.0" 1366 | cross-spawn "^6.0.5" 1367 | debug "^4.0.1" 1368 | doctrine "^3.0.0" 1369 | eslint-scope "^4.0.3" 1370 | eslint-utils "^1.3.1" 1371 | eslint-visitor-keys "^1.0.0" 1372 | espree "^5.0.1" 1373 | esquery "^1.0.1" 1374 | esutils "^2.0.2" 1375 | file-entry-cache "^5.0.1" 1376 | functional-red-black-tree "^1.0.1" 1377 | glob "^7.1.2" 1378 | globals "^11.7.0" 1379 | ignore "^4.0.6" 1380 | import-fresh "^3.0.0" 1381 | imurmurhash "^0.1.4" 1382 | inquirer "^6.2.2" 1383 | js-yaml "^3.13.0" 1384 | json-stable-stringify-without-jsonify "^1.0.1" 1385 | levn "^0.3.0" 1386 | lodash "^4.17.11" 1387 | minimatch "^3.0.4" 1388 | mkdirp "^0.5.1" 1389 | natural-compare "^1.4.0" 1390 | optionator "^0.8.2" 1391 | path-is-inside "^1.0.2" 1392 | progress "^2.0.0" 1393 | regexpp "^2.0.1" 1394 | semver "^5.5.1" 1395 | strip-ansi "^4.0.0" 1396 | strip-json-comments "^2.0.1" 1397 | table "^5.2.3" 1398 | text-table "^0.2.0" 1399 | 1400 | espree@^5.0.1: 1401 | version "5.0.1" 1402 | resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" 1403 | dependencies: 1404 | acorn "^6.0.7" 1405 | acorn-jsx "^5.0.0" 1406 | eslint-visitor-keys "^1.0.0" 1407 | 1408 | esprima@^4.0.0: 1409 | version "4.0.1" 1410 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1411 | 1412 | esquery@^1.0.1: 1413 | version "1.0.1" 1414 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 1415 | dependencies: 1416 | estraverse "^4.0.0" 1417 | 1418 | esrecurse@^4.1.0: 1419 | version "4.2.1" 1420 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 1421 | dependencies: 1422 | estraverse "^4.1.0" 1423 | 1424 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 1425 | version "4.2.0" 1426 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 1427 | 1428 | estree-walker@^0.2.1: 1429 | version "0.2.1" 1430 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" 1431 | 1432 | estree-walker@^0.5.0: 1433 | version "0.5.2" 1434 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" 1435 | 1436 | estree-walker@^0.6.0: 1437 | version "0.6.0" 1438 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.0.tgz#5d865327c44a618dde5699f763891ae31f257dae" 1439 | 1440 | esutils@^2.0.2: 1441 | version "2.0.2" 1442 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1443 | 1444 | expand-brackets@^0.1.4: 1445 | version "0.1.5" 1446 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 1447 | dependencies: 1448 | is-posix-bracket "^0.1.0" 1449 | 1450 | expand-brackets@^2.1.4: 1451 | version "2.1.4" 1452 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 1453 | dependencies: 1454 | debug "^2.3.3" 1455 | define-property "^0.2.5" 1456 | extend-shallow "^2.0.1" 1457 | posix-character-classes "^0.1.0" 1458 | regex-not "^1.0.0" 1459 | snapdragon "^0.8.1" 1460 | to-regex "^3.0.1" 1461 | 1462 | expand-range@^1.8.1: 1463 | version "1.8.2" 1464 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 1465 | dependencies: 1466 | fill-range "^2.1.0" 1467 | 1468 | extend-shallow@^2.0.1: 1469 | version "2.0.1" 1470 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 1471 | dependencies: 1472 | is-extendable "^0.1.0" 1473 | 1474 | extend-shallow@^3.0.0, extend-shallow@^3.0.2: 1475 | version "3.0.2" 1476 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" 1477 | dependencies: 1478 | assign-symbols "^1.0.0" 1479 | is-extendable "^1.0.1" 1480 | 1481 | external-editor@^3.0.3: 1482 | version "3.0.3" 1483 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" 1484 | dependencies: 1485 | chardet "^0.7.0" 1486 | iconv-lite "^0.4.24" 1487 | tmp "^0.0.33" 1488 | 1489 | extglob@^0.3.1: 1490 | version "0.3.2" 1491 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 1492 | dependencies: 1493 | is-extglob "^1.0.0" 1494 | 1495 | extglob@^2.0.4: 1496 | version "2.0.4" 1497 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" 1498 | dependencies: 1499 | array-unique "^0.3.2" 1500 | define-property "^1.0.0" 1501 | expand-brackets "^2.1.4" 1502 | extend-shallow "^2.0.1" 1503 | fragment-cache "^0.2.1" 1504 | regex-not "^1.0.0" 1505 | snapdragon "^0.8.1" 1506 | to-regex "^3.0.1" 1507 | 1508 | fast-deep-equal@^2.0.1: 1509 | version "2.0.1" 1510 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 1511 | 1512 | fast-json-stable-stringify@^2.0.0: 1513 | version "2.0.0" 1514 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 1515 | 1516 | fast-levenshtein@~2.0.4: 1517 | version "2.0.6" 1518 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1519 | 1520 | figures@^2.0.0: 1521 | version "2.0.0" 1522 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 1523 | dependencies: 1524 | escape-string-regexp "^1.0.5" 1525 | 1526 | file-entry-cache@^5.0.1: 1527 | version "5.0.1" 1528 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 1529 | dependencies: 1530 | flat-cache "^2.0.1" 1531 | 1532 | filename-regex@^2.0.0: 1533 | version "2.0.1" 1534 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 1535 | 1536 | fill-range@^2.1.0: 1537 | version "2.2.4" 1538 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" 1539 | dependencies: 1540 | is-number "^2.1.0" 1541 | isobject "^2.0.0" 1542 | randomatic "^3.0.0" 1543 | repeat-element "^1.1.2" 1544 | repeat-string "^1.5.2" 1545 | 1546 | fill-range@^4.0.0: 1547 | version "4.0.0" 1548 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 1549 | dependencies: 1550 | extend-shallow "^2.0.1" 1551 | is-number "^3.0.0" 1552 | repeat-string "^1.6.1" 1553 | to-regex-range "^2.1.0" 1554 | 1555 | find-cache-dir@^1.0.0: 1556 | version "1.0.0" 1557 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" 1558 | dependencies: 1559 | commondir "^1.0.1" 1560 | make-dir "^1.0.0" 1561 | pkg-dir "^2.0.0" 1562 | 1563 | find-up@^2.0.0, find-up@^2.1.0: 1564 | version "2.1.0" 1565 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1566 | dependencies: 1567 | locate-path "^2.0.0" 1568 | 1569 | flat-cache@^2.0.1: 1570 | version "2.0.1" 1571 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 1572 | dependencies: 1573 | flatted "^2.0.0" 1574 | rimraf "2.6.3" 1575 | write "1.0.3" 1576 | 1577 | flatted@^2.0.0: 1578 | version "2.0.0" 1579 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" 1580 | 1581 | flow-bin@^0.47.0: 1582 | version "0.47.0" 1583 | resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.47.0.tgz#a2a08ab3e0d1f1cb57d17e27b30b118b62fda367" 1584 | 1585 | flow-remove-types@^1.1.0: 1586 | version "1.2.3" 1587 | resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" 1588 | dependencies: 1589 | babylon "^6.15.0" 1590 | vlq "^0.2.1" 1591 | 1592 | for-in@^1.0.1, for-in@^1.0.2: 1593 | version "1.0.2" 1594 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1595 | 1596 | for-own@^0.1.4: 1597 | version "0.1.5" 1598 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 1599 | dependencies: 1600 | for-in "^1.0.1" 1601 | 1602 | fragment-cache@^0.2.1: 1603 | version "0.2.1" 1604 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 1605 | dependencies: 1606 | map-cache "^0.2.2" 1607 | 1608 | fs-minipass@^1.2.5: 1609 | version "1.2.5" 1610 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 1611 | dependencies: 1612 | minipass "^2.2.1" 1613 | 1614 | fs-readdir-recursive@^1.0.0: 1615 | version "1.1.0" 1616 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" 1617 | 1618 | fs.realpath@^1.0.0: 1619 | version "1.0.0" 1620 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1621 | 1622 | fsevents@^1.0.0: 1623 | version "1.2.9" 1624 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" 1625 | dependencies: 1626 | nan "^2.12.1" 1627 | node-pre-gyp "^0.12.0" 1628 | 1629 | function-bind@^1.1.1: 1630 | version "1.1.1" 1631 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1632 | 1633 | functional-red-black-tree@^1.0.1: 1634 | version "1.0.1" 1635 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1636 | 1637 | gauge@~2.7.3: 1638 | version "2.7.4" 1639 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 1640 | dependencies: 1641 | aproba "^1.0.3" 1642 | console-control-strings "^1.0.0" 1643 | has-unicode "^2.0.0" 1644 | object-assign "^4.1.0" 1645 | signal-exit "^3.0.0" 1646 | string-width "^1.0.1" 1647 | strip-ansi "^3.0.1" 1648 | wide-align "^1.1.0" 1649 | 1650 | get-value@^2.0.3, get-value@^2.0.6: 1651 | version "2.0.6" 1652 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 1653 | 1654 | glob-base@^0.3.0: 1655 | version "0.3.0" 1656 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1657 | dependencies: 1658 | glob-parent "^2.0.0" 1659 | is-glob "^2.0.0" 1660 | 1661 | glob-parent@^2.0.0: 1662 | version "2.0.0" 1663 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1664 | dependencies: 1665 | is-glob "^2.0.0" 1666 | 1667 | glob@7.1.1: 1668 | version "7.1.1" 1669 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 1670 | dependencies: 1671 | fs.realpath "^1.0.0" 1672 | inflight "^1.0.4" 1673 | inherits "2" 1674 | minimatch "^3.0.2" 1675 | once "^1.3.0" 1676 | path-is-absolute "^1.0.0" 1677 | 1678 | glob@^7.1.2, glob@^7.1.3: 1679 | version "7.1.3" 1680 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1681 | dependencies: 1682 | fs.realpath "^1.0.0" 1683 | inflight "^1.0.4" 1684 | inherits "2" 1685 | minimatch "^3.0.4" 1686 | once "^1.3.0" 1687 | path-is-absolute "^1.0.0" 1688 | 1689 | globals@^11.1.0, globals@^11.7.0: 1690 | version "11.12.0" 1691 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1692 | 1693 | globals@^9.18.0: 1694 | version "9.18.0" 1695 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 1696 | 1697 | graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: 1698 | version "4.1.15" 1699 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" 1700 | 1701 | "graceful-readlink@>= 1.0.0": 1702 | version "1.0.1" 1703 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 1704 | 1705 | growl@1.9.2: 1706 | version "1.9.2" 1707 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 1708 | 1709 | has-ansi@^2.0.0: 1710 | version "2.0.0" 1711 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1712 | dependencies: 1713 | ansi-regex "^2.0.0" 1714 | 1715 | has-flag@^1.0.0: 1716 | version "1.0.0" 1717 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1718 | 1719 | has-flag@^3.0.0: 1720 | version "3.0.0" 1721 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1722 | 1723 | has-symbols@^1.0.0: 1724 | version "1.0.0" 1725 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" 1726 | 1727 | has-unicode@^2.0.0: 1728 | version "2.0.1" 1729 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1730 | 1731 | has-value@^0.3.1: 1732 | version "0.3.1" 1733 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1734 | dependencies: 1735 | get-value "^2.0.3" 1736 | has-values "^0.1.4" 1737 | isobject "^2.0.0" 1738 | 1739 | has-value@^1.0.0: 1740 | version "1.0.0" 1741 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1742 | dependencies: 1743 | get-value "^2.0.6" 1744 | has-values "^1.0.0" 1745 | isobject "^3.0.0" 1746 | 1747 | has-values@^0.1.4: 1748 | version "0.1.4" 1749 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1750 | 1751 | has-values@^1.0.0: 1752 | version "1.0.0" 1753 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1754 | dependencies: 1755 | is-number "^3.0.0" 1756 | kind-of "^4.0.0" 1757 | 1758 | has@^1.0.1, has@^1.0.3: 1759 | version "1.0.3" 1760 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1761 | dependencies: 1762 | function-bind "^1.1.1" 1763 | 1764 | he@1.1.1: 1765 | version "1.1.1" 1766 | resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" 1767 | 1768 | home-or-tmp@^2.0.0: 1769 | version "2.0.0" 1770 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1771 | dependencies: 1772 | os-homedir "^1.0.0" 1773 | os-tmpdir "^1.0.1" 1774 | 1775 | hosted-git-info@^2.1.4: 1776 | version "2.7.1" 1777 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" 1778 | 1779 | iconv-lite@^0.4.24, iconv-lite@^0.4.4: 1780 | version "0.4.24" 1781 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1782 | dependencies: 1783 | safer-buffer ">= 2.1.2 < 3" 1784 | 1785 | ignore-walk@^3.0.1: 1786 | version "3.0.1" 1787 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 1788 | dependencies: 1789 | minimatch "^3.0.4" 1790 | 1791 | ignore@^4.0.6: 1792 | version "4.0.6" 1793 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1794 | 1795 | import-fresh@^3.0.0: 1796 | version "3.0.0" 1797 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" 1798 | dependencies: 1799 | parent-module "^1.0.0" 1800 | resolve-from "^4.0.0" 1801 | 1802 | imurmurhash@^0.1.4: 1803 | version "0.1.4" 1804 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1805 | 1806 | inflight@^1.0.4: 1807 | version "1.0.6" 1808 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1809 | dependencies: 1810 | once "^1.3.0" 1811 | wrappy "1" 1812 | 1813 | inherits@2, inherits@^2.0.1, inherits@~2.0.3: 1814 | version "2.0.3" 1815 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1816 | 1817 | ini@~1.3.0: 1818 | version "1.3.5" 1819 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1820 | 1821 | inquirer@^6.2.2: 1822 | version "6.3.1" 1823 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7" 1824 | dependencies: 1825 | ansi-escapes "^3.2.0" 1826 | chalk "^2.4.2" 1827 | cli-cursor "^2.1.0" 1828 | cli-width "^2.0.0" 1829 | external-editor "^3.0.3" 1830 | figures "^2.0.0" 1831 | lodash "^4.17.11" 1832 | mute-stream "0.0.7" 1833 | run-async "^2.2.0" 1834 | rxjs "^6.4.0" 1835 | string-width "^2.1.0" 1836 | strip-ansi "^5.1.0" 1837 | through "^2.3.6" 1838 | 1839 | invariant@^2.2.2: 1840 | version "2.2.4" 1841 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1842 | dependencies: 1843 | loose-envify "^1.0.0" 1844 | 1845 | is-accessor-descriptor@^0.1.6: 1846 | version "0.1.6" 1847 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1848 | dependencies: 1849 | kind-of "^3.0.2" 1850 | 1851 | is-accessor-descriptor@^1.0.0: 1852 | version "1.0.0" 1853 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" 1854 | dependencies: 1855 | kind-of "^6.0.0" 1856 | 1857 | is-arrayish@^0.2.1: 1858 | version "0.2.1" 1859 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1860 | 1861 | is-binary-path@^1.0.0: 1862 | version "1.0.1" 1863 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1864 | dependencies: 1865 | binary-extensions "^1.0.0" 1866 | 1867 | is-buffer@^1.1.5: 1868 | version "1.1.6" 1869 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1870 | 1871 | is-callable@^1.1.4: 1872 | version "1.1.4" 1873 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1874 | 1875 | is-data-descriptor@^0.1.4: 1876 | version "0.1.4" 1877 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1878 | dependencies: 1879 | kind-of "^3.0.2" 1880 | 1881 | is-data-descriptor@^1.0.0: 1882 | version "1.0.0" 1883 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" 1884 | dependencies: 1885 | kind-of "^6.0.0" 1886 | 1887 | is-date-object@^1.0.1: 1888 | version "1.0.1" 1889 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1890 | 1891 | is-descriptor@^0.1.0: 1892 | version "0.1.6" 1893 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1894 | dependencies: 1895 | is-accessor-descriptor "^0.1.6" 1896 | is-data-descriptor "^0.1.4" 1897 | kind-of "^5.0.0" 1898 | 1899 | is-descriptor@^1.0.0, is-descriptor@^1.0.2: 1900 | version "1.0.2" 1901 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" 1902 | dependencies: 1903 | is-accessor-descriptor "^1.0.0" 1904 | is-data-descriptor "^1.0.0" 1905 | kind-of "^6.0.2" 1906 | 1907 | is-dotfile@^1.0.0: 1908 | version "1.0.3" 1909 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 1910 | 1911 | is-equal-shallow@^0.1.3: 1912 | version "0.1.3" 1913 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1914 | dependencies: 1915 | is-primitive "^2.0.0" 1916 | 1917 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1918 | version "0.1.1" 1919 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1920 | 1921 | is-extendable@^1.0.1: 1922 | version "1.0.1" 1923 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" 1924 | dependencies: 1925 | is-plain-object "^2.0.4" 1926 | 1927 | is-extglob@^1.0.0: 1928 | version "1.0.0" 1929 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1930 | 1931 | is-finite@^1.0.0: 1932 | version "1.0.2" 1933 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1934 | dependencies: 1935 | number-is-nan "^1.0.0" 1936 | 1937 | is-fullwidth-code-point@^1.0.0: 1938 | version "1.0.0" 1939 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1940 | dependencies: 1941 | number-is-nan "^1.0.0" 1942 | 1943 | is-fullwidth-code-point@^2.0.0: 1944 | version "2.0.0" 1945 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1946 | 1947 | is-glob@^2.0.0, is-glob@^2.0.1: 1948 | version "2.0.1" 1949 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1950 | dependencies: 1951 | is-extglob "^1.0.0" 1952 | 1953 | is-module@^1.0.0: 1954 | version "1.0.0" 1955 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 1956 | 1957 | is-number@^2.1.0: 1958 | version "2.1.0" 1959 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1960 | dependencies: 1961 | kind-of "^3.0.2" 1962 | 1963 | is-number@^3.0.0: 1964 | version "3.0.0" 1965 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1966 | dependencies: 1967 | kind-of "^3.0.2" 1968 | 1969 | is-number@^4.0.0: 1970 | version "4.0.0" 1971 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" 1972 | 1973 | is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: 1974 | version "2.0.4" 1975 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1976 | dependencies: 1977 | isobject "^3.0.1" 1978 | 1979 | is-posix-bracket@^0.1.0: 1980 | version "0.1.1" 1981 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1982 | 1983 | is-primitive@^2.0.0: 1984 | version "2.0.0" 1985 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1986 | 1987 | is-promise@^2.1.0: 1988 | version "2.1.0" 1989 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1990 | 1991 | is-regex@^1.0.4: 1992 | version "1.0.4" 1993 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 1994 | dependencies: 1995 | has "^1.0.1" 1996 | 1997 | is-symbol@^1.0.2: 1998 | version "1.0.2" 1999 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" 2000 | dependencies: 2001 | has-symbols "^1.0.0" 2002 | 2003 | is-windows@^1.0.2: 2004 | version "1.0.2" 2005 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" 2006 | 2007 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 2008 | version "1.0.0" 2009 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 2010 | 2011 | isexe@^2.0.0: 2012 | version "2.0.0" 2013 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 2014 | 2015 | isobject@^2.0.0: 2016 | version "2.1.0" 2017 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 2018 | dependencies: 2019 | isarray "1.0.0" 2020 | 2021 | isobject@^3.0.0, isobject@^3.0.1: 2022 | version "3.0.1" 2023 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 2024 | 2025 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 2026 | version "4.0.0" 2027 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 2028 | 2029 | js-tokens@^3.0.2: 2030 | version "3.0.2" 2031 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 2032 | 2033 | js-yaml@^3.13.0: 2034 | version "3.13.1" 2035 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 2036 | dependencies: 2037 | argparse "^1.0.7" 2038 | esprima "^4.0.0" 2039 | 2040 | jsesc@^1.3.0: 2041 | version "1.3.0" 2042 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 2043 | 2044 | jsesc@^2.5.1: 2045 | version "2.5.2" 2046 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 2047 | 2048 | jsesc@~0.5.0: 2049 | version "0.5.0" 2050 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 2051 | 2052 | json-schema-traverse@^0.4.1: 2053 | version "0.4.1" 2054 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 2055 | 2056 | json-stable-stringify-without-jsonify@^1.0.1: 2057 | version "1.0.1" 2058 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 2059 | 2060 | json3@3.3.2: 2061 | version "3.3.2" 2062 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 2063 | 2064 | json5@^0.5.1: 2065 | version "0.5.1" 2066 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 2067 | 2068 | json5@^1.0.1: 2069 | version "1.0.1" 2070 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 2071 | dependencies: 2072 | minimist "^1.2.0" 2073 | 2074 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 2075 | version "3.2.2" 2076 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 2077 | dependencies: 2078 | is-buffer "^1.1.5" 2079 | 2080 | kind-of@^4.0.0: 2081 | version "4.0.0" 2082 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 2083 | dependencies: 2084 | is-buffer "^1.1.5" 2085 | 2086 | kind-of@^5.0.0: 2087 | version "5.1.0" 2088 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 2089 | 2090 | kind-of@^6.0.0, kind-of@^6.0.2: 2091 | version "6.0.2" 2092 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 2093 | 2094 | levn@^0.3.0, levn@~0.3.0: 2095 | version "0.3.0" 2096 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 2097 | dependencies: 2098 | prelude-ls "~1.1.2" 2099 | type-check "~0.3.2" 2100 | 2101 | load-json-file@^2.0.0: 2102 | version "2.0.0" 2103 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 2104 | dependencies: 2105 | graceful-fs "^4.1.2" 2106 | parse-json "^2.2.0" 2107 | pify "^2.0.0" 2108 | strip-bom "^3.0.0" 2109 | 2110 | loader-utils@^1.0.2: 2111 | version "1.2.3" 2112 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" 2113 | dependencies: 2114 | big.js "^5.2.2" 2115 | emojis-list "^2.0.0" 2116 | json5 "^1.0.1" 2117 | 2118 | locate-path@^2.0.0: 2119 | version "2.0.0" 2120 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 2121 | dependencies: 2122 | p-locate "^2.0.0" 2123 | path-exists "^3.0.0" 2124 | 2125 | lodash._baseassign@^3.0.0: 2126 | version "3.2.0" 2127 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 2128 | dependencies: 2129 | lodash._basecopy "^3.0.0" 2130 | lodash.keys "^3.0.0" 2131 | 2132 | lodash._basecopy@^3.0.0: 2133 | version "3.0.1" 2134 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 2135 | 2136 | lodash._basecreate@^3.0.0: 2137 | version "3.0.3" 2138 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 2139 | 2140 | lodash._getnative@^3.0.0: 2141 | version "3.9.1" 2142 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 2143 | 2144 | lodash._isiterateecall@^3.0.0: 2145 | version "3.0.9" 2146 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 2147 | 2148 | lodash.create@3.1.1: 2149 | version "3.1.1" 2150 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 2151 | dependencies: 2152 | lodash._baseassign "^3.0.0" 2153 | lodash._basecreate "^3.0.0" 2154 | lodash._isiterateecall "^3.0.0" 2155 | 2156 | lodash.isarguments@^3.0.0: 2157 | version "3.1.0" 2158 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 2159 | 2160 | lodash.isarray@^3.0.0: 2161 | version "3.0.4" 2162 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 2163 | 2164 | lodash.keys@^3.0.0: 2165 | version "3.1.2" 2166 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 2167 | dependencies: 2168 | lodash._getnative "^3.0.0" 2169 | lodash.isarguments "^3.0.0" 2170 | lodash.isarray "^3.0.0" 2171 | 2172 | lodash@^4.17.11, lodash@^4.17.4: 2173 | version "4.17.11" 2174 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" 2175 | 2176 | loose-envify@^1.0.0: 2177 | version "1.4.0" 2178 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 2179 | dependencies: 2180 | js-tokens "^3.0.0 || ^4.0.0" 2181 | 2182 | magic-string@^0.22.4: 2183 | version "0.22.5" 2184 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" 2185 | dependencies: 2186 | vlq "^0.2.2" 2187 | 2188 | make-dir@^1.0.0: 2189 | version "1.3.0" 2190 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 2191 | dependencies: 2192 | pify "^3.0.0" 2193 | 2194 | map-cache@^0.2.2: 2195 | version "0.2.2" 2196 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 2197 | 2198 | map-visit@^1.0.0: 2199 | version "1.0.0" 2200 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 2201 | dependencies: 2202 | object-visit "^1.0.0" 2203 | 2204 | math-random@^1.0.1: 2205 | version "1.0.4" 2206 | resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" 2207 | 2208 | micromatch@^2.1.5: 2209 | version "2.3.11" 2210 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 2211 | dependencies: 2212 | arr-diff "^2.0.0" 2213 | array-unique "^0.2.1" 2214 | braces "^1.8.2" 2215 | expand-brackets "^0.1.4" 2216 | extglob "^0.3.1" 2217 | filename-regex "^2.0.0" 2218 | is-extglob "^1.0.0" 2219 | is-glob "^2.0.1" 2220 | kind-of "^3.0.2" 2221 | normalize-path "^2.0.1" 2222 | object.omit "^2.0.0" 2223 | parse-glob "^3.0.4" 2224 | regex-cache "^0.4.2" 2225 | 2226 | micromatch@^3.1.10: 2227 | version "3.1.10" 2228 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" 2229 | dependencies: 2230 | arr-diff "^4.0.0" 2231 | array-unique "^0.3.2" 2232 | braces "^2.3.1" 2233 | define-property "^2.0.2" 2234 | extend-shallow "^3.0.2" 2235 | extglob "^2.0.4" 2236 | fragment-cache "^0.2.1" 2237 | kind-of "^6.0.2" 2238 | nanomatch "^1.2.9" 2239 | object.pick "^1.3.0" 2240 | regex-not "^1.0.0" 2241 | snapdragon "^0.8.1" 2242 | to-regex "^3.0.2" 2243 | 2244 | mimic-fn@^1.0.0: 2245 | version "1.2.0" 2246 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 2247 | 2248 | minimatch@^3.0.2, minimatch@^3.0.4: 2249 | version "3.0.4" 2250 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 2251 | dependencies: 2252 | brace-expansion "^1.1.7" 2253 | 2254 | minimist@0.0.8: 2255 | version "0.0.8" 2256 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2257 | 2258 | minimist@^1.2.0: 2259 | version "1.2.0" 2260 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 2261 | 2262 | minipass@^2.2.1, minipass@^2.3.4: 2263 | version "2.3.5" 2264 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" 2265 | dependencies: 2266 | safe-buffer "^5.1.2" 2267 | yallist "^3.0.0" 2268 | 2269 | minizlib@^1.1.1: 2270 | version "1.2.1" 2271 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" 2272 | dependencies: 2273 | minipass "^2.2.1" 2274 | 2275 | mixin-deep@^1.2.0: 2276 | version "1.3.1" 2277 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" 2278 | dependencies: 2279 | for-in "^1.0.2" 2280 | is-extendable "^1.0.1" 2281 | 2282 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: 2283 | version "0.5.1" 2284 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2285 | dependencies: 2286 | minimist "0.0.8" 2287 | 2288 | mocha@^3.4.2: 2289 | version "3.5.3" 2290 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" 2291 | dependencies: 2292 | browser-stdout "1.3.0" 2293 | commander "2.9.0" 2294 | debug "2.6.8" 2295 | diff "3.2.0" 2296 | escape-string-regexp "1.0.5" 2297 | glob "7.1.1" 2298 | growl "1.9.2" 2299 | he "1.1.1" 2300 | json3 "3.3.2" 2301 | lodash.create "3.1.1" 2302 | mkdirp "0.5.1" 2303 | supports-color "3.1.2" 2304 | 2305 | ms@2.0.0: 2306 | version "2.0.0" 2307 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 2308 | 2309 | ms@^2.1.1: 2310 | version "2.1.1" 2311 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 2312 | 2313 | mute-stream@0.0.7: 2314 | version "0.0.7" 2315 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 2316 | 2317 | nan@^2.12.1: 2318 | version "2.13.2" 2319 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" 2320 | 2321 | nanomatch@^1.2.9: 2322 | version "1.2.13" 2323 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" 2324 | dependencies: 2325 | arr-diff "^4.0.0" 2326 | array-unique "^0.3.2" 2327 | define-property "^2.0.2" 2328 | extend-shallow "^3.0.2" 2329 | fragment-cache "^0.2.1" 2330 | is-windows "^1.0.2" 2331 | kind-of "^6.0.2" 2332 | object.pick "^1.3.0" 2333 | regex-not "^1.0.0" 2334 | snapdragon "^0.8.1" 2335 | to-regex "^3.0.1" 2336 | 2337 | natural-compare@^1.4.0: 2338 | version "1.4.0" 2339 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2340 | 2341 | needle@^2.2.1: 2342 | version "2.3.1" 2343 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.1.tgz#d272f2f4034afb9c4c9ab1379aabc17fc85c9388" 2344 | dependencies: 2345 | debug "^4.1.0" 2346 | iconv-lite "^0.4.4" 2347 | sax "^1.2.4" 2348 | 2349 | nice-try@^1.0.4: 2350 | version "1.0.5" 2351 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 2352 | 2353 | node-pre-gyp@^0.12.0: 2354 | version "0.12.0" 2355 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" 2356 | dependencies: 2357 | detect-libc "^1.0.2" 2358 | mkdirp "^0.5.1" 2359 | needle "^2.2.1" 2360 | nopt "^4.0.1" 2361 | npm-packlist "^1.1.6" 2362 | npmlog "^4.0.2" 2363 | rc "^1.2.7" 2364 | rimraf "^2.6.1" 2365 | semver "^5.3.0" 2366 | tar "^4" 2367 | 2368 | nopt@^4.0.1: 2369 | version "4.0.1" 2370 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 2371 | dependencies: 2372 | abbrev "1" 2373 | osenv "^0.1.4" 2374 | 2375 | normalize-package-data@^2.3.2: 2376 | version "2.5.0" 2377 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 2378 | dependencies: 2379 | hosted-git-info "^2.1.4" 2380 | resolve "^1.10.0" 2381 | semver "2 || 3 || 4 || 5" 2382 | validate-npm-package-license "^3.0.1" 2383 | 2384 | normalize-path@^2.0.0, normalize-path@^2.0.1: 2385 | version "2.1.1" 2386 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 2387 | dependencies: 2388 | remove-trailing-separator "^1.0.1" 2389 | 2390 | npm-bundled@^1.0.1: 2391 | version "1.0.6" 2392 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" 2393 | 2394 | npm-packlist@^1.1.6: 2395 | version "1.4.1" 2396 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" 2397 | dependencies: 2398 | ignore-walk "^3.0.1" 2399 | npm-bundled "^1.0.1" 2400 | 2401 | npmlog@^4.0.2: 2402 | version "4.1.2" 2403 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 2404 | dependencies: 2405 | are-we-there-yet "~1.1.2" 2406 | console-control-strings "~1.1.0" 2407 | gauge "~2.7.3" 2408 | set-blocking "~2.0.0" 2409 | 2410 | number-is-nan@^1.0.0: 2411 | version "1.0.1" 2412 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2413 | 2414 | object-assign@^4.1.0: 2415 | version "4.1.1" 2416 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2417 | 2418 | object-copy@^0.1.0: 2419 | version "0.1.0" 2420 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 2421 | dependencies: 2422 | copy-descriptor "^0.1.0" 2423 | define-property "^0.2.5" 2424 | kind-of "^3.0.3" 2425 | 2426 | object-keys@^1.0.11, object-keys@^1.0.12: 2427 | version "1.1.1" 2428 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2429 | 2430 | object-visit@^1.0.0: 2431 | version "1.0.1" 2432 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 2433 | dependencies: 2434 | isobject "^3.0.0" 2435 | 2436 | object.assign@^4.1.0: 2437 | version "4.1.0" 2438 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 2439 | dependencies: 2440 | define-properties "^1.1.2" 2441 | function-bind "^1.1.1" 2442 | has-symbols "^1.0.0" 2443 | object-keys "^1.0.11" 2444 | 2445 | object.entries@^1.0.4: 2446 | version "1.1.0" 2447 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" 2448 | dependencies: 2449 | define-properties "^1.1.3" 2450 | es-abstract "^1.12.0" 2451 | function-bind "^1.1.1" 2452 | has "^1.0.3" 2453 | 2454 | object.omit@^2.0.0: 2455 | version "2.0.1" 2456 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 2457 | dependencies: 2458 | for-own "^0.1.4" 2459 | is-extendable "^0.1.1" 2460 | 2461 | object.pick@^1.3.0: 2462 | version "1.3.0" 2463 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 2464 | dependencies: 2465 | isobject "^3.0.1" 2466 | 2467 | once@^1.3.0: 2468 | version "1.4.0" 2469 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2470 | dependencies: 2471 | wrappy "1" 2472 | 2473 | onetime@^2.0.0: 2474 | version "2.0.1" 2475 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 2476 | dependencies: 2477 | mimic-fn "^1.0.0" 2478 | 2479 | optionator@^0.8.2: 2480 | version "0.8.2" 2481 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 2482 | dependencies: 2483 | deep-is "~0.1.3" 2484 | fast-levenshtein "~2.0.4" 2485 | levn "~0.3.0" 2486 | prelude-ls "~1.1.2" 2487 | type-check "~0.3.2" 2488 | wordwrap "~1.0.0" 2489 | 2490 | os-homedir@^1.0.0: 2491 | version "1.0.2" 2492 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2493 | 2494 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: 2495 | version "1.0.2" 2496 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2497 | 2498 | osenv@^0.1.4: 2499 | version "0.1.5" 2500 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 2501 | dependencies: 2502 | os-homedir "^1.0.0" 2503 | os-tmpdir "^1.0.0" 2504 | 2505 | output-file-sync@^1.1.2: 2506 | version "1.1.2" 2507 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 2508 | dependencies: 2509 | graceful-fs "^4.1.4" 2510 | mkdirp "^0.5.1" 2511 | object-assign "^4.1.0" 2512 | 2513 | p-limit@^1.1.0: 2514 | version "1.3.0" 2515 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 2516 | dependencies: 2517 | p-try "^1.0.0" 2518 | 2519 | p-locate@^2.0.0: 2520 | version "2.0.0" 2521 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 2522 | dependencies: 2523 | p-limit "^1.1.0" 2524 | 2525 | p-try@^1.0.0: 2526 | version "1.0.0" 2527 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 2528 | 2529 | parent-module@^1.0.0: 2530 | version "1.0.1" 2531 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 2532 | dependencies: 2533 | callsites "^3.0.0" 2534 | 2535 | parse-glob@^3.0.4: 2536 | version "3.0.4" 2537 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 2538 | dependencies: 2539 | glob-base "^0.3.0" 2540 | is-dotfile "^1.0.0" 2541 | is-extglob "^1.0.0" 2542 | is-glob "^2.0.0" 2543 | 2544 | parse-json@^2.2.0: 2545 | version "2.2.0" 2546 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 2547 | dependencies: 2548 | error-ex "^1.2.0" 2549 | 2550 | pascalcase@^0.1.1: 2551 | version "0.1.1" 2552 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 2553 | 2554 | path-exists@^3.0.0: 2555 | version "3.0.0" 2556 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2557 | 2558 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 2559 | version "1.0.1" 2560 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2561 | 2562 | path-is-inside@^1.0.2: 2563 | version "1.0.2" 2564 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 2565 | 2566 | path-key@^2.0.1: 2567 | version "2.0.1" 2568 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2569 | 2570 | path-parse@^1.0.6: 2571 | version "1.0.6" 2572 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2573 | 2574 | path-type@^2.0.0: 2575 | version "2.0.0" 2576 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" 2577 | dependencies: 2578 | pify "^2.0.0" 2579 | 2580 | pify@^2.0.0: 2581 | version "2.3.0" 2582 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2583 | 2584 | pify@^3.0.0: 2585 | version "3.0.0" 2586 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2587 | 2588 | pkg-dir@^2.0.0: 2589 | version "2.0.0" 2590 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 2591 | dependencies: 2592 | find-up "^2.1.0" 2593 | 2594 | posix-character-classes@^0.1.0: 2595 | version "0.1.1" 2596 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 2597 | 2598 | prelude-ls@~1.1.2: 2599 | version "1.1.2" 2600 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2601 | 2602 | preserve@^0.2.0: 2603 | version "0.2.0" 2604 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 2605 | 2606 | private@^0.1.6, private@^0.1.8: 2607 | version "0.1.8" 2608 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 2609 | 2610 | process-nextick-args@~2.0.0: 2611 | version "2.0.0" 2612 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 2613 | 2614 | progress@^2.0.0: 2615 | version "2.0.3" 2616 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2617 | 2618 | punycode@^2.1.0: 2619 | version "2.1.1" 2620 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2621 | 2622 | ramda@0.x: 2623 | version "0.26.1" 2624 | resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" 2625 | 2626 | ramda@^0.28.0: 2627 | version "0.28.0" 2628 | resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.28.0.tgz#acd785690100337e8b063cab3470019be427cc97" 2629 | integrity sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA== 2630 | 2631 | randomatic@^3.0.0: 2632 | version "3.1.1" 2633 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" 2634 | dependencies: 2635 | is-number "^4.0.0" 2636 | kind-of "^6.0.0" 2637 | math-random "^1.0.1" 2638 | 2639 | rc@^1.2.7: 2640 | version "1.2.8" 2641 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 2642 | dependencies: 2643 | deep-extend "^0.6.0" 2644 | ini "~1.3.0" 2645 | minimist "^1.2.0" 2646 | strip-json-comments "~2.0.1" 2647 | 2648 | read-pkg-up@^2.0.0: 2649 | version "2.0.0" 2650 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" 2651 | dependencies: 2652 | find-up "^2.0.0" 2653 | read-pkg "^2.0.0" 2654 | 2655 | read-pkg@^2.0.0: 2656 | version "2.0.0" 2657 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" 2658 | dependencies: 2659 | load-json-file "^2.0.0" 2660 | normalize-package-data "^2.3.2" 2661 | path-type "^2.0.0" 2662 | 2663 | readable-stream@^2.0.2, readable-stream@^2.0.6: 2664 | version "2.3.6" 2665 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2666 | dependencies: 2667 | core-util-is "~1.0.0" 2668 | inherits "~2.0.3" 2669 | isarray "~1.0.0" 2670 | process-nextick-args "~2.0.0" 2671 | safe-buffer "~5.1.1" 2672 | string_decoder "~1.1.1" 2673 | util-deprecate "~1.0.1" 2674 | 2675 | readdirp@^2.0.0: 2676 | version "2.2.1" 2677 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" 2678 | dependencies: 2679 | graceful-fs "^4.1.11" 2680 | micromatch "^3.1.10" 2681 | readable-stream "^2.0.2" 2682 | 2683 | regenerate@^1.2.1: 2684 | version "1.4.0" 2685 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" 2686 | 2687 | regenerator-runtime@^0.10.5: 2688 | version "0.10.5" 2689 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 2690 | 2691 | regenerator-runtime@^0.11.0: 2692 | version "0.11.1" 2693 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 2694 | 2695 | regenerator-transform@^0.10.0: 2696 | version "0.10.1" 2697 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" 2698 | dependencies: 2699 | babel-runtime "^6.18.0" 2700 | babel-types "^6.19.0" 2701 | private "^0.1.6" 2702 | 2703 | regex-cache@^0.4.2: 2704 | version "0.4.4" 2705 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 2706 | dependencies: 2707 | is-equal-shallow "^0.1.3" 2708 | 2709 | regex-not@^1.0.0, regex-not@^1.0.2: 2710 | version "1.0.2" 2711 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" 2712 | dependencies: 2713 | extend-shallow "^3.0.2" 2714 | safe-regex "^1.1.0" 2715 | 2716 | regexpp@^2.0.1: 2717 | version "2.0.1" 2718 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 2719 | 2720 | regexpu-core@^2.0.0: 2721 | version "2.0.0" 2722 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 2723 | dependencies: 2724 | regenerate "^1.2.1" 2725 | regjsgen "^0.2.0" 2726 | regjsparser "^0.1.4" 2727 | 2728 | regjsgen@^0.2.0: 2729 | version "0.2.0" 2730 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 2731 | 2732 | regjsparser@^0.1.4: 2733 | version "0.1.5" 2734 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 2735 | dependencies: 2736 | jsesc "~0.5.0" 2737 | 2738 | remove-trailing-separator@^1.0.1: 2739 | version "1.1.0" 2740 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2741 | 2742 | repeat-element@^1.1.2: 2743 | version "1.1.3" 2744 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" 2745 | 2746 | repeat-string@^1.5.2, repeat-string@^1.6.1: 2747 | version "1.6.1" 2748 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2749 | 2750 | repeating@^2.0.0: 2751 | version "2.0.1" 2752 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2753 | dependencies: 2754 | is-finite "^1.0.0" 2755 | 2756 | resolve-from@^4.0.0: 2757 | version "4.0.0" 2758 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2759 | 2760 | resolve-url@^0.2.1: 2761 | version "0.2.1" 2762 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2763 | 2764 | resolve@^1.1.6, resolve@^1.10.0, resolve@^1.4.0, resolve@^1.5.0: 2765 | version "1.10.1" 2766 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" 2767 | dependencies: 2768 | path-parse "^1.0.6" 2769 | 2770 | restore-cursor@^2.0.0: 2771 | version "2.0.0" 2772 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 2773 | dependencies: 2774 | onetime "^2.0.0" 2775 | signal-exit "^3.0.2" 2776 | 2777 | ret@~0.1.10: 2778 | version "0.1.15" 2779 | resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" 2780 | 2781 | rimraf@2.6.3, rimraf@^2.6.1: 2782 | version "2.6.3" 2783 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 2784 | dependencies: 2785 | glob "^7.1.3" 2786 | 2787 | rollup-plugin-babel@^2.7.1: 2788 | version "2.7.1" 2789 | resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57" 2790 | dependencies: 2791 | babel-core "6" 2792 | babel-plugin-transform-es2015-classes "^6.9.0" 2793 | object-assign "^4.1.0" 2794 | rollup-pluginutils "^1.5.0" 2795 | 2796 | rollup-plugin-commonjs@^8.0.2: 2797 | version "8.4.1" 2798 | resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.4.1.tgz#5c9cea2b2c3de322f5fbccd147e07ed5e502d7a0" 2799 | dependencies: 2800 | acorn "^5.2.1" 2801 | estree-walker "^0.5.0" 2802 | magic-string "^0.22.4" 2803 | resolve "^1.4.0" 2804 | rollup-pluginutils "^2.0.1" 2805 | 2806 | rollup-plugin-flow@^1.1.1: 2807 | version "1.1.1" 2808 | resolved "https://registry.yarnpkg.com/rollup-plugin-flow/-/rollup-plugin-flow-1.1.1.tgz#6ce568f1dd559666b77ab76b4bae251407528db6" 2809 | dependencies: 2810 | flow-remove-types "^1.1.0" 2811 | rollup-pluginutils "^1.5.1" 2812 | 2813 | rollup-plugin-node-resolve@^3.0.0: 2814 | version "3.4.0" 2815 | resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" 2816 | dependencies: 2817 | builtin-modules "^2.0.0" 2818 | is-module "^1.0.0" 2819 | resolve "^1.1.6" 2820 | 2821 | rollup-plugin-replace@^1.1.1: 2822 | version "1.2.1" 2823 | resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-1.2.1.tgz#6307ee15f223aa1fd3207cd3c08052468f180daf" 2824 | dependencies: 2825 | magic-string "^0.22.4" 2826 | minimatch "^3.0.2" 2827 | rollup-pluginutils "^2.0.1" 2828 | 2829 | rollup-plugin-uglify@^2.0.1: 2830 | version "2.0.1" 2831 | resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz#67b37ad1efdafbd83af4c36b40c189ee4866c969" 2832 | dependencies: 2833 | uglify-js "^3.0.9" 2834 | 2835 | rollup-pluginutils@^1.5.0, rollup-pluginutils@^1.5.1: 2836 | version "1.5.2" 2837 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" 2838 | dependencies: 2839 | estree-walker "^0.2.1" 2840 | minimatch "^3.0.2" 2841 | 2842 | rollup-pluginutils@^2.0.1: 2843 | version "2.6.0" 2844 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.6.0.tgz#203706edd43dfafeaebc355d7351119402fc83ad" 2845 | dependencies: 2846 | estree-walker "^0.6.0" 2847 | micromatch "^3.1.10" 2848 | 2849 | rollup@^0.42.0: 2850 | version "0.42.0" 2851 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.42.0.tgz#56e791b3a2f3dd7190bbb80a375675f2fe0f9b23" 2852 | dependencies: 2853 | source-map-support "^0.4.0" 2854 | 2855 | run-async@^2.2.0: 2856 | version "2.3.0" 2857 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 2858 | dependencies: 2859 | is-promise "^2.1.0" 2860 | 2861 | rxjs@^6.4.0: 2862 | version "6.5.1" 2863 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.1.tgz#f7a005a9386361921b8524f38f54cbf80e5d08f4" 2864 | dependencies: 2865 | tslib "^1.9.0" 2866 | 2867 | safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2868 | version "5.1.2" 2869 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2870 | 2871 | safe-regex@^1.1.0: 2872 | version "1.1.0" 2873 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" 2874 | dependencies: 2875 | ret "~0.1.10" 2876 | 2877 | "safer-buffer@>= 2.1.2 < 3": 2878 | version "2.1.2" 2879 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2880 | 2881 | sax@^1.2.4: 2882 | version "1.2.4" 2883 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 2884 | 2885 | "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1: 2886 | version "5.7.0" 2887 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" 2888 | 2889 | set-blocking@~2.0.0: 2890 | version "2.0.0" 2891 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2892 | 2893 | set-value@^0.4.3: 2894 | version "0.4.3" 2895 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 2896 | dependencies: 2897 | extend-shallow "^2.0.1" 2898 | is-extendable "^0.1.1" 2899 | is-plain-object "^2.0.1" 2900 | to-object-path "^0.3.0" 2901 | 2902 | set-value@^2.0.0: 2903 | version "2.0.0" 2904 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 2905 | dependencies: 2906 | extend-shallow "^2.0.1" 2907 | is-extendable "^0.1.1" 2908 | is-plain-object "^2.0.3" 2909 | split-string "^3.0.1" 2910 | 2911 | shebang-command@^1.2.0: 2912 | version "1.2.0" 2913 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2914 | dependencies: 2915 | shebang-regex "^1.0.0" 2916 | 2917 | shebang-regex@^1.0.0: 2918 | version "1.0.0" 2919 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2920 | 2921 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2922 | version "3.0.2" 2923 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2924 | 2925 | slash@^1.0.0: 2926 | version "1.0.0" 2927 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 2928 | 2929 | slice-ansi@^2.1.0: 2930 | version "2.1.0" 2931 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 2932 | dependencies: 2933 | ansi-styles "^3.2.0" 2934 | astral-regex "^1.0.0" 2935 | is-fullwidth-code-point "^2.0.0" 2936 | 2937 | snapdragon-node@^2.0.1: 2938 | version "2.1.1" 2939 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2940 | dependencies: 2941 | define-property "^1.0.0" 2942 | isobject "^3.0.0" 2943 | snapdragon-util "^3.0.1" 2944 | 2945 | snapdragon-util@^3.0.1: 2946 | version "3.0.1" 2947 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2948 | dependencies: 2949 | kind-of "^3.2.0" 2950 | 2951 | snapdragon@^0.8.1: 2952 | version "0.8.2" 2953 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" 2954 | dependencies: 2955 | base "^0.11.1" 2956 | debug "^2.2.0" 2957 | define-property "^0.2.5" 2958 | extend-shallow "^2.0.1" 2959 | map-cache "^0.2.2" 2960 | source-map "^0.5.6" 2961 | source-map-resolve "^0.5.0" 2962 | use "^3.1.0" 2963 | 2964 | source-map-resolve@^0.5.0: 2965 | version "0.5.2" 2966 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" 2967 | dependencies: 2968 | atob "^2.1.1" 2969 | decode-uri-component "^0.2.0" 2970 | resolve-url "^0.2.1" 2971 | source-map-url "^0.4.0" 2972 | urix "^0.1.0" 2973 | 2974 | source-map-support@^0.4.0, source-map-support@^0.4.15: 2975 | version "0.4.18" 2976 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 2977 | dependencies: 2978 | source-map "^0.5.6" 2979 | 2980 | source-map-url@^0.4.0: 2981 | version "0.4.0" 2982 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2983 | 2984 | source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: 2985 | version "0.5.7" 2986 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2987 | 2988 | source-map@~0.6.1: 2989 | version "0.6.1" 2990 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2991 | 2992 | spdx-correct@^3.0.0: 2993 | version "3.1.0" 2994 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 2995 | dependencies: 2996 | spdx-expression-parse "^3.0.0" 2997 | spdx-license-ids "^3.0.0" 2998 | 2999 | spdx-exceptions@^2.1.0: 3000 | version "2.2.0" 3001 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 3002 | 3003 | spdx-expression-parse@^3.0.0: 3004 | version "3.0.0" 3005 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 3006 | dependencies: 3007 | spdx-exceptions "^2.1.0" 3008 | spdx-license-ids "^3.0.0" 3009 | 3010 | spdx-license-ids@^3.0.0: 3011 | version "3.0.4" 3012 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz#75ecd1a88de8c184ef015eafb51b5b48bfd11bb1" 3013 | 3014 | split-string@^3.0.1, split-string@^3.0.2: 3015 | version "3.1.0" 3016 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" 3017 | dependencies: 3018 | extend-shallow "^3.0.0" 3019 | 3020 | sprintf-js@~1.0.2: 3021 | version "1.0.3" 3022 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 3023 | 3024 | static-extend@^0.1.1: 3025 | version "0.1.2" 3026 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 3027 | dependencies: 3028 | define-property "^0.2.5" 3029 | object-copy "^0.1.0" 3030 | 3031 | string-width@^1.0.1: 3032 | version "1.0.2" 3033 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 3034 | dependencies: 3035 | code-point-at "^1.0.0" 3036 | is-fullwidth-code-point "^1.0.0" 3037 | strip-ansi "^3.0.0" 3038 | 3039 | "string-width@^1.0.2 || 2", string-width@^2.1.0: 3040 | version "2.1.1" 3041 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 3042 | dependencies: 3043 | is-fullwidth-code-point "^2.0.0" 3044 | strip-ansi "^4.0.0" 3045 | 3046 | string-width@^3.0.0: 3047 | version "3.1.0" 3048 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 3049 | dependencies: 3050 | emoji-regex "^7.0.1" 3051 | is-fullwidth-code-point "^2.0.0" 3052 | strip-ansi "^5.1.0" 3053 | 3054 | string_decoder@~1.1.1: 3055 | version "1.1.1" 3056 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 3057 | dependencies: 3058 | safe-buffer "~5.1.0" 3059 | 3060 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 3061 | version "3.0.1" 3062 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 3063 | dependencies: 3064 | ansi-regex "^2.0.0" 3065 | 3066 | strip-ansi@^4.0.0: 3067 | version "4.0.0" 3068 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 3069 | dependencies: 3070 | ansi-regex "^3.0.0" 3071 | 3072 | strip-ansi@^5.1.0: 3073 | version "5.2.0" 3074 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 3075 | dependencies: 3076 | ansi-regex "^4.1.0" 3077 | 3078 | strip-bom@^3.0.0: 3079 | version "3.0.0" 3080 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 3081 | 3082 | strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: 3083 | version "2.0.1" 3084 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 3085 | 3086 | supports-color@3.1.2: 3087 | version "3.1.2" 3088 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 3089 | dependencies: 3090 | has-flag "^1.0.0" 3091 | 3092 | supports-color@^2.0.0: 3093 | version "2.0.0" 3094 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 3095 | 3096 | supports-color@^5.3.0: 3097 | version "5.5.0" 3098 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 3099 | dependencies: 3100 | has-flag "^3.0.0" 3101 | 3102 | table@^5.2.3: 3103 | version "5.2.3" 3104 | resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" 3105 | dependencies: 3106 | ajv "^6.9.1" 3107 | lodash "^4.17.11" 3108 | slice-ansi "^2.1.0" 3109 | string-width "^3.0.0" 3110 | 3111 | tar@^4: 3112 | version "4.4.8" 3113 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" 3114 | dependencies: 3115 | chownr "^1.1.1" 3116 | fs-minipass "^1.2.5" 3117 | minipass "^2.3.4" 3118 | minizlib "^1.1.1" 3119 | mkdirp "^0.5.0" 3120 | safe-buffer "^5.1.2" 3121 | yallist "^3.0.2" 3122 | 3123 | text-table@^0.2.0: 3124 | version "0.2.0" 3125 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 3126 | 3127 | through@^2.3.6: 3128 | version "2.3.8" 3129 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 3130 | 3131 | tmp@^0.0.33: 3132 | version "0.0.33" 3133 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 3134 | dependencies: 3135 | os-tmpdir "~1.0.2" 3136 | 3137 | to-fast-properties@^1.0.3: 3138 | version "1.0.3" 3139 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 3140 | 3141 | to-fast-properties@^2.0.0: 3142 | version "2.0.0" 3143 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 3144 | 3145 | to-object-path@^0.3.0: 3146 | version "0.3.0" 3147 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 3148 | dependencies: 3149 | kind-of "^3.0.2" 3150 | 3151 | to-regex-range@^2.1.0: 3152 | version "2.1.1" 3153 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 3154 | dependencies: 3155 | is-number "^3.0.0" 3156 | repeat-string "^1.6.1" 3157 | 3158 | to-regex@^3.0.1, to-regex@^3.0.2: 3159 | version "3.0.2" 3160 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" 3161 | dependencies: 3162 | define-property "^2.0.2" 3163 | extend-shallow "^3.0.2" 3164 | regex-not "^1.0.2" 3165 | safe-regex "^1.1.0" 3166 | 3167 | trim-right@^1.0.1: 3168 | version "1.0.1" 3169 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 3170 | 3171 | tslib@^1.9.0: 3172 | version "1.9.3" 3173 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" 3174 | 3175 | type-check@~0.3.2: 3176 | version "0.3.2" 3177 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 3178 | dependencies: 3179 | prelude-ls "~1.1.2" 3180 | 3181 | uglify-js@^3.0.9: 3182 | version "3.5.10" 3183 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.10.tgz#652bef39f86d9dbfd6674407ee05a5e2d372cf2d" 3184 | dependencies: 3185 | commander "~2.20.0" 3186 | source-map "~0.6.1" 3187 | 3188 | union-value@^1.0.0: 3189 | version "1.0.0" 3190 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 3191 | dependencies: 3192 | arr-union "^3.1.0" 3193 | get-value "^2.0.6" 3194 | is-extendable "^0.1.1" 3195 | set-value "^0.4.3" 3196 | 3197 | unset-value@^1.0.0: 3198 | version "1.0.0" 3199 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 3200 | dependencies: 3201 | has-value "^0.3.1" 3202 | isobject "^3.0.0" 3203 | 3204 | uri-js@^4.2.2: 3205 | version "4.2.2" 3206 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 3207 | dependencies: 3208 | punycode "^2.1.0" 3209 | 3210 | urix@^0.1.0: 3211 | version "0.1.0" 3212 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 3213 | 3214 | use@^3.1.0: 3215 | version "3.1.1" 3216 | resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" 3217 | 3218 | user-home@^1.1.1: 3219 | version "1.1.1" 3220 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 3221 | 3222 | util-deprecate@~1.0.1: 3223 | version "1.0.2" 3224 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3225 | 3226 | v8flags@^2.1.1: 3227 | version "2.1.1" 3228 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 3229 | dependencies: 3230 | user-home "^1.1.1" 3231 | 3232 | validate-npm-package-license@^3.0.1: 3233 | version "3.0.4" 3234 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 3235 | dependencies: 3236 | spdx-correct "^3.0.0" 3237 | spdx-expression-parse "^3.0.0" 3238 | 3239 | vlq@^0.2.1, vlq@^0.2.2: 3240 | version "0.2.3" 3241 | resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" 3242 | 3243 | which@^1.2.9: 3244 | version "1.3.1" 3245 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 3246 | dependencies: 3247 | isexe "^2.0.0" 3248 | 3249 | wide-align@^1.1.0: 3250 | version "1.1.3" 3251 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 3252 | dependencies: 3253 | string-width "^1.0.2 || 2" 3254 | 3255 | wordwrap@~1.0.0: 3256 | version "1.0.0" 3257 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 3258 | 3259 | wrappy@1: 3260 | version "1.0.2" 3261 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3262 | 3263 | write@1.0.3: 3264 | version "1.0.3" 3265 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 3266 | dependencies: 3267 | mkdirp "^0.5.1" 3268 | 3269 | yallist@^3.0.0, yallist@^3.0.2: 3270 | version "3.0.3" 3271 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" 3272 | --------------------------------------------------------------------------------