diff --git a/README.md b/README.md index e18c0e5c8..cb8b0ed3a 100644 --- a/README.md +++ b/README.md @@ -81,8 +81,7 @@ You can also try before you buy with this ## Talks * [An Introduction to Formik](https://youtu.be/-tDy7ds0dag?t=33s) by - [Jared Palmer](https://twitter.com/jaredpalmer) @ Spotify NYC. August 15th, - 2017. + [Jared Palmer](https://twitter.com/jaredpalmer) @ Spotify NYC. August 15th, 2017. ## Community Articles / Tutorials @@ -308,70 +307,80 @@ npm install yup --save ``` + + + -**Table of Contents** - -- [Guides](#guides) - - [Basics](#basics) - - [React Native](#react-native) - - [Why use `setFieldValue` instead of `handleChange`?](#why-use-setfieldvalue-instead-of-handlechange) - - [Avoiding new functions in render](#avoiding-new-functions-in-render) - - [Using Formik with TypeScript](#using-formik-with-typescript) - - [Render props (`` and ``)](#render-props-formik--and-field) - - [`withFormik()`](#withformik) -- [API](#api) - - [``](#formik-) - - [Formik render methods](#formik-render-methods) - - [Formik props](#formik-props) - - [`dirty: boolean`](#dirty-boolean) - - [`errors: { [field: string]: string }`](#errors--field-string-string-) - - [`handleBlur: (e: any) => void`](#handleblur-e-any--void) - - [`handleChange: (e: React.ChangeEvent) => void`](#handlechange-e-reactchangeeventany--void) - - [`handleReset: () => void`](#handlereset---void) - - [`handleSubmit: (e: React.FormEvent) => void`](#handlesubmit-e-reactformeventhtmlformevent--void) - - [`isSubmitting: boolean`](#issubmitting-boolean) - - [`isValid: boolean`](#isvalid-boolean) - - [`resetForm: (nextValues?: Values) => void`](#resetform-nextvalues-values--void) - - [`setErrors: (fields: { [field: string]: string }) => void`](#seterrors-fields--field-string-string---void) - - [`setFieldError: (field: string, errorMsg: string) => void`](#setfielderror-field-string-errormsg-string--void) - - [`setFieldTouched: (field: string, isTouched: boolean) => void`](#setfieldtouched-field-string-istouched-boolean--void) - - [`setFieldValue: (field: string, value: any) => void`](#setfieldvalue-field-string-value-any--void) - - [`setStatus: (status?: any) => void`](#setstatus-status-any--void) - - [`setSubmitting: (boolean) => void`](#setsubmitting-boolean--void) - - [`setTouched: (fields: { [field: string]: boolean }) => void`](#settouched-fields--field-string-boolean---void) - - [`setValues: (fields: { [field: string]: any }) => void`](#setvalues-fields--field-string-any---void) - - [`status?: any`](#status-any) - - [`touched: { [field: string]: boolean }`](#touched--field-string-boolean-) - - [`values: { [field: string]: any }`](#values--field-string-any-) - - [`component`](#component) - - [`render: (props: FormikProps) => ReactNode`](#render-props-formikpropsvalues--reactnode) - - [`children: func`](#children-func) - - [`enableReinitialize?: boolean`](#enablereinitialize-boolean) - - [`isInitialValid?: boolean`](#isinitialvalid-boolean) - - [`initialValues?: Values`](#initialvalues-values) - - [`onSubmit: (values: Values, formikBag: FormikBag) => void`](#onsubmit-values-values-formikbag-formikbag--void) - - [`validate?: (values: Values) => FormikError | Promise`](#validate-values-values--formikerrorvalues--promiseany) - - [`validateOnBlur?: boolean`](#validateonblur-boolean) - - [`validateOnChange?: boolean`](#validateonchange-boolean) - - [`validationSchema?: Schema | (() => Schema)`](#validationschema-schema----schema) - - [``](#field-) - - [`
`](#form-) - - [`withFormik(options)`](#withformikoptions) - - [`options`](#options) - - [`displayName?: string`](#displayname-string) - - [`enableReinitialize?: boolean`](#enablereinitialize-boolean-1) - - [`handleSubmit: (values: Values, formikBag: FormikBag) => void`](#handlesubmit-values-values-formikbag-formikbag--void) - - [The "FormikBag":](#the-formikbag) - - [`isInitialValid?: boolean | (props: Props) => boolean`](#isinitialvalid-boolean--props-props--boolean) - - [`mapPropsToValues?: (props: Props) => Values`](#mappropstovalues-props-props--values) - - [`validate?: (values: Values, props: Props) => FormikError | Promise`](#validate-values-values-props-props--formikerrorvalues--promiseany) - - [`validateOnBlur?: boolean`](#validateonblur-boolean-1) - - [`validateOnChange?: boolean`](#validateonchange-boolean-1) - - [`validationSchema?: Schema | ((props: Props) => Schema)`](#validationschema-schema--props-props--schema) - - [Injected props and methods](#injected-props-and-methods) -- [Organizations and projects using Formik](#organizations-and-projects-using-formik) -- [Authors](#authors) -- [Contributors](#contributors) + +* [Guides](#guides) + * [Basics](#basics) + * [React Native](#react-native) + * [Why use `setFieldValue` instead of `handleChange`?](#why-use-setfieldvalue-instead-of-handlechange) + * [Avoiding new functions in render](#avoiding-new-functions-in-render) + * [Using Formik with TypeScript](#using-formik-with-typescript) + * [Render props (`` and ``)](#render-props-formik--and-field) + * [`withFormik()`](#withformik) +* [API](#api) + * [``](#formik-) + * [Formik render methods](#formik-render-methods) + * [Formik props](#formik-props) + * [`dirty: boolean`](#dirty-boolean) + * [`errors: { [field: string]: string }`](#errors--field-string-string-) + * [`handleBlur: (e: any) => void`](#handleblur-e-any--void) + * [`handleChange: (e: React.ChangeEvent) => void`](#handlechange-e-reactchangeeventany--void) + * [`handleReset: () => void`](#handlereset---void) + * [`handleSubmit: (e: React.FormEvent) => void`](#handlesubmit-e-reactformeventhtmlformevent--void) + * [`isSubmitting: boolean`](#issubmitting-boolean) + * [`isValid: boolean`](#isvalid-boolean) + * [`resetForm: (nextValues?: Values) => void`](#resetform-nextvalues-values--void) + * [`setErrors: (fields: { [field: string]: string }) => void`](#seterrors-fields--field-string-string---void) + * [`setFieldError: (field: string, errorMsg: string) => void`](#setfielderror-field-string-errormsg-string--void) + * [`setFieldTouched: (field: string, isTouched: boolean) => void`](#setfieldtouched-field-string-istouched-boolean--void) + * [`setFieldValue: (field: string, value: any) => void`](#setfieldvalue-field-string-value-any--void) + * [`setStatus: (status?: any) => void`](#setstatus-status-any--void) + * [`setSubmitting: (boolean) => void`](#setsubmitting-boolean--void) + * [`setTouched: (fields: { [field: string]: boolean }) => void`](#settouched-fields--field-string-boolean---void) + * [`setValues: (fields: { [field: string]: any }) => void`](#setvalues-fields--field-string-any---void) + * [`status?: any`](#status-any) + * [`touched: { [field: string]: boolean }`](#touched--field-string-boolean-) + * [`values: { [field: string]: any }`](#values--field-string-any-) + * [`component`](#component) + * [`render: (props: FormikProps) => ReactNode`](#render-props-formikpropsvalues--reactnode) + * [`children: func`](#children-func) + * [`enableReinitialize?: boolean`](#enablereinitialize-boolean) + * [`isInitialValid?: boolean`](#isinitialvalid-boolean) + * [`initialValues?: Values`](#initialvalues-values) + * [`onReset?: (values: Values, formikBag: FormikBag) => void`](#onreset-values-values-formikbag-formikbag--void) + * [`onSubmit: (values: Values, formikBag: FormikBag) => void`](#onsubmit-values-values-formikbag-formikbag--void) + * [`validate?: (values: Values) => FormikError | Promise`](#validate-values-values--formikerrorvalues--promiseany) + * [`validateOnBlur?: boolean`](#validateonblur-boolean) + * [`validateOnChange?: boolean`](#validateonchange-boolean) + * [`validationSchema?: Schema | (() => Schema)`](#validationschema-schema----schema) + * [``](#field-) + * [`validate?: (value: any) => undefined | string | Promise`](#validate-value-any--undefined--string--promiseany) + * [``](#fieldarray) + * [`name: string`](#name-string) + * [FieldArray Helpers](#fieldarray-helpers) + * [FieldArray render methods](#fieldarray-render-methods) + * [`render: (arrayHelpers: ArrayHelpers) => React.ReactNode`](#render-arrayhelpers-arrayhelpers--reactreactnode) + * [`component: React.ReactNode`](#component-reactreactnode) + * [``](#form-) + * [`withFormik(options)`](#withformikoptions) + * [`options`](#options) + * [`displayName?: string`](#displayname-string) + * [`enableReinitialize?: boolean`](#enablereinitialize-boolean-1) + * [`handleSubmit: (values: Values, formikBag: FormikBag) => void`](#handlesubmit-values-values-formikbag-formikbag--void) + * [The "FormikBag":](#the-formikbag) + * [`isInitialValid?: boolean | (props: Props) => boolean`](#isinitialvalid-boolean--props-props--boolean) + * [`mapPropsToValues?: (props: Props) => Values`](#mappropstovalues-props-props--values) + * [`validate?: (values: Values, props: Props) => FormikError | Promise`](#validate-values-values-props-props--formikerrorvalues--promiseany) + * [`validateOnBlur?: boolean`](#validateonblur-boolean-1) + * [`validateOnChange?: boolean`](#validateonchange-boolean-1) + * [`validationSchema?: Schema | ((props: Props) => Schema)`](#validationschema-schema--props-props--schema) + * [Injected props and methods](#injected-props-and-methods) +* [Organizations and projects using Formik](#organizations-and-projects-using-formik) +* [Authors](#authors) +* [Contributors](#contributors) @@ -405,12 +414,11 @@ import EditUserForm from './EditUserForm'; import { Formik } from 'formik'; const EditUserDialog = ({ user, updateUser, onClose }) => { - const { email, social } = user; return (

Edit User

{ CallMyApi(user.id, values).then( updatedUser => { @@ -443,21 +451,22 @@ const EditUserDialog = ({ user, updateUser, onClose }) => { {errors.email && touched.email &&
{errors.email}
} - {errors.facebook && - touched.facebook &&
{errors.facebook}
} + {errors.social.facebook && + touched.facebook &&
{errors.social.facebook}
} - {errors.twitter && touched.twitter &&
{errors.twitter}
} + {errors.social.twitter && + touched.twitter &&
{errors.social.twitter}
} @@ -486,12 +495,11 @@ import EditUserForm from './EditUserForm'; import { Formik, Field, Form } from 'formik'; const EditUserDialog = ({ user, updateUser, onClose }) => { - const { email, social } = user; return (

Edit User

{ CallMyApi(user.id, values).then( updatedUser => { @@ -507,12 +515,13 @@ const EditUserDialog = ({ user, updateUser, onClose }) => { render={({ errors, touched, isSubmitting }) => ( - {errors.email && touched.email &&
{errors.email}
} - - {errors.facebook && - touched.facebook &&
{errors.facebook}
} - - {errors.twitter && touched.twitter &&
{errors.twitter}
} + {errors.email && touched.social.email &&
{errors.email}
} + + {errors.social.facebook && + touched.social.facebook &&
{errors.social.facebook}
} + + {errors.social.twitter && + touched.social.twitter &&
{errors.social.twitter}
} @@ -712,8 +721,9 @@ export default MyReactNativeForm; ### Using Formik with TypeScript -The Formik source code is written in TypeScript, so you can rest assured that types will always be up to date. As a mental model, Formik's types are very similar to React Router 4's ``. - +The Formik source code is written in TypeScript, so you can rest assured that +types will always be up to date. As a mental model, Formik's types are very +similar to React Router 4's ``. #### Render props (`` and ``) @@ -721,7 +731,6 @@ The Formik source code is written in TypeScript, so you can rest assured that ty import * as React from 'react'; import { Formik, FormikProps, Form, Field, FieldProps } from 'formik'; - interface MyFormValues { firstName: string; } @@ -733,19 +742,21 @@ export const MyApp: React.SFC<{} /* whatever */> = () => { alert(JSON.stringify(values))} - render={(formikBag: FormikProps) => + render={(formikBag: FormikProps) => ( ) => + render={({ field, form }: FieldProps) => (
{form.touched.firstName && form.errors.firstName && form.errors.firstName} -
} + + )} /> - } + + )} /> ); @@ -825,7 +836,7 @@ const Basic = () => (

My App

This can be anywhere in your application

- +
); @@ -886,7 +897,7 @@ All three render methods will be passed the same props: ##### `dirty: boolean` -Returns `true` if any field has been touched by any means, `false` otherwise. +Returns `true` if values are not deeply equal from initial values, `false` otherwise. `dirty` is a readonly computed property and should not be mutated directly. ##### `errors: { [field: string]: string }` @@ -901,8 +912,7 @@ the `errors` objects shape. ##### `handleBlur: (e: any) => void` `onBlur` event handler. Useful for when you need to track whether an input has -been [`touched`] or not. This should be passed to `` +been [`touched`] or not. This should be passed to `` DOM-only. Use [`setFieldTouched`] in React Native. @@ -922,8 +932,7 @@ to `` ##### `handleSubmit: (e: React.FormEvent) => void` -Submit handler. This should be passed to `
...
` +Submit handler. This should be passed to `
...
` ##### `isSubmitting: boolean` @@ -1102,6 +1111,11 @@ an input from uncontrolled to controlled. Note: `initialValues` not available to the higher-order component, use [`mapPropsToValues`] instead. +#### `onReset?: (values: Values, formikBag: FormikBag) => void` + +Your optional form reset handler. It is passed your forms [`values`] and the +"FormikBag". + #### `onSubmit: (values: Values, formikBag: FormikBag) => void` Your form submission handler. It is passed your forms [`values`] and the @@ -1234,12 +1248,204 @@ const CustomInputComponent: React.SFC & CustomInputProps> = ( ) ``` +#### `validate?: (value: any) => undefined | string | Promise` + +You can run independent field-level validations by passing a function to the +`validate>` prop. The function will respect the [`validateOnBlur`] and +[`validateOnChange`] config/props specified in the `'s` parent `` +/ `withFormik`. This function can be either be: + +* Synchronous and if invalid, return a `string` containing the error message or + return `undefined`. + +```js +// Synchronous validation for Field +const validate = value => { + let errorMessage; + if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) { + errorMessage = 'Invalid email address'; + } + return errorMessage; +}; +``` + +* async: Return a Promise that throws a `string` containing the error message. + This works like Formik's [`validate`], but instead of returning an [`errors`] + object, it's just a `string`. + +* Asynchronous and return a Promise that's error is an string with the error + message + +```js +// Async validation for Field +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +const validate = value => { + return sleep(2000).then(() => { + if (['admin', 'null', 'god'].includes(value)) { + throw 'Nice try'; + } + }); +}; +``` + +Note: To allow for i18n libraries, the TypeScript typings for `validate` are +slightly relaxed and allow you to return a `Function` (e.g. `i18n('invalid')`). + +### `` + +`` is a component that helps with common array/list manipulations. You pass it a `name` property with the path to the key within `values` that holds the relevant array. `` will then give you access to array helper methods via render props. For convenience, calling these methods will trigger validation and also manage `touched` for you. + +```jsx +import React from 'react'; +import { Formik, Form, Field, FieldArray } from 'formik' + +// Here is an example of a form with an editable list. +// Next to each input are buttons for insert and remove. +// If the list is empty, there is a button to add an item. +export const FriendList = () => ( +
+

Friend List

+ + setTimeout(() => { + alert(JSON.stringify(values, null, 2)); + }, 500) + } + render={formikProps => ( + ( +
+ {values.friends && values.friends.length > 0 ? ( + values.friends.map((friend, index) => ( +
+ + + +
+ )) + ) : ( + + )} +
+ +
+
+ )} + /> + )} + /> +
+); +``` + +##### `name: string` + +The name or path to the relevant key in [`values`]. + +#### FieldArray Helpers + +The following methods are made available via render props. + +* `push: (obj: any) => void`: Add a value to the end of an array +* `swap: (indexA: number, indexB: number) => void`: Swap two values in an array +* `move: (from: number, to: number) => void`: Move an element in an array to another index +* `insert: (index: number, value: any) => void`: Insert an element at a given index into the array +* `unshift: (value: any) => number`: Add an element to the beginning of an array and return its length +* `remove(index: number): T | undefined`: Remove an element at an index of an array and return it +* `pop(): T | undefined`: Remove and return value from the end of the array + +#### FieldArray render methods + +There are three ways to render things with `` + +* `` +* `` + +##### `render: (arrayHelpers: ArrayHelpers) => React.ReactNode` + +```jsx +import React from 'react'; +import { Formik, Form, Field, FieldArray } from 'formik' + +export const FriendList = () => ( +
+

Friend List

+ ( + ( +
+ {/*... use these however you want */} +
+ )} + /> + /> +
+); +``` + +##### `component: React.ReactNode` + +```jsx +import React from 'react'; +import { Formik, Form, Field, FieldArray } from 'formik' + + +export const FriendList = () => ( +
+

Friend List

+ ( + + /> +
+); + + +// In addition to the array helpers, Formik state and helpers +// (values, touched, setXXX, etc) are provided through a `form` +// prop +export const MyDynamicForm = ({ + move, swap, push, insert, unshift, pop, form +}) => ( +
+ {/** whatever you need to do */} +
+); +``` + ### `
` Like ``, `` is a helper component you can use to save time. It is tiny wrapper around ``. This -means you don't need to explictly type out `` if you don't want to. +means you don't need to explictly type out `` if you don't want to. **ReactDOM only** @@ -1408,9 +1614,6 @@ component's [`errors`]. Its keys should match those of [`values`]. These are identical to the props of ` ...} />` - - - ## Organizations and projects using Formik [List of organizations and projects using Formik](https://github.com/jaredpalmer/formik/issues/87) diff --git a/examples/MultistepWizard.js b/examples/MultistepWizard.js new file mode 100644 index 000000000..bb31a2c41 --- /dev/null +++ b/examples/MultistepWizard.js @@ -0,0 +1,170 @@ +import React from 'react'; +import { Formik, Field } from 'formik'; + +const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); + +const required = value => (value ? undefined : 'Required'); + +const Error = ({ name }) => ( + + touched[name] && errors[name] ? {errors[name]} : null + } + /> +); + +class Wizard extends React.Component { + static Page = ({ children }) => children; + + constructor(props) { + super(props); + this.state = { + page: 0, + values: props.initialValues, + }; + } + + next = values => + this.setState(state => ({ + page: Math.min(state.page + 1, this.props.children.length - 1), + values, + })); + + previous = () => + this.setState(state => ({ + page: Math.max(state.page - 1, 0), + })); + + validate = values => { + const activePage = React.Children.toArray(this.props.children)[ + this.state.page + ]; + return activePage.props.validate ? activePage.props.validate(values) : {}; + }; + + handleSubmit = (values, bag) => { + const { children, onSubmit } = this.props; + const { page } = this.state; + const isLastPage = page === React.Children.count(children) - 1; + if (isLastPage) { + return onSubmit(values); + } else { + this.next(values); + bag.setSubmitting(false); + } + }; + + render() { + const { children } = this.props; + const { page, values } = this.state; + const activePage = React.Children.toArray(children)[page]; + const isLastPage = page === React.Children.count(children) - 1; + return ( + ( + + {activePage} +
+ {page > 0 && ( + + )} + + {!isLastPage && } + {isLastPage && ( + + )} +
+ +
{JSON.stringify(values, null, 2)}
+ + )} + /> + ); + } +} + +const App = () => ( +
+

Multistep / Form Wizard

+ { + sleep(300).then(() => { + window.alert(JSON.stringify(values, null, 2)); + actions.setSubmitting(false); + }); + }} + > + +
+ + + +
+
+ + + +
+
+ { + const errors = {}; + if (!values.email) { + errors.email = 'Required'; + } + if (!values.favoriteColor) { + errors.favoriteColor = 'Required'; + } + return errors; + }} + > +
+ + + +
+
+ + + + + + + +
+
+
+
+); diff --git a/package.json b/package.json index 45631db77..6de3140f6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "formik", "description": "Forms in React, without tears", - "version": "0.10.5", + "version": "0.11.0-rc.2", "license": "MIT", "author": "Jared Palmer ", "repository": "jaredpalmer/formik", @@ -24,9 +24,9 @@ "scripts": { "test": "jest --env=jsdom", "test:watch": "npm run test -- --watch", - "start": "cross-env NODE_ENV=development tsc-watch --onSuccess \"rollup -c\"", + "start": "cross-env NODE_ENV=development tsc-watch --project tsconfig.base.json --onSuccess \"rollup -c\"", "prebuild": "rimraf dist", - "build": "tsc && cross-env NODE_ENV=production rollup -c && cross-env NODE_ENV=development rollup -c && rimraf compiled", + "build": "tsc -p tsconfig.base.json && cross-env NODE_ENV=production rollup -c && cross-env NODE_ENV=development rollup -c && rimraf compiled", "prepublish": "npm run build", "format": "prettier --trailing-comma es5 --single-quote --write 'src/**/*' 'test/**/*' 'README.md'", "precommit": "lint-staged", @@ -34,7 +34,9 @@ "gen-docs": "all-contributors generate && doctoc README.md" }, "dependencies": { + "lodash.clonedeep": "^4.5.0", "lodash.isequal": "4.5.0", + "lodash.topath": "4.5.2", "prop-types": "^15.5.10", "warning": "^3.0.0" }, @@ -43,26 +45,30 @@ }, "optionalDependencies": {}, "devDependencies": { - "@types/enzyme": "2.8.4", + "@types/enzyme": "3.1.5", + "@types/enzyme-adapter-react-16": "1.0.1", "@types/jest": "20.0.6", + "@types/lodash.clonedeep": "^4.5.3", "@types/lodash.isequal": "4.5.2", + "@types/lodash.topath": "4.5.3", "@types/node": "8.0.19", "@types/prop-types": "15.5.1", - "@types/react": "16.0.0", - "@types/react-dom": "15.5.1", + "@types/react": "16.0.28", + "@types/react-dom": "16.0.3", "@types/react-test-renderer": "15.5.2", "@types/warning": "^3.0.0", "all-contributors-cli": "^4.4.0", "cross-env": "5.0.5", "doctoc": "^1.3.0", - "enzyme": "2.9.1", + "enzyme": "3.2.0", + "enzyme-adapter-react-16": "^1.1.0", "husky": "0.14.3", - "jest": "20.0.4", + "jest": "^21.2.1", + "jest-cli": "^21.2.1", "lint-staged": "4.0.2", "prettier": "^1.8.2", - "react": "15.6.1", - "react-dom": "15.6.1", - "react-test-renderer": "15.6.1", + "react": "16.2.0", + "react-dom": "16.2.0", "rimraf": "2.6.1", "rollup": "0.45.2", "rollup-plugin-commonjs": "8.1.0", @@ -71,11 +77,11 @@ "rollup-plugin-replace": "1.1.1", "rollup-plugin-sourcemaps": "0.4.2", "rollup-plugin-uglify": "2.0.1", - "ts-jest": "20.0.9", + "ts-jest": "^21.2.4", "tsc-watch": "1.0.7", "tslint": "5.5.0", "tslint-react": "3.2.0", - "typescript": "2.4.2", + "typescript": "2.6.2", "yup": "0.21.3" }, "lint-staged": { @@ -90,6 +96,10 @@ "semi": true }, "jest": { + "setupFiles": [ + "raf/polyfill", + "/test/setupTest.ts" + ], "collectCoverageFrom": [ "src/**/*.{ts,tsx}" ], @@ -97,7 +107,6 @@ ".(ts|tsx)": "/node_modules/ts-jest/preprocessor.js" }, "testMatch": [ - "/test/**/*.ts?(x)", "/test/**/?(*.)(spec|test).ts?(x)" ], "transformIgnorePatterns": [ diff --git a/rollup.config.js b/rollup.config.js index 4c2737e3d..58ccc517a 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -32,7 +32,6 @@ export default [ process.env.NODE_ENV || 'development' ), }), - resolve(), commonjs({ include: /node_modules/, namedExports: { @@ -74,8 +73,7 @@ export default [ ], }, }), - , sourceMaps(), ], }), -]; \ No newline at end of file +]; diff --git a/src/Field.tsx b/src/Field.tsx index 4072f63a0..2785dafb1 100644 --- a/src/Field.tsx +++ b/src/Field.tsx @@ -1,6 +1,6 @@ import * as PropTypes from 'prop-types'; import * as React from 'react'; -import { dlv } from './utils'; +import { dlv, isPromise } from './utils'; import { FormikProps } from './formik'; import { isFunction, isEmptyChildren } from './utils'; @@ -60,6 +60,11 @@ export interface FieldConfig { */ children?: ((props: FieldProps) => React.ReactNode); + /** + * Validate a single field value independently + */ + validate?: ((value: any) => string | Function | Promise | undefined); + /** * Field name */ @@ -92,6 +97,7 @@ export class Field extends React.Component< component: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), render: PropTypes.func, children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]), + validate: PropTypes.func, }; componentWillMount() { @@ -103,7 +109,7 @@ export class Field extends React.Component< ); warning( - !(component && children && isFunction(children)), + !(this.props.component && children && isFunction(children)), 'You should not use and as a function in the same component; will be ignored.' ); @@ -113,19 +119,58 @@ export class Field extends React.Component< ); } + handleChange = (e: React.ChangeEvent) => { + const { handleChange, validateOnChange } = this.context.formik; + handleChange(e); // Call Formik's handleChange no matter what + if (!!validateOnChange && !!this.props.validate) { + this.runFieldValidations(e.target.value); + } + }; + + handleBlur = (e: any) => { + const { handleBlur, validateOnBlur } = this.context.formik; + handleBlur(e); // Call Formik's handleBlur no matter what + if (validateOnBlur && this.props.validate) { + this.runFieldValidations(e.target.value); + } + }; + + runFieldValidations = (value: any) => { + const { setFieldError } = this.context.formik; + const { name, validate } = this.props; + // Call validate fn + const maybePromise = (validate as any)(value); + // Check if validate it returns a Promise + if (isPromise(maybePromise)) { + (maybePromise as Promise).then( + () => setFieldError(name, undefined), + error => setFieldError(name, error) + ); + } else { + // Otherwise set the error + setFieldError(name, maybePromise); + } + }; + render() { - const { name, render, children, component = 'input', ...props } = this - .props as FieldConfig; + const { + validate, + name, + render, + children, + component = 'input', + ...props + } = this.props as FieldConfig; const { formik } = this.context; const field = { value: props.type === 'radio' || props.type === 'checkbox' - ? props.value + ? props.value // React uses checked={} for these inputs : dlv(formik.values, name), name, - onChange: formik.handleChange, - onBlur: formik.handleBlur, + onChange: validate ? this.handleChange : formik.handleChange, + onBlur: validate ? this.handleBlur : formik.handleBlur, }; const bag = { field, form: formik }; diff --git a/src/FieldArray.tsx b/src/FieldArray.tsx new file mode 100644 index 000000000..b3e67438f --- /dev/null +++ b/src/FieldArray.tsx @@ -0,0 +1,127 @@ +import * as React from 'react'; +import { dlv } from './utils'; +import { SharedRenderProps } from './types'; +import * as PropTypes from 'prop-types'; +import { FormikProps } from './formik'; + +export type FieldArrayConfig = { + /** Really the path to the array field to be updated */ + name: string; +} & SharedRenderProps }>; + +export interface ArrayHelpers { + /** Add a value to the end of an array */ + push: (obj: any) => void; + /** Swap two values in an array */ + swap: (indexA: number, indexB: number) => void; + /** Move an element in an array to another index */ + move: (from: number, to: number) => void; + /** Insert an element at a given index into the array */ + insert: (index: number, value: any) => void; + /** Add an element to the beginning of an array and return its length */ + unshift: (value: any) => number; + /** Remove and element at an index of an array */ + remove(index: number): T | undefined; + /** Remove and return value from the end of the array */ + pop(): T | undefined; +} + +/** + * Some array helpers! + */ +export const move = (array: any[], from: number, to: number) => { + const copy = [...(array || [])]; + const value = copy[from]; + copy.splice(from, 1); + copy.splice(to, 0, value); + return copy; +}; + +export const swap = (array: any[], indexA: number, indexB: number) => { + const copy = [...(array || [])]; + const a = copy[indexA]; + copy[indexA] = copy[indexB]; + copy[indexB] = a; + return copy; +}; + +export const insert = (array: any[], index: number, value: any) => { + const copy = [...(array || [])]; + copy.splice(index, 0, value); + return copy; +}; + +export class FieldArray extends React.Component { + static contextTypes = { + formik: PropTypes.object, + }; + + changeValue = (fn: Function) => { + const { setFieldValue, values } = this.context.formik; + const { name } = this.props; + const val = fn(dlv(values, name)); + setFieldValue(name, val); + }; + + push = (value: any) => this.changeValue((array: any[]) => [...array, value]); + + swap = (indexA: number, indexB: number) => + this.changeValue((array: any[]) => swap(array, indexA, indexB)); + + move = (from: number, to: number) => + this.changeValue((array: any[]) => move(array, from, to)); + + insert = (index: number, value: any) => + this.changeValue((array: any[]) => insert(array, index, value)); + + unshift = (value: any) => { + let arr = []; + this.changeValue((array: any[]) => { + arr = array ? [value, ...array] : [value]; + return arr; + }); + return arr.length; + }; + + remove = (index: number) => { + let result; + this.changeValue((array: any[]) => { + const copy = [...(array || [])]; + result = copy[index]; + copy.splice(index, 1); + return copy; + }); + return result; + }; + + pop = () => { + let result; + this.changeValue((array: any[]) => { + const tmp = array; + result = tmp.pop(); + return tmp; + }); + return result; + }; + + render() { + const arrayHelpers: ArrayHelpers = { + push: this.push, + pop: this.pop, + swap: this.swap, + move: this.move, + insert: this.insert, + unshift: this.unshift, + remove: this.remove, + }; + + const { component, render } = this.props; + const props = { ...arrayHelpers, form: this.context.formik }; + + if (component) { + return React.createElement(component as any, props); + } + + return render ? (render as any)(props) : null; + } +} diff --git a/src/formik.tsx b/src/formik.tsx index db480981f..bf946a81b 100644 --- a/src/formik.tsx +++ b/src/formik.tsx @@ -105,8 +105,6 @@ export interface FormikHandlers { handleChange: (e: React.ChangeEvent) => void; /** Mark input as touched */ handleBlur: (e: any) => void; - /** Change value of form field directly */ - handleChangeValue: (name: string, value: any) => void; /** Reset form event handler */ handleReset: () => void; } @@ -128,12 +126,17 @@ export interface FormikSharedConfig { /** * props */ -export interface FormikConfig extends FormikSharedConfig { +export interface FormikConfig extends FormikSharedConfig { /** * Initial values of the form */ initialValues: Values; + /** + * Reset handler + */ + onReset?: (values: Values, formikActions: FormikActions) => void; + /** * Submission handler */ @@ -142,7 +145,7 @@ export interface FormikConfig extends FormikSharedConfig { /** * Form component to render */ - component?: React.ComponentType | void>; + component?: React.ComponentType> | React.ReactNode; /** * Render prop (works like React router's } />) @@ -195,6 +198,7 @@ export class Formik extends React.Component< validateOnBlur: PropTypes.bool, isInitialValid: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]), initialValues: PropTypes.object, + onReset: PropTypes.func, onSubmit: PropTypes.func.isRequired, validationSchema: PropTypes.oneOfType([PropTypes.func, PropTypes.object]), validate: PropTypes.func, @@ -241,6 +245,8 @@ export class Formik extends React.Component< resetForm: this.resetForm, submitForm: this.submitForm, initialValues: this.initialValues, + validateOnChange: this.props.validateOnChange, + validateOnBlur: this.props.validateOnBlur, }, }; } @@ -406,26 +412,10 @@ export class Formik extends React.Component< })); if (this.props.validateOnChange) { - this.runValidations(setDeep(field, value, this.state.values)); + this.runValidations(setDeep(field, val, this.state.values)); } }; - handleChangeValue = (field: string, value: any) => { - if (process.env.NODE_ENV !== 'production') { - console.warn( - `Warning: Formik\'s handleChangeValue is deprecated and may be removed in future releases. Use Formik's setFieldValue(field, value) and setFieldTouched(field, isTouched) instead. React will merge the updates under the hood and avoid a double render. For more info see https://github.com/jaredpalmer/formik#setfieldvalue-field-string-value-any--void` - ); - } - // Set touched and form fields by name - this.setState(prevState => ({ - ...prevState, - values: setDeep(field, value, prevState.values), - touched: setDeep(field, true, prevState.touched), - })); - - this.runValidationSchema(setDeep(field, value, this.state.values)); - }; - setFieldValue = (field: string, value: any) => { // Set form field by name this.setState( @@ -441,6 +431,22 @@ export class Formik extends React.Component< ); }; + getFormikActions = (): FormikActions => { + return { + resetForm: this.resetForm, + setError: this.setError, + setErrors: this.setErrors, + setFieldError: this.setFieldError, + setFieldTouched: this.setFieldTouched, + setFieldValue: this.setFieldValue, + setStatus: this.setStatus, + setSubmitting: this.setSubmitting, + setTouched: this.setTouched, + setValues: this.setValues, + submitForm: this.submitForm, + }; + }; + handleSubmit = (e: React.FormEvent) => { e.preventDefault(); this.submitForm(); @@ -484,19 +490,7 @@ export class Formik extends React.Component< }; executeSubmit = () => { - this.props.onSubmit(this.state.values, { - resetForm: this.resetForm, - setError: this.setError, - setErrors: this.setErrors, - setFieldError: this.setFieldError, - setFieldTouched: this.setFieldTouched, - setFieldValue: this.setFieldValue, - setStatus: this.setStatus, - setSubmitting: this.setSubmitting, - setTouched: this.setTouched, - setValues: this.setValues, - submitForm: this.submitForm, - }); + this.props.onSubmit(this.state.values, this.getFormikActions()); }; handleBlur = (e: any) => { @@ -568,13 +562,23 @@ export class Formik extends React.Component< }; handleReset = () => { - this.resetForm(); + if (this.props.onReset) { + const maybePromisedOnReset = (this.props.onReset as any)( + this.state.values, + this.getFormikActions() + ); + + if (isPromise(maybePromisedOnReset)) { + (maybePromisedOnReset as Promise).then(this.resetForm); + } else { + this.resetForm(); + } + } }; render() { const { component, render, children, isInitialValid } = this.props; - const dirty = - values(this.state.touched).filter(Boolean).length > 0; + const dirty = !isEqual(this.initialValues, this.state.values); const props = { ...this.state, dirty, @@ -599,6 +603,8 @@ export class Formik extends React.Component< setTouched: this.setTouched, setValues: this.setValues, submitForm: this.submitForm, + validateOnChange: this.props.validateOnChange, + validateOnBlur: this.props.validateOnBlur, }; return component ? React.createElement(component as any, props) @@ -606,9 +612,7 @@ export class Formik extends React.Component< ? (render as any)(props) : children // children come last, always called ? typeof children === 'function' - ? (children as (props: FormikProps) => React.ReactNode)( - props as FormikProps - ) + ? (children as any)(props) : !isEmptyChildren(children) ? React.Children.only(children) : null : null; } @@ -637,7 +641,7 @@ function warnAboutMissingIdentifier({ * Transform Yup ValidationError to a more usable object */ export function yupToFormErrors(yupError: any): FormikErrors { - let errors = {} as FormikErrors; + let errors: any = {} as FormikErrors; for (let err of yupError.inner) { if (!errors[err.path]) { errors = setDeep(err.path, err.message, errors); @@ -697,3 +701,4 @@ export function touchAllFields(fields: T): FormikTouched { export * from './Field'; export * from './Form'; export * from './withFormik'; +export * from './FieldArray'; diff --git a/src/types.ts b/src/types.ts index 5dc82bd35..4c0a2ccb2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -13,3 +13,20 @@ export interface ComponentDecorator { export interface InferableComponentDecorator { >(component: T): T; } + +export interface SharedRenderProps { + /** + * Field component to render. Can either be a string like 'select' or a component. + */ + component?: string | React.ComponentType; + + /** + * Render prop (works like React router's } />) + */ + render?: ((props: T) => React.ReactNode); + + /** + * Children render function {props => ...}) + */ + children?: ((props: T) => React.ReactNode); +} diff --git a/src/utils.ts b/src/utils.ts index c39e05407..dc3adf07f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,6 @@ import * as React from 'react'; +import toPath from 'lodash.topath'; +import cloneDeep from 'lodash.clonedeep'; /** @private is the given object/value a promise? */ export function isPromise(value: any): boolean { @@ -27,9 +29,8 @@ export function values(obj: any): T[] { return vals; } -/** - * @private Deeply get a value from an object via it's dot path. - * See https://github.com/developit/dlv/blob/master/index.js +/** + * @private Deeply get a value from an object via it's path. */ export function dlv( obj: any, @@ -37,22 +38,22 @@ export function dlv( def?: any, p: number = 0 ) { - key = (key as string).split ? (key as string).split('.') : key; - while (obj && p < key.length) { - obj = obj[key[p++]]; + const path = toPath(key); + while (obj && p < path.length) { + obj = obj[path[p++]]; } return obj === undefined ? def : obj; } -/** - * @private Deeply set a value from in object via it's dot path. +/** + * @private Deeply set a value from in object via it's path. * See https://github.com/developit/linkstate */ export function setDeep(path: string, value: any, obj: any): any { let res: any = {}; let resVal: any = res; let i = 0; - let pathArray = path.replace(/\]/g, '').split(/\.|\[/); + let pathArray = toPath(path); for (; i < pathArray.length - 1; i++) { const currentPath: string = pathArray[i]; @@ -61,9 +62,7 @@ export function setDeep(path: string, value: any, obj: any): any { if (resVal[currentPath]) { resVal = resVal[currentPath]; } else if (currentObj) { - resVal = resVal[currentPath] = Array.isArray(currentObj) - ? [...currentObj] - : { ...currentObj }; + resVal = resVal[currentPath] = cloneDeep(currentObj); } else { const nextPath: string = pathArray[i + 1]; resVal = resVal[currentPath] = @@ -78,15 +77,12 @@ export function setDeep(path: string, value: any, obj: any): any { /** @private is the given object a Function? */ export const isFunction = (obj: any) => 'function' === typeof obj; - /** @private is the given object an Object? */ export const isObject = (obj: any) => obj !== null && typeof obj === 'object'; -/** - * @private is the given object an Integer? - * see https://stackoverflow.com/questions/10834796/validate-that-a-string-is-a-positive-integer -*/ +/** @private is the given object an integer */ export const isInteger = (obj: any) => String(Math.floor(Number(obj))) === obj; +/** @private Does a React component have exactly 0 children? */ export const isEmptyChildren = (children: any) => React.Children.count(children) === 0; diff --git a/src/withFormik.tsx b/src/withFormik.tsx index 833523618..9d3676504 100644 --- a/src/withFormik.tsx +++ b/src/withFormik.tsx @@ -74,9 +74,7 @@ export type CompositeComponent

= | React.StatelessComponent

; export interface ComponentDecorator { - (component: CompositeComponent): React.ComponentClass< - TOwnProps - >; + (component: CompositeComponent): React.ComponentType; } export interface InferableComponentDecorator { @@ -91,8 +89,8 @@ export function withFormik< Values extends FormikValues, Payload = Values >({ - mapPropsToValues = (vanillaProps: any) => { - let val: FormikValues = {} as FormikValues; + mapPropsToValues = (vanillaProps: Props): Values => { + let val: Values = {} as Values; for (let k in vanillaProps) { if ( vanillaProps.hasOwnProperty(k) && @@ -101,14 +99,16 @@ export function withFormik< val[k] = vanillaProps[k]; } } - return val; + return val as Values; }, - ...config, + ...config }: WithFormikConfig): ComponentDecorator< Props, InjectedFormikProps > { - return function createFormik(Component: CompositeComponent) { + return function createFormik( + Component: CompositeComponent> + ): React.ComponentClass { /** * We need to use closures here for to provide the wrapped component's props to * the respective withFormik config methods. @@ -125,7 +125,7 @@ export function withFormik< }; handleSubmit = (values: Values, actions: FormikActions) => { - return config.handleSubmit(values as Values, { + return config.handleSubmit(values, { ...actions, props: this.props, }); @@ -141,12 +141,12 @@ export function withFormik< render() { return ( ); diff --git a/test/Field.test.tsx b/test/Field.test.tsx index dc79c50e7..0286ca486 100644 --- a/test/Field.test.tsx +++ b/test/Field.test.tsx @@ -1,12 +1,15 @@ import * as React from 'react'; import * as ReactDOM from 'react-dom'; -import { Field } from '../src/Field'; -import { Formik } from '../src/formik'; +import { Field, FieldProps } from '../src/Field'; +import { Formik, FormikProps } from '../src/formik'; -// tslint:disable-next-line:no-empty -const noop = () => {}; +import { shallow } from 'enzyme'; +import { noop } from './testHelpers'; -const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); +interface TestFormValues { + name: string; + email: string; +} const TestForm: React.SFC = p => ( = p => ( ); describe('A ', () => { + describe('', () => { + const makeFieldTree = (props: any, ctx: any) => + shallow(, { context: { formik: ctx } }); + + it('calls validate during onChange if present', () => { + const handleChange = jest.fn(noop); + const setFieldError = jest.fn(noop); + const validate = jest.fn(noop); + const tree = makeFieldTree( + { name: 'name', validate }, + { + handleChange, + setFieldError, + validateOnChange: true, + } + ); + tree.find('input').simulate('change', { + persist: noop, + target: { + name: 'name', + value: 'ian', + }, + }); + expect(handleChange).toHaveBeenCalled(); + expect(setFieldError).toHaveBeenCalled(); + expect(validate).toHaveBeenCalled(); + }); + + it('does NOT call validate during onChange if validateOnChange is set to false', () => { + const handleChange = jest.fn(noop); + const setFieldError = jest.fn(noop); + const validate = jest.fn(noop); + const tree = makeFieldTree( + { name: 'name', validate }, + { + handleChange, + setFieldError, + validateOnChange: false, + } + ); + tree.find('input').simulate('change', { + persist: noop, + target: { + name: 'name', + value: 'ian', + }, + }); + expect(handleChange).toHaveBeenCalled(); + expect(setFieldError).not.toHaveBeenCalled(); + expect(validate).not.toHaveBeenCalled(); + }); + + it('calls validate during onBlur if present', () => { + const handleBlur = jest.fn(noop); + const setFieldError = jest.fn(noop); + const validate = jest.fn(noop); + const tree = makeFieldTree( + { name: 'name', validate }, + { + handleBlur, + setFieldError, + validateOnBlur: true, + } + ); + tree.find('input').simulate('blur', { + persist: noop, + target: { + name: 'name', + value: 'ian', + }, + }); + expect(handleBlur).toHaveBeenCalled(); + expect(setFieldError).toHaveBeenCalled(); + expect(validate).toHaveBeenCalled(); + }); + + it('does NOT call validate during onBlur if validateOnBlur is set to false', () => { + const handleBlur = jest.fn(noop); + const setFieldError = jest.fn(noop); + const validate = jest.fn(noop); + const tree = makeFieldTree( + { name: 'name', validate }, + { + handleBlur, + setFieldError, + validateOnBlur: false, + } + ); + tree.find('input').simulate('blur', { + persist: noop, + target: { + name: 'name', + value: 'ian', + }, + }); + expect(handleBlur).toHaveBeenCalled(); + expect(setFieldError).not.toHaveBeenCalled(); + expect(validate).not.toHaveBeenCalled(); + }); + }); + describe('', () => { const node = document.createElement('div'); - const placeholder = 'First name'; + const TEXT = 'Mrs. Kato'; afterEach(() => { @@ -27,10 +131,7 @@ describe('A ', () => { }); it('renders an by default', () => { - ReactDOM.render( - } />, - node - ); + ReactDOM.render( } />, node); expect((node.firstChild as HTMLInputElement).name).toBe('name'); }); @@ -39,7 +140,7 @@ describe('A ', () => { const SuperInput = () =>

{TEXT}
; ReactDOM.render( } + render={() => } />, node ); @@ -49,9 +150,7 @@ describe('A ', () => { it('renders string components', () => { ReactDOM.render( - } - />, + } />, node ); @@ -59,13 +158,14 @@ describe('A ', () => { }); it('receives { field, form } props', () => { - let actual; - let injected; - const Component = props => (actual = props) && null; + let actual: any; /** FieldProps ;) */ + let injected: any; /** FieldProps ;) */ + const Component: React.SFC = props => + (actual = props) && null; ReactDOM.render( + render={(formikProps: FormikProps) => (injected = formikProps) && ( ) @@ -94,9 +194,7 @@ describe('A ', () => { it('renders its return value', () => { ReactDOM.render( ( -
{TEXT}
} /> - )} + render={() =>
{TEXT}
} />} />, node ); @@ -107,12 +205,12 @@ describe('A ', () => { it('receives { field, form } props', () => { ReactDOM.render( ( + render={(formikProps: FormikProps) => ( { + render={({ field, form }: FieldProps) => { const { handleBlur, handleChange } = formikProps; expect(field.name).toBe('name'); expect(field.value).toBe('jared'); @@ -170,7 +268,6 @@ describe('A ', () => { it('warns if both string component and children as a function', () => { let output = ''; - let actual; (global as any).console = { error: jest.fn(input => (output += input)), @@ -195,7 +292,8 @@ describe('A ', () => { it('warns if both non-string component and children children as a function', () => { let output = ''; let actual; - const Component = props => (actual = props) && null; + const Component: React.SFC = props => + (actual = props) && null; (global as any).console = { error: jest.fn(input => (output += input)), @@ -219,7 +317,6 @@ describe('A ', () => { it('warns if both string component and render', () => { let output = ''; - let actual; (global as any).console = { error: jest.fn(input => (output += input)), @@ -246,7 +343,8 @@ describe('A ', () => { it('warns if both non-string component and render', () => { let output = ''; let actual; - const Component = props => (actual = props) && null; + const Component: React.SFC = props => + (actual = props) && null; (global as any).console = { error: jest.fn(input => (output += input)), @@ -272,8 +370,6 @@ describe('A ', () => { it('warns if both children and render', () => { let output = ''; - let actual; - const Component = props => (actual = props) && null; (global as any).console = { error: jest.fn(input => (output += input)), @@ -307,13 +403,14 @@ describe('A ', () => { }); it('receives { field, form } props', () => { - let actual; - let injected; - const Component = props => (actual = props) && null; + let actual: any; + let injected: any; + const Component: React.SFC = props => + (actual = props) && null; ReactDOM.render( + children={(formikProps: FormikProps) => (injected = formikProps) && ( ) @@ -328,5 +425,65 @@ describe('A ', () => { expect(actual.field.value).toBe('jared'); expect(actual.form).toEqual(injected); }); + + it('can resolve bracket paths', () => { + let actual: any; + let injected: any; + const Component: React.SFC = props => + (actual = props) && null; + + ReactDOM.render( + ) => + (injected = formikProps) && ( + + ) + } + />, + node + ); + expect(actual.field.value).toBe('Surging'); + }); + + it('can resolve mixed dot and bracket paths', () => { + let actual: any; + let injected: any; + const Component: React.SFC = props => + (actual = props) && null; + + ReactDOM.render( + ) => + (injected = formikProps) && ( + + ) + } + />, + node + ); + expect(actual.field.value).toBe('Binding'); + }); + + it('can resolve mixed dot and bracket paths II', () => { + let actual: any; + let injected: any; + const Component: React.SFC = props => + (actual = props) && null; + + ReactDOM.render( + ) => + (injected = formikProps) && ( + + ) + } + />, + node + ); + expect(actual.field.value).toBe('Binding'); + }); }); }); diff --git a/test/FieldArray.test.tsx b/test/FieldArray.test.tsx new file mode 100644 index 000000000..c6bfbb51a --- /dev/null +++ b/test/FieldArray.test.tsx @@ -0,0 +1,227 @@ +import * as React from 'react'; +import * as ReactDOM from 'react-dom'; +import { FieldArray } from '../src/FieldArray'; +import { Formik } from '../src/formik'; +import { isFunction } from '../src/utils'; + +// tslint:disable-next-line:no-empty +const noop = () => {}; + +const TestForm: React.SFC = p => ( + +); + +describe('', () => { + const node = document.createElement('div'); + + afterEach(() => { + ReactDOM.unmountComponentAtNode(node); + }); + + it('renders component with array helpers as props', () => { + const TestComponent = (arrayProps: any) => { + expect(isFunction(arrayProps.push)).toBeTruthy(); + return null; + }; + + ReactDOM.render( + ( + + )} + />, + node + ); + }); + + it('renders with render callback with array helpers as props', () => { + ReactDOM.render( + ( + { + expect(isFunction(arrayProps.push)).toBeTruthy(); + return null; + }} + /> + )} + />, + node + ); + }); + + describe('props.push()', () => { + it('should add a value to the end of the field array', () => { + let formikBag: any; + let arrayHelpers: any; + ReactDOM.render( + { + formikBag = props; + return ( + { + arrayHelpers = arrayProps; + return null; + }} + /> + ); + }} + />, + node + ); + + arrayHelpers.push('jared'); + const expected = ['jared', 'andrea', 'brent', 'jared']; + expect(formikBag.values.friends).toEqual(expected); + }); + }); + + describe('props.pop()', () => { + it('should remove and return the last value from the field array', () => { + let formikBag: any; + let arrayHelpers: any; + ReactDOM.render( + { + formikBag = props; + return ( + { + arrayHelpers = arrayProps; + return null; + }} + /> + ); + }} + />, + node + ); + + const el = arrayHelpers.pop(); + const expected = ['jared', 'andrea']; + expect(formikBag.values.friends).toEqual(expected); + expect(el).toEqual('brent'); + }); + }); + + describe('props.swap()', () => { + it('should swap two values in field array', () => { + let formikBag: any; + let arrayHelpers: any; + ReactDOM.render( + { + formikBag = props; + return ( + { + arrayHelpers = arrayProps; + return null; + }} + /> + ); + }} + />, + node + ); + + arrayHelpers.swap(0, 2); + const expected = ['brent', 'andrea', 'jared']; + expect(formikBag.values.friends).toEqual(expected); + }); + }); + + describe('props.insert()', () => { + it('should insert a value at given index of field array', () => { + let formikBag: any; + let arrayHelpers: any; + ReactDOM.render( + { + formikBag = props; + return ( + { + arrayHelpers = arrayProps; + return null; + }} + /> + ); + }} + />, + node + ); + + arrayHelpers.insert(1, 'brian'); + const expected = ['jared', 'brian', 'andrea', 'brent']; + expect(formikBag.values.friends).toEqual(expected); + }); + }); + + describe('props.unshift()', () => { + it('should add a value to start of field array and return its length', () => { + let formikBag: any; + let arrayHelpers: any; + ReactDOM.render( + { + formikBag = props; + return ( + { + arrayHelpers = arrayProps; + return null; + }} + /> + ); + }} + />, + node + ); + + const el = arrayHelpers.unshift('brian'); + const expected = ['brian', 'jared', 'andrea', 'brent']; + expect(formikBag.values.friends).toEqual(expected); + expect(el).toEqual(4); + }); + }); + + describe('props.remove()', () => { + it('should remove a value at given index of field array', () => { + let formikBag: any; + let arrayHelpers: any; + ReactDOM.render( + { + formikBag = props; + return ( + { + arrayHelpers = arrayProps; + return null; + }} + /> + ); + }} + />, + node + ); + + arrayHelpers.remove(1); + const expected = ['jared', 'brent']; + expect(formikBag.values.friends).toEqual(expected); + }); + }); +}); diff --git a/test/formik.test.tsx b/test/formik.test.tsx index 8db7b8d4f..a69115750 100644 --- a/test/formik.test.tsx +++ b/test/formik.test.tsx @@ -1,22 +1,8 @@ import * as React from 'react'; -import * as renderer from 'react-test-renderer'; -import { Formik, FormikConfig, FormikProps } from '../src/formik'; -import { mount, shallow } from 'enzyme'; - -const Yup = require('yup'); - -// tslint:disable-next-line:no-empty -const noop = () => {}; - -const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); - -interface Props { - user: { - name: string; - }; - someFunction?: () => void; -} +import { Formik, FormikProps } from '../src/formik'; +import { shallow } from 'enzyme'; +import { sleep, noop } from './testHelpers'; interface Values { name: string; @@ -24,10 +10,10 @@ interface Values { const Form: React.SFC> = ({ values, + handleReset, handleSubmit, handleChange, handleBlur, - setStatus, status, errors, isSubmitting, @@ -43,12 +29,6 @@ const Form: React.SFC> = ({ /> {errors.name &&
{errors.name}
} {isSubmitting &&
Submitting
} - {status && !!status.myStatusMessage && (
{status.myStatusMessage}
@@ -62,7 +42,7 @@ const BasicForm = ( ); -describe('Formik Next', () => { +describe('', () => { it('should initialize Formik state and pass down props', () => { const tree = shallow(BasicForm); expect(tree.find(Form).props().isSubmitting).toBe(false); @@ -291,30 +271,13 @@ describe('Formik Next', () => { expect( tree + .update() .find(Form) .dive() .find('#submitting') ).toHaveLength(1); }); - // it('should correctly map form values to payload', () => { - // interface Payload { - // user: { name: string }; - // } - // const CustomPayloadForm = Formik({ - // mapPropsToValues: ({ user }) => ({ ...user }), - // mapValuesToPayload: ({ name }) => ({ user: { name } }), - // onSubmit: payload => { - // expect(payload).toEqual({ user: { name: 'jared' } }); - // expect(payload).not.toEqual({ name: 'jared' }); - // }, - // })(Form); - // const tree = shallow(); - // tree.find(Form).dive().find('form').simulate('submit', { - // preventDefault: noop, - // }); - // }); - describe('with validate (SYNC)', () => { it('should call validate if present', () => { const validate = jest.fn().mockReturnValue({}); @@ -504,10 +467,9 @@ describe('Formik Next', () => { .setValues({ name: 'ian' }); expect( tree + .update() .find(Form) - .dive() - .find('input') - .props().value + .props().values.name ).toEqual('ian'); }); @@ -555,10 +517,9 @@ describe('Formik Next', () => { .setFieldValue('name', 'ian'); expect( tree + .update() .find(Form) - .dive() - .find('input') - .props().value + .props().values.name ).toEqual('ian'); }); @@ -606,7 +567,12 @@ describe('Formik Next', () => { .find(Form) .props() .setTouched({ name: true }); - expect(tree.find(Form).props().touched).toEqual({ name: true }); + expect( + tree + .update() + .find(Form) + .props().touched + ).toEqual({ name: true }); }); it('setTouched should NOT run validations by default', async () => { @@ -651,14 +617,34 @@ describe('Formik Next', () => { .find(Form) .props() .setFieldTouched('name', true); - expect(tree.find(Form).props().touched).toEqual({ name: true }); - expect(tree.find(Form).props().dirty).toBe(true); + expect( + tree + .update() + .find(Form) + .props().touched + ).toEqual({ name: true }); + expect( + tree + .update() + .find(Form) + .props().dirty + ).toBe(false); tree .find(Form) .props() .setFieldTouched('name', false); - expect(tree.find(Form).props().touched).toEqual({ name: false }); - expect(tree.find(Form).props().dirty).toBe(false); + expect( + tree + .update() + .find(Form) + .props().touched + ).toEqual({ name: false }); + expect( + tree + .update() + .find(Form) + .props().dirty + ).toBe(false); }); it('setFieldTouched should run validations when validateOnBlur is true', async () => { @@ -704,12 +690,12 @@ describe('Formik Next', () => { .find(Form) .props() .setErrors({ name: 'Required' }); + expect( tree + .update() .find(Form) - .dive() - .find('#feedback') - .text() + .props().errors.name ).toEqual('Required'); }); @@ -721,26 +707,26 @@ describe('Formik Next', () => { .setFieldError('name', 'Required'); expect( tree + .update() .find(Form) - .dive() - .find('#feedback') - .text() + .props().errors.name ).toEqual('Required'); }); it('setStatus sets status object', async () => { const tree = shallow(BasicForm); + const status = 'status'; tree .find(Form) - .dive() - .find('#statusButton') - .simulate('click'); + .props() + .setStatus(status); + expect( tree + .update() .find(Form) - .dive() - .find('#statusMessage') - ).toHaveLength(1); + .props().status + ).toEqual(status); }); }); @@ -748,7 +734,7 @@ describe('Formik Next', () => { it('should compute dirty as soon as any input is touched', () => { const tree = shallow(BasicForm); expect(tree.find(Form).props().dirty).toBe(false); - tree.setState({ touched: { name: true } }); + tree.setState({ values: { name: 'ian' } }); expect(tree.find(Form).props().dirty).toBe(true); }); @@ -758,7 +744,7 @@ describe('Formik Next', () => { initialValues={{ name: 'jared' }} onSubmit={noop} component={Form} - isInitialValid={props => true} + isInitialValid={() => true} /> ); expect(tree.find(Form).props().dirty).toBe(false); @@ -771,7 +757,7 @@ describe('Formik Next', () => { initialValues={{ name: 'jared' }} onSubmit={noop} component={Form} - isInitialValid={props => false} + isInitialValid={() => false} /> ); expect(tree.find(Form).props().dirty).toBe(false); @@ -806,21 +792,21 @@ describe('Formik Next', () => { it('should compute isValid if the form is dirty and there are errors', () => { const tree = shallow(BasicForm); - tree.setState({ touched: { name: true }, errors: { name: 'Required!' } }); + tree.setState({ values: { name: 'ian' }, errors: { name: 'Required!' } }); expect(tree.find(Form).props().dirty).toBe(true); expect(tree.find(Form).props().isValid).toBe(false); }); it('should compute isValid if the form is dirty and there are not errors', () => { const tree = shallow(BasicForm); - tree.setState({ touched: { name: true } }); + tree.setState({ values: { name: 'ian' } }); expect(tree.find(Form).props().dirty).toBe(true); expect(tree.find(Form).props().isValid).toBe(true); }); }); describe('componentWillReceiveProps', () => { - let form, defaultForm, initialValues; + let form: any, initialValues: any; beforeEach(() => { initialValues = { name: 'formik', @@ -885,4 +871,97 @@ describe('Formik Next', () => { expect(form.resetForm).not.toHaveBeenCalled(); }); }); + + describe('handleReset', () => { + it('should call onReset with values and actions when form is reset', async () => { + const onReset = jest.fn(); + + const tree = shallow( + + ); + await tree + .find(Form) + .props() + .handleReset(); + + expect(onReset).toHaveBeenCalledWith( + { foo: 'bar', bar: 'foo' }, + expect.objectContaining({ + resetForm: expect.any(Function), + setError: expect.any(Function), + setErrors: expect.any(Function), + setFieldError: expect.any(Function), + setFieldTouched: expect.any(Function), + setFieldValue: expect.any(Function), + setStatus: expect.any(Function), + setSubmitting: expect.any(Function), + setTouched: expect.any(Function), + setValues: expect.any(Function), + submitForm: expect.any(Function), + }) + ); + }); + + it('should not error resetting form if onReset is not a prop', async () => { + const onSubmit = jest.fn(); + + const tree = shallow( + + ); + await tree + .find(Form) + .props() + .handleReset(); + + expect(true); + }); + + it('should call onReset with values and actions when onReset is a promise', async () => { + const onReset = jest.fn(() => Promise.resolve('data')); + + const tree = shallow( + + ); + + (tree.instance() as any).resetForm = jest.fn(); + + await tree + .find(Form) + .props() + .handleReset(); + + expect(onReset).toHaveBeenCalledWith( + { foo: 'bar', bar: 'foo' }, + expect.objectContaining({ + resetForm: expect.any(Function), + setError: expect.any(Function), + setErrors: expect.any(Function), + setFieldError: expect.any(Function), + setFieldTouched: expect.any(Function), + setFieldValue: expect.any(Function), + setStatus: expect.any(Function), + setSubmitting: expect.any(Function), + setTouched: expect.any(Function), + setValues: expect.any(Function), + submitForm: expect.any(Function), + }) + ); + + expect((tree.instance() as any).resetForm).toHaveBeenCalledWith('data'); + }); + }); }); diff --git a/test/setupTest.ts b/test/setupTest.ts new file mode 100644 index 000000000..82edfc9e5 --- /dev/null +++ b/test/setupTest.ts @@ -0,0 +1,4 @@ +import { configure } from 'enzyme'; +import Adapter from 'enzyme-adapter-react-16'; + +configure({ adapter: new Adapter() }); diff --git a/test/testHelpers.ts b/test/testHelpers.ts new file mode 100644 index 000000000..286c90b3c --- /dev/null +++ b/test/testHelpers.ts @@ -0,0 +1,5 @@ +// tslint:disable-next-line:no-empty +export const noop = () => {}; + +export const sleep = (ms: number) => + new Promise(resolve => setTimeout(resolve, ms)); diff --git a/test/utils.test.tsx b/test/utils.test.tsx index d83b4394c..b853691e4 100644 --- a/test/utils.test.tsx +++ b/test/utils.test.tsx @@ -23,6 +23,14 @@ describe('helpers', () => { expect(newObj).toEqual({ x: 'y', nested: { value: 'b' } }); }); + it('updates deep nested value', () => { + const obj = { x: 'y', twofoldly: { nested: { value: 'a' } } }; + const newObj = setDeep('twofoldly.nested.value', 'b', obj); + expect(obj.twofoldly.nested === newObj.twofoldly.nested).toEqual(false); // fails, same object still + expect(obj).toEqual({ x: 'y', twofoldly: { nested: { value: 'a' } } }); // fails, it's b here, too + expect(newObj).toEqual({ x: 'y', twofoldly: { nested: { value: 'b' } } }); // works ofc + }); + it('sets new array', () => { const obj = { x: 'y' }; const newObj = setDeep('nested.0', 'value', obj); @@ -32,7 +40,7 @@ describe('helpers', () => { it('updates nested array value', () => { const obj = { x: 'y', nested: ['a'] }; - const newObj = setDeep('nested.0', 'b', obj); + const newObj = setDeep('nested[0]', 'b', obj); expect(obj).toEqual({ x: 'y', nested: ['a'] }); expect(newObj).toEqual({ x: 'y', nested: ['b'] }); }); diff --git a/test/withFormik.test.tsx b/test/withFormik.test.tsx index 23ad57412..3c093753c 100644 --- a/test/withFormik.test.tsx +++ b/test/withFormik.test.tsx @@ -1,17 +1,12 @@ import * as React from 'react'; -import * as renderer from 'react-test-renderer'; import { withFormik, InjectedFormikProps } from '../src/withFormik'; import { mount, shallow } from 'enzyme'; -import { values } from '../src/utils'; -import { Formik } from '../src/formik'; - -const Yup = require('yup'); // tslint:disable-next-line:no-empty const noop = () => {}; -const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); +const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); interface Props { user: { diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..8a25621ff --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "allowSyntheticDefaultImports": true, + "declaration": true, + "declarationDir": "dist", + "emitDecoratorMetadata": false, + "experimentalDecorators": false, + "importHelpers": true, + "jsx": "react", + "lib": ["es2015", "dom"], + "module": "esnext", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "outDir": "compiled", + "pretty": true, + "removeComments": true, + "sourceMap": true, + "strict": true, + "strictNullChecks": true, + "stripInternal": true, + "target": "es5", + "typeRoots": ["node_modules/@types"] + }, + "include": ["src", "./typings.d.ts"], + "exclude": ["node_modules", "dist"] +} diff --git a/tsconfig.json b/tsconfig.json index 03e60b4e4..b6597789e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,31 +1,4 @@ { - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "declaration": true, - "declarationDir": "dist", - "emitDecoratorMetadata": false, - "experimentalDecorators": false, - "importHelpers": true, - "jsx": "react", - "lib": ["es2015", "dom"], - "module": "es2015", - "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "noImplicitThis": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "outDir": "compiled", - "pretty": true, - "removeComments": true, - "sourceMap": true, - "strict": true, - "strictNullChecks": true, - "stripInternal": true, - "target": "es5", - "typeRoots": ["node_modules/@types"] - }, - "include": ["src", "./typings.d.ts"], - "exclude": ["node_modules", "dist"] + "extends": "./tsconfig.base.json", + "include": ["src", "./typings.d.ts", "test"] } diff --git a/yarn.lock b/yarn.lock index 7b083b1ef..9cbae80ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,44 +2,19 @@ # yarn lockfile v1 -"@types/babel-core@^6.7.14": - version "6.25.0" - resolved "https://registry.yarnpkg.com/@types/babel-core/-/babel-core-6.25.0.tgz#e6439b193c3644cf3fbd24b05620876f76017313" - dependencies: - "@types/babel-template" "*" - "@types/babel-traverse" "*" - "@types/babel-types" "*" - -"@types/babel-template@*": - version "6.25.0" - resolved "https://registry.yarnpkg.com/@types/babel-template/-/babel-template-6.25.0.tgz#2505d7b55b88f821d98048b4fdf07b3b22563d30" - dependencies: - "@types/babel-types" "*" - "@types/babylon" "*" - -"@types/babel-traverse@*": - version "6.25.0" - resolved "https://registry.yarnpkg.com/@types/babel-traverse/-/babel-traverse-6.25.0.tgz#fff48b65c7ce77072d567ec9b400fd55b206b337" - dependencies: - "@types/babel-types" "*" - -"@types/babel-types@*": - version "6.25.1" - resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-6.25.1.tgz#ce8f126a4403e11e1b0033a424f11638afac7889" +"@types/cheerio@*": + version "0.22.6" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.6.tgz#ad8c630a942efe3fc59165857851b55f95de2d50" -"@types/babylon@*": - version "6.16.2" - resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.2.tgz#062ce63b693d9af1c246f5aedf928bc9c30589c8" +"@types/enzyme-adapter-react-16@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.1.tgz#cb93338ccf6cd1b8fdda91027c4ffe56583537b5" dependencies: - "@types/babel-types" "*" - -"@types/cheerio@*": - version "0.22.2" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.2.tgz#539625874bc856086ad491c2fdc9b10c05ae308e" + "@types/enzyme" "*" -"@types/enzyme@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-2.8.4.tgz#0a75487091978a77178920fa0437c0f13a8e2dcd" +"@types/enzyme@*", "@types/enzyme@3.1.5": + version "3.1.5" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.1.5.tgz#6cc31d7f7e552209e244a45d89279f4def4aaade" dependencies: "@types/cheerio" "*" "@types/react" "*" @@ -48,15 +23,31 @@ version "20.0.6" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-20.0.6.tgz#7e0ba76ddfacb42ee9bb0d8833e5208cf0680431" +"@types/lodash.clonedeep@^4.5.3": + version "4.5.3" + resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.3.tgz#d42cfba3d929a4e1177a775142ce2a9444e384cf" + dependencies: + "@types/lodash" "*" + "@types/lodash.isequal@4.5.2": version "4.5.2" resolved "https://registry.yarnpkg.com/@types/lodash.isequal/-/lodash.isequal-4.5.2.tgz#adbdff67f7c956ed703009e5466a34eeddb0b712" dependencies: "@types/lodash" "*" +"@types/lodash.topath@4.5.3": + version "4.5.3" + resolved "https://registry.yarnpkg.com/@types/lodash.topath/-/lodash.topath-4.5.3.tgz#87de9823f4b8702a77ac927954c0dd4cafa496b5" + dependencies: + "@types/lodash" "*" + "@types/lodash@*": - version "4.14.76" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.76.tgz#87874f766774d54e89589697340be9496fb8bf70" + version "4.14.88" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.88.tgz#97eaf2dc668f33ed8e511a5b627035f4ea20b0f5" + +"@types/node@*": + version "8.0.57" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.57.tgz#e5d8b4dc112763e35cfc51988f4f38da3c486d99" "@types/node@8.0.19": version "8.0.19" @@ -66,10 +57,11 @@ version "15.5.1" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.5.1.tgz#1ecf52621299e65b855374337fb11fd2d1066fc1" -"@types/react-dom@15.5.1": - version "15.5.1" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-15.5.1.tgz#f3c3e14c682785923c7d64583537df319442dec1" +"@types/react-dom@16.0.3": + version "16.0.3" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.0.3.tgz#8accad7eabdab4cca3e1a56f5ccb57de2da0ff64" dependencies: + "@types/node" "*" "@types/react" "*" "@types/react-test-renderer@15.5.2": @@ -78,17 +70,21 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.0.tgz#fec7e6302e11c1cd307129d8ce1e6d5dca4a0283" +"@types/react@*", "@types/react@16.0.28": + version "16.0.28" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.28.tgz#eb0b31272528da8f20477ec27569c4f767315b33" "@types/warning@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" acorn-globals@^3.1.0: version "3.1.0" @@ -107,6 +103,15 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.1.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.1.tgz#b38bb8876d9e86bee994956a04e721e88b248eb2" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -116,15 +121,16 @@ align-text@^0.1.1, align-text@^0.1.3: repeat-string "^1.5.2" all-contributors-cli@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-4.4.0.tgz#174f1295c9735c3f9299439a22c415d542dee850" + version "4.10.0" + resolved "https://registry.yarnpkg.com/all-contributors-cli/-/all-contributors-cli-4.10.0.tgz#262a747a50a353bb95eba1df0b1a383e5acb6b60" dependencies: async "^2.0.0-rc.1" - inquirer "^3.0.1" + chalk "^2.3.0" + inquirer "^4.0.0" lodash "^4.11.2" - pify "^2.3.0" + pify "^3.0.0" request "^2.72.0" - yargs "^4.7.0" + yargs "^10.0.3" amdefine@>=0.0.4: version "1.0.1" @@ -142,15 +148,15 @@ ansi-align@^2.0.0: dependencies: string-width "^2.0.0" -ansi-escapes@^1.0.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-escapes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" -ansi-regex@^2.0.0, ansi-regex@^2.1.1: +ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -162,7 +168,7 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.0.0, ansi-styles@^3.1.0: +ansi-styles@^3.1.0, ansi-styles@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: @@ -185,6 +191,17 @@ append-transform@^0.4.0: dependencies: default-require-extensions "^1.0.0" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" @@ -205,6 +222,18 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -229,13 +258,21 @@ assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.0.0-rc.1, async@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" @@ -251,53 +288,57 @@ aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" -aws4@^1.2.1: +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: - chalk "^1.1.0" + chalk "^1.1.3" esutils "^2.0.2" - js-tokens "^3.0.0" + js-tokens "^3.0.2" -babel-core@^6.0.0, babel-core@^6.24.1: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.25.0.tgz#7dd42b0463c742e9d5296deb3ec67a9322dad729" +babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.25.0" + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" babel-helpers "^6.24.1" babel-messages "^6.23.0" - babel-register "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.25.0" - babel-traverse "^6.25.0" - babel-types "^6.25.0" - babylon "^6.17.2" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" slash "^1.0.0" - source-map "^0.5.0" + source-map "^0.5.6" -babel-generator@^6.18.0, babel-generator@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.25.0.tgz#33a1af70d5f2890aeb465a4a7793c1df6a9ea9fc" +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.25.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" detect-indent "^4.0.0" jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" + lodash "^4.17.4" + source-map "^0.5.6" trim-right "^1.0.1" babel-helpers@^6.24.1: @@ -307,13 +348,12 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671" +babel-jest@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e" dependencies: - babel-core "^6.0.0" babel-plugin-istanbul "^4.0.0" - babel-preset-jest "^20.0.3" + babel-preset-jest "^21.2.0" babel-messages@^6.23.0: version "6.23.0" @@ -322,25 +362,29 @@ babel-messages@^6.23.0: babel-runtime "^6.22.0" babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz#18dde84bf3ce329fddf3f4103fae921456d8e587" + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: find-up "^2.1.0" - istanbul-lib-instrument "^1.7.2" + istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" -babel-plugin-jest-hoist@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767" +babel-plugin-jest-hoist@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" + +babel-plugin-syntax-object-rest-spread@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" @@ -349,67 +393,68 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-preset-jest@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a" +babel-preset-jest@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638" dependencies: - babel-plugin-jest-hoist "^20.0.3" + babel-plugin-jest-hoist "^21.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" -babel-register@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: - babel-core "^6.24.1" - babel-runtime "^6.22.0" - core-js "^2.4.0" + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" home-or-tmp "^2.0.0" - lodash "^4.2.0" + lodash "^4.17.4" mkdirp "^0.5.1" - source-map-support "^0.4.2" + source-map-support "^0.4.15" -babel-runtime@^6.22.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.25.0.tgz#33b98eaa5d482bb01a8d1aa6b437ad2b01aec41c" +babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" - regenerator-runtime "^0.10.0" + regenerator-runtime "^0.11.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.25.0.tgz#665241166b7c2aa4c619d71e192969552b10c071" +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.25.0" - babel-types "^6.25.0" - babylon "^6.17.2" - lodash "^4.2.0" + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" +babel-traverse@^6.18.0, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: - babel-code-frame "^6.22.0" + babel-code-frame "^6.26.0" babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-types "^6.25.0" - babylon "^6.17.2" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" -babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.25.0: - version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" +babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: - babel-runtime "^6.22.0" + babel-runtime "^6.26.0" esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" + lodash "^4.17.4" + to-fast-properties "^1.0.3" -babylon@^6.17.2, babylon@^6.17.4: - version "6.17.4" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" bail@^1.0.0: version "1.0.2" @@ -425,6 +470,16 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -435,13 +490,25 @@ boom@2.x.x: dependencies: hoek "2.x.x" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + boundary@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/boundary/-/boundary-1.0.1.tgz#4d67dc2602c0cc16dd9bce7ebf87e948290f5812" boxen@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.1.tgz#0f11e7fe344edb9397977fc13ede7f64d956481d" + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -449,7 +516,7 @@ boxen@^1.1.0: cli-boxes "^1.0.0" string-width "^2.0.0" term-size "^1.2.0" - widest-line "^1.0.0" + widest-line "^2.0.0" brace-expansion@^1.1.7: version "1.1.8" @@ -472,12 +539,6 @@ browser-resolve@^1.11.0, browser-resolve@^1.11.2: dependencies: resolve "1.1.7" -bser@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" - dependencies: - node-int64 "^0.4.0" - bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -496,17 +557,13 @@ camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" case@^1.2.1: - version "1.5.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.5.3.tgz#b201631ac42e6e5b41b8baaf46f25006676e15c6" + version "1.5.4" + resolved "https://registry.yarnpkg.com/case/-/case-1.5.4.tgz#b201642aae9e374feb5750d1181a76850153830c" caseless@~0.12.0: version "0.12.0" @@ -523,7 +580,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -533,17 +590,9 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chalk@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.0.1.tgz#dbec49436d2ae15f536114e76d14656cdbc0f44d" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" @@ -565,30 +614,39 @@ character-reference-invalid@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" entities "~1.1.1" htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" + lodash "^4.15.0" + parse5 "^3.0.1" + +chokidar@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" + version "1.1.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4" cli-boxes@^1.0.0: version "1.0.0" @@ -650,8 +708,8 @@ collapse-white-space@^1.0.0: resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: color-name "^1.1.1" @@ -659,6 +717,10 @@ color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" +colors@0.5.x: + version "0.5.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" + colors@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -669,29 +731,33 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@^2.9.0, commander@~2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" +commander@^2.9.0, commander@~2.12.1: + version "2.12.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" -convert-source-map@^1.1.0, convert-source-map@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +convert-source-map@^1.4.0, convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.2.tgz#bc4648656e7dc9dc80d7d3c7bbc172d96e744e63" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -710,13 +776,21 @@ cosmiconfig@^1.1.0: pinkie-promise "^2.0.0" require-from-string "^1.1.0" -create-react-class@^15.6.0: - version "15.6.0" - resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" +cpx@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - object-assign "^4.1.1" + babel-runtime "^6.9.2" + chokidar "^1.6.0" + duplexer "^0.1.1" + glob "^7.0.5" + glob2base "^0.0.12" + minimatch "^3.0.2" + mkdirp "^0.5.1" + resolve "^1.1.7" + safe-buffer "^5.0.1" + shell-quote "^1.6.1" + subarg "^1.0.0" cross-env@5.0.5: version "5.0.5" @@ -739,6 +813,12 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -769,12 +849,18 @@ dashdash@^1.12.0: assert-plus "^1.0.0" date-fns@^1.27.2: - version "1.28.5" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" -debug@^2.1.1, debug@^2.1.3, debug@^2.2.0, debug@^2.6.3: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" +debug@^2.1.3, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" @@ -782,12 +868,20 @@ decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + deep-assign@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-2.0.0.tgz#ebe06b1f07f08dae597620e3dd1622f371a1c572" dependencies: is-obj "^1.0.0" +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -809,15 +903,27 @@ delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" dependencies: repeating "^2.0.0" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + diff@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" doctoc@^1.3.0: version "1.3.0" @@ -851,13 +957,20 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domutils@1.5.1, domutils@^1.5.1: +domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" dependencies: dom-serializer "0" domelementtype "1" +domutils@^1.5.1: + version "1.6.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -886,26 +999,46 @@ entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -enzyme@2.9.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.9.1.tgz#07d5ce691241240fb817bf2c4b18d6e530240df6" +enzyme-adapter-react-16@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.0.tgz#86c5db7c10f0be6ec25d54ca41b59f2abb397cf4" dependencies: - cheerio "^0.22.0" - function.prototype.name "^1.0.0" + enzyme-adapter-utils "^1.1.0" + lodash "^4.17.4" + object.assign "^4.0.4" + object.values "^1.0.4" + prop-types "^15.5.10" + react-test-renderer "^16.0.0-0" + +enzyme-adapter-utils@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.2.0.tgz#7f4471ee0a70b91169ec8860d2bf0a6b551664b2" + dependencies: + lodash "^4.17.4" + object.assign "^4.0.4" + prop-types "^15.5.10" + +enzyme@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.2.0.tgz#998bdcda0fc71b8764a0017f7cc692c943f54a7a" + dependencies: + cheerio "^1.0.0-rc.2" + function.prototype.name "^1.0.3" + has "^1.0.1" is-subset "^0.1.1" lodash "^4.17.4" object-is "^1.0.1" object.assign "^4.0.4" object.entries "^1.0.4" object.values "^1.0.4" - prop-types "^15.5.10" - uuid "^3.0.1" + raf "^3.4.0" + rst-selector-parser "^2.2.3" errno@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + version "0.1.5" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.5.tgz#a563781a6052bc2c9ccd89e8cef0eb9506e0c321" dependencies: - prr "~0.0.0" + prr "~1.0.1" error-ex@^1.2.0: version "1.3.1" @@ -914,11 +1047,11 @@ error-ex@^1.2.0: is-arrayish "^0.2.1" es-abstract@^1.6.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: es-to-primitive "^1.1.1" - function-bind "^1.1.0" + function-bind "^1.1.1" has "^1.0.1" is-callable "^1.1.3" is-regex "^1.0.4" @@ -936,27 +1069,27 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" + esprima "^3.1.3" + estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.2.0" + source-map "~0.5.6" -esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" +estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" estree-walker@^0.2.1: version "0.2.1" @@ -983,8 +1116,8 @@ event-stream@~3.3.0: through "~2.3.1" exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + version "0.2.1" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" dependencies: merge "^1.1.3" @@ -1016,17 +1149,28 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -extend@^3.0.0, extend@~3.0.0: +expect@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-21.2.1.tgz#003ac2ac7005c3c29e73b38a272d4afadd6d1d7b" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^21.2.1" + jest-get-type "^21.2.0" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + +extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" -external-editor@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" +external-editor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" dependencies: + chardet "^0.4.0" iconv-lite "^0.4.17" - jschardet "^1.4.2" - tmp "^0.0.31" + tmp "^0.0.33" extglob@^0.3.1: version "0.3.2" @@ -1034,29 +1178,35 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" -extsprintf@1.3.0, extsprintf@^1.2.0: +extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -fb-watchman@^1.8.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" - dependencies: - bser "1.0.2" - fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" dependencies: bser "^2.0.0" -fbjs@^0.8.9: - version "0.8.14" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" +fbjs@^0.8.16: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -1091,8 +1241,8 @@ fileset@^2.0.2: minimatch "^3.0.3" filesize@^3.5.6: - version "3.5.10" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.10.tgz#fc8fa23ddb4ef9e5e0ab6e1e64f679a24a56761f" + version "3.5.11" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" fill-range@^2.1.0: version "2.2.3" @@ -1104,6 +1254,10 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1147,27 +1301,59 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" -fs-extra@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880" +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: graceful-fs "^4.1.2" - jsonfile "^3.0.0" + jsonfile "^4.0.0" universalify "^0.1.0" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -function-bind@^1.0.2, function-bind@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +fsevents@^1.0.0, fsevents@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" -function.prototype.name@^1.0.0: +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +function.prototype.name@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac" dependencies: @@ -1175,6 +1361,19 @@ function.prototype.name@^1.0.0: function-bind "^1.1.0" is-callable "^1.1.3" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -1202,7 +1401,13 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -1213,7 +1418,7 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.0.0: +globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -1232,8 +1437,8 @@ gzip-size@^3.0.0: duplexer "^0.1.1" handlebars@^4.0.3: - version "4.0.10" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" dependencies: async "^1.4.0" optimist "^0.6.1" @@ -1245,6 +1450,10 @@ har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -1252,6 +1461,13 @@ har-validator@~4.2.1: ajv "^4.9.1" har-schema "^1.0.5" +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1266,13 +1482,17 @@ has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: function-bind "^1.0.2" -hawk@~3.1.3: +hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -1281,10 +1501,23 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -1297,8 +1530,8 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: whatwg-encoding "^1.0.1" @@ -1321,6 +1554,14 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + husky@0.14.3: version "0.14.3" resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" @@ -1329,13 +1570,13 @@ husky@0.14.3: normalize-path "^1.0.0" strip-indent "^2.0.0" -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@^0.4.17, iconv-lite@~0.4.13: - version "0.4.18" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" indent-string@^2.1.0: version "2.1.0" @@ -1354,19 +1595,23 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -inquirer@^3.0.1: - version "3.2.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.2.3.tgz#1c7b1731cf77b934ec47d22c9ac5aa8fe7fbe095" +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-4.0.1.tgz#b25cd541789394b4bb56f6440fb213b121149096" dependencies: - ansi-escapes "^2.0.0" + ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^2.1.0" figures "^2.0.0" lodash "^4.3.0" mute-stream "0.0.7" @@ -1377,7 +1622,7 @@ inquirer@^3.0.1: strip-ansi "^4.0.0" through "^2.3.6" -invariant@^2.2.0: +invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -1402,9 +1647,15 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + is-buffer@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-builtin-module@^1.0.0: version "1.0.0" @@ -1562,17 +1813,17 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.1: - version "1.1.11" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.11.tgz#fcc0b461e2b3bda71e305155138238768257d9de" + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" dependencies: async "^2.1.4" fileset "^2.0.2" istanbul-lib-coverage "^1.1.1" - istanbul-lib-hook "^1.0.7" - istanbul-lib-instrument "^1.7.4" - istanbul-lib-report "^1.1.1" - istanbul-lib-source-maps "^1.2.1" - istanbul-reports "^1.1.1" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.1" + istanbul-lib-report "^1.1.2" + istanbul-lib-source-maps "^1.2.2" + istanbul-reports "^1.1.3" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" @@ -1581,267 +1832,281 @@ istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" -istanbul-lib-hook@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.2, istanbul-lib-instrument@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz#e9fd920e4767f3d19edc765e2d6b3f5ccbd0eea8" +istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" - babylon "^6.17.4" + babylon "^6.18.0" istanbul-lib-coverage "^1.1.1" semver "^5.3.0" -istanbul-lib-report@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" +istanbul-lib-report@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" dependencies: istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" dependencies: - debug "^2.6.3" + debug "^3.1.0" istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.1.tgz#042be5c89e175bc3f86523caab29c014e77fee4e" +istanbul-reports@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" dependencies: handlebars "^4.0.3" -jest-changed-files@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8" +jest-changed-files@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29" + dependencies: + throat "^4.0.0" -jest-cli@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93" +jest-cli@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.2.1.tgz#9c528b6629d651911138d228bdb033c157ec8c00" dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.3" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + glob "^7.1.2" graceful-fs "^4.1.11" is-ci "^1.0.10" istanbul-api "^1.1.1" istanbul-lib-coverage "^1.0.1" istanbul-lib-instrument "^1.4.2" istanbul-lib-source-maps "^1.1.0" - jest-changed-files "^20.0.3" - jest-config "^20.0.4" - jest-docblock "^20.0.3" - jest-environment-jsdom "^20.0.3" - jest-haste-map "^20.0.4" - jest-jasmine2 "^20.0.4" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve-dependencies "^20.0.3" - jest-runtime "^20.0.4" - jest-snapshot "^20.0.3" - jest-util "^20.0.3" + jest-changed-files "^21.2.0" + jest-config "^21.2.1" + jest-environment-jsdom "^21.2.1" + jest-haste-map "^21.2.0" + jest-message-util "^21.2.1" + jest-regex-util "^21.2.0" + jest-resolve-dependencies "^21.2.0" + jest-runner "^21.2.1" + jest-runtime "^21.2.1" + jest-snapshot "^21.2.1" + jest-util "^21.2.1" micromatch "^2.3.11" node-notifier "^5.0.2" - pify "^2.3.0" + pify "^3.0.0" slash "^1.0.0" - string-length "^1.0.1" - throat "^3.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" which "^1.2.12" worker-farm "^1.3.1" - yargs "^7.0.2" + yargs "^9.0.0" -jest-config@^20.0.0, jest-config@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea" +jest-config@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.2.1.tgz#c7586c79ead0bcc1f38c401e55f964f13bf2a480" dependencies: - chalk "^1.1.3" + chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^20.0.3" - jest-environment-node "^20.0.3" - jest-jasmine2 "^20.0.4" - jest-matcher-utils "^20.0.3" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-validate "^20.0.3" - pretty-format "^20.0.3" - -jest-diff@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617" + jest-environment-jsdom "^21.2.1" + jest-environment-node "^21.2.1" + jest-get-type "^21.2.0" + jest-jasmine2 "^21.2.1" + jest-regex-util "^21.2.0" + jest-resolve "^21.2.0" + jest-util "^21.2.1" + jest-validate "^21.2.1" + pretty-format "^21.2.1" + +jest-diff@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" dependencies: - chalk "^1.1.3" + chalk "^2.0.1" diff "^3.2.0" - jest-matcher-utils "^20.0.3" - pretty-format "^20.0.3" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" -jest-docblock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712" +jest-docblock@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -jest-environment-jsdom@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99" +jest-environment-jsdom@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz#38d9980c8259b2a608ec232deee6289a60d9d5b4" dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" + jest-mock "^21.2.0" + jest-util "^21.2.1" jsdom "^9.12.0" -jest-environment-node@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403" +jest-environment-node@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8" dependencies: - jest-mock "^20.0.3" - jest-util "^20.0.3" + jest-mock "^21.2.0" + jest-util "^21.2.1" -jest-haste-map@^20.0.4: - version "20.0.5" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112" +jest-get-type@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + +jest-haste-map@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" - jest-docblock "^20.0.3" + jest-docblock "^21.2.0" micromatch "^2.3.11" - sane "~1.6.0" + sane "^2.0.0" worker-farm "^1.3.1" -jest-jasmine2@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1" - dependencies: - chalk "^1.1.3" - graceful-fs "^4.1.11" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-matchers "^20.0.3" - jest-message-util "^20.0.3" - jest-snapshot "^20.0.3" - once "^1.4.0" - p-map "^1.1.1" - -jest-matcher-utils@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612" +jest-jasmine2@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz#9cc6fc108accfa97efebce10c4308548a4ea7592" dependencies: - chalk "^1.1.3" - pretty-format "^20.0.3" + chalk "^2.0.1" + expect "^21.2.1" + graceful-fs "^4.1.11" + jest-diff "^21.2.1" + jest-matcher-utils "^21.2.1" + jest-message-util "^21.2.1" + jest-snapshot "^21.2.1" + p-cancelable "^0.3.0" -jest-matchers@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60" +jest-matcher-utils@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" dependencies: - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-message-util "^20.0.3" - jest-regex-util "^20.0.3" + chalk "^2.0.1" + jest-get-type "^21.2.0" + pretty-format "^21.2.1" -jest-message-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c" +jest-message-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" dependencies: - chalk "^1.1.3" + chalk "^2.0.1" micromatch "^2.3.11" slash "^1.0.0" -jest-mock@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59" +jest-mock@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f" -jest-regex-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762" +jest-regex-util@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530" -jest-resolve-dependencies@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a" +jest-resolve-dependencies@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09" dependencies: - jest-regex-util "^20.0.3" + jest-regex-util "^21.2.0" -jest-resolve@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5" +jest-resolve@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.2.0.tgz#068913ad2ba6a20218e5fd32471f3874005de3a6" dependencies: browser-resolve "^1.11.2" + chalk "^2.0.1" is-builtin-module "^1.0.0" - resolve "^1.3.2" -jest-runtime@^20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8" +jest-runner@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467" + dependencies: + jest-config "^21.2.1" + jest-docblock "^21.2.0" + jest-haste-map "^21.2.0" + jest-jasmine2 "^21.2.1" + jest-message-util "^21.2.1" + jest-runtime "^21.2.1" + jest-util "^21.2.1" + pify "^3.0.0" + throat "^4.0.0" + worker-farm "^1.3.1" + +jest-runtime@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.2.1.tgz#99dce15309c670442eee2ebe1ff53a3cbdbbb73e" dependencies: babel-core "^6.0.0" - babel-jest "^20.0.3" + babel-jest "^21.2.0" babel-plugin-istanbul "^4.0.0" - chalk "^1.1.3" + chalk "^2.0.1" convert-source-map "^1.4.0" graceful-fs "^4.1.11" - jest-config "^20.0.4" - jest-haste-map "^20.0.4" - jest-regex-util "^20.0.3" - jest-resolve "^20.0.4" - jest-util "^20.0.3" + jest-config "^21.2.1" + jest-haste-map "^21.2.0" + jest-regex-util "^21.2.0" + jest-resolve "^21.2.0" + jest-util "^21.2.1" json-stable-stringify "^1.0.1" micromatch "^2.3.11" + slash "^1.0.0" strip-bom "3.0.0" - yargs "^7.0.2" + write-file-atomic "^2.1.0" + yargs "^9.0.0" -jest-snapshot@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566" +jest-snapshot@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.2.1.tgz#29e49f16202416e47343e757e5eff948c07fd7b0" dependencies: - chalk "^1.1.3" - jest-diff "^20.0.3" - jest-matcher-utils "^20.0.3" - jest-util "^20.0.3" + chalk "^2.0.1" + jest-diff "^21.2.1" + jest-matcher-utils "^21.2.1" + mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^20.0.3" + pretty-format "^21.2.1" -jest-util@^20.0.0, jest-util@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad" +jest-util@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78" dependencies: - chalk "^1.1.3" + callsites "^2.0.0" + chalk "^2.0.1" graceful-fs "^4.1.11" - jest-message-util "^20.0.3" - jest-mock "^20.0.3" - jest-validate "^20.0.3" - leven "^2.1.0" + jest-message-util "^21.2.1" + jest-mock "^21.2.0" + jest-validate "^21.2.1" mkdirp "^0.5.1" -jest-validate@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab" +jest-validate@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" dependencies: - chalk "^1.1.3" - jest-matcher-utils "^20.0.3" + chalk "^2.0.1" + jest-get-type "^21.2.0" leven "^2.1.0" - pretty-format "^20.0.3" + pretty-format "^21.2.1" -jest@20.0.4: - version "20.0.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac" +jest@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-21.2.1.tgz#c964e0b47383768a1438e3ccf3c3d470327604e1" dependencies: - jest-cli "^20.0.4" + jest-cli "^21.2.1" -js-tokens@^3.0.0: +js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@^3.4.3, js-yaml@^3.7.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -1850,10 +2115,6 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jschardet@^1.4.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.5.1.tgz#c519f629f86b3a5bedba58a88d311309eec097f9" - jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -1882,6 +2143,10 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -1896,13 +2161,13 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json5@^0.5.0: +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" optionalDependencies: graceful-fs "^4.1.6" @@ -1984,8 +2249,8 @@ listr-update-renderer@^0.2.0: strip-ansi "^3.0.1" listr-verbose-renderer@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" dependencies: chalk "^1.1.3" cli-cursor "^1.0.2" @@ -2039,67 +2304,27 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - lodash.chunk@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" -lodash.flatten@^4.2.0: +lodash.flattendeep@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" lodash.isequal@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - -lodash.merge@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" +lodash.topath@4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.topath/-/lodash.topath-4.5.2.tgz#3616351f3bba61994a0931989660bd03254fd009" -lodash@^4.11.2, lodash@^4.14.0, lodash@^4.17.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: +lodash@^4.11.2, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.4, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -2200,15 +2425,15 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -mime-db@~1.29.0: - version "1.29.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.16" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: - mime-db "~1.29.0" + mime-db "~1.30.0" mimic-fn@^1.0.0: version "1.1.0" @@ -2220,15 +2445,19 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8, minimist@~0.0.1: +minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@^0.5.1: +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +"mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -2242,13 +2471,25 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" +nan@^2.3.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +nearley@^2.7.10: + version "2.11.0" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae" + dependencies: + nomnom "~1.6.2" + railroad-diagrams "^1.0.0" + randexp "^0.4.2" + node-fetch@^1.0.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.1.tgz#899cb3d0a3c92f952c47f1b876f4c8aeabd400d5" + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -2266,6 +2507,36 @@ node-notifier@^5.0.2: shellwords "^0.1.0" which "^1.2.12" +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nomnom@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" + dependencies: + colors "0.5.x" + underscore "~1.4.4" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" @@ -2305,6 +2576,15 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" @@ -2316,10 +2596,10 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" "nwmatcher@>= 1.3.9 < 2.0.0": - version "1.4.1" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" -oauth-sign@~0.8.1: +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -2415,12 +2695,6 @@ os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -2429,10 +2703,21 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -2448,8 +2733,8 @@ p-locate@^2.0.0: p-limit "^1.1.0" p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" parse-entities@^1.0.2: version "1.1.1" @@ -2481,6 +2766,12 @@ parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + dependencies: + "@types/node" "*" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -2491,7 +2782,7 @@ path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2527,10 +2818,18 @@ performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" -pify@^2.0.0, pify@^2.3.0: +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -2556,19 +2855,19 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" prettier@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" + version "1.9.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.9.1.tgz#41638a0d47c1efbd1b7d5a742aaa5548eab86d70" -pretty-format@^20.0.3: - version "20.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14" +pretty-format@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" dependencies: - ansi-regex "^2.1.1" - ansi-styles "^3.0.0" + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" -private@^0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" process-nextick-args@~1.0.6: version "1.0.7" @@ -2580,20 +2879,21 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.10: - version "15.5.10" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" +prop-types@^15.5.10, prop-types@^15.6.0: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: - fbjs "^0.8.9" + fbjs "^0.8.16" loose-envify "^1.3.1" + object-assign "^4.1.1" property-expr@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.3.1.tgz#53f4af8ecd3c6db00ed98b8e0f6affbe880faa0a" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" ps-tree@^1.1.0: version "1.1.0" @@ -2613,6 +2913,27 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +raf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + +randexp@^0.4.2: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -2620,31 +2941,40 @@ randomatic@^1.1.3: is-number "^3.0.0" kind-of "^4.0.0" -react-dom@15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.1.tgz#2cb0ed4191038e53c209eb3a79a23e2a4cf99470" +rc@^1.1.7: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dom@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" dependencies: - fbjs "^0.8.9" + fbjs "^0.8.16" loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.10" + object-assign "^4.1.1" + prop-types "^15.6.0" -react-test-renderer@15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-15.6.1.tgz#026f4a5bb5552661fd2cc4bbcd0d4bc8a35ebf7e" +react-test-renderer@^16.0.0-0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.2.0.tgz#bddf259a6b8fcd8555f012afc8eacc238872a211" dependencies: - fbjs "^0.8.9" - object-assign "^4.1.0" + fbjs "^0.8.16" + object-assign "^4.1.1" + prop-types "^15.6.0" -react@15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/react/-/react-15.6.1.tgz#baa8434ec6780bde997cdc380b79cd33b96393df" +react@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" dependencies: - create-react-class "^15.6.0" - fbjs "^0.8.9" + fbjs "^0.8.16" loose-envify "^1.1.0" - object-assign "^4.1.0" - prop-types "^15.5.10" + object-assign "^4.1.1" + prop-types "^15.6.0" read-pkg-up@^1.0.1: version "1.0.1" @@ -2676,7 +3006,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.2: +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -2688,16 +3018,24 @@ readable-stream@^2.0.2: string_decoder "~1.0.3" util-deprecate "~1.0.1" -regenerator-runtime@^0.10.0: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" remark-parse@^1.1.0: version "1.1.0" @@ -2735,8 +3073,8 @@ remark@^5.0.1: unified "^4.1.1" remove-trailing-separator@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" repeat-element@^1.1.2: version "1.1.2" @@ -2752,7 +3090,7 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.72.0, request@^2.79.0: +request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -2779,6 +3117,33 @@ request@^2.72.0, request@^2.79.0: tunnel-agent "^0.6.0" uuid "^3.0.0" +request@^2.72.0, request@^2.79.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2800,8 +3165,8 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" @@ -2819,13 +3184,23 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" -rimraf@2.6.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rimraf@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -2901,6 +3276,13 @@ rollup@0.45.2: dependencies: source-map-support "^0.4.0" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -2918,26 +3300,28 @@ rx-lite@*, rx-lite@^4.0.8: resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" rxjs@^5.0.0-beta.11: - version "5.4.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.2.tgz#2a3236fcbf03df57bae06fd6972fd99e5c08fcf7" + version "5.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.5.tgz#e164f11d38eaf29f56f08c3447f74ff02dd84e97" dependencies: - symbol-observable "^1.0.1" + symbol-observable "1.0.1" -safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -sane@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" +sane@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56" dependencies: anymatch "^1.3.0" exec-sh "^0.2.0" - fb-watchman "^1.8.0" + fb-watchman "^2.0.0" minimatch "^3.0.2" minimist "^1.1.1" walker "~1.0.5" - watch "~0.10.0" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.1.1" sax@^1.2.1: version "1.2.4" @@ -2947,10 +3331,14 @@ sax@^1.2.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -set-blocking@^2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -2965,9 +3353,18 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" +shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" @@ -2987,21 +3384,34 @@ sntp@1.x.x: dependencies: hoek "2.x.x" +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + source-map-resolve@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.0.tgz#fcad0b64b70afb27699e425950cb5ebcd410bc20" + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" dependencies: atob "^2.0.0" + decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.0, source-map-support@^0.4.2, source-map-support@^0.4.4: - version "0.4.15" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" +source-map-support@^0.4.0, source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" +source-map-support@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab" + dependencies: + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -3012,15 +3422,13 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" +source-map@^0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" spdx-correct@~1.0.0: version "1.0.2" @@ -3074,11 +3482,12 @@ stream-to-observable@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" -string-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" dependencies: - strip-ansi "^3.0.0" + astral-regex "^1.0.0" + strip-ansi "^4.0.0" string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" @@ -3088,7 +3497,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -3110,7 +3519,7 @@ stringify-entities@^1.0.1: is-alphanumerical "^1.0.0" is-hexadecimal "^1.0.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -3144,12 +3553,22 @@ strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + structured-source@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/structured-source/-/structured-source-3.0.2.tgz#dd802425e0f53dc4a6e7aca3752901a1ccda7af5" dependencies: boundary "^1.0.1" +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -3161,19 +3580,40 @@ supports-color@^3.1.2: has-flag "^1.0.0" supports-color@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.2.1.tgz#65a4bb2631e90e02420dba5554c375a4754bb836" + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: has-flag "^2.0.0" -symbol-observable@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -3190,25 +3630,25 @@ test-exclude@^4.1.1: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" -throat@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836" +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" through@2, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -tmp@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: - os-tmpdir "~1.0.1" + os-tmpdir "~1.0.2" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" -to-fast-properties@^1.0.1: +to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -3216,9 +3656,9 @@ toposort@^0.2.10: version "0.2.12" resolved "https://registry.yarnpkg.com/toposort/-/toposort-0.2.12.tgz#c7d2984f3d48c217315cc32d770888b779491e81" -tough-cookie@^2.3.2, tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" @@ -3246,21 +3686,20 @@ trough@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" -ts-jest@20.0.9: - version "20.0.9" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-20.0.9.tgz#b09a3060f18bc9206e0c5ebc7b0af6dc010e2dc4" +ts-jest@^21.2.4: + version "21.2.4" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-21.2.4.tgz#8fbcfbfbf0c58cced10dcc34a5190acc8c5312ef" dependencies: - "@types/babel-core" "^6.7.14" babel-core "^6.24.1" babel-plugin-istanbul "^4.1.4" babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-preset-jest "^20.0.3" - fs-extra "^4.0.0" - jest-config "^20.0.0" - jest-util "^20.0.0" + babel-preset-jest "^21.2.0" + cpx "^1.5.0" + fs-extra "^4.0.2" + jest-config "^21.2.1" pkg-dir "^2.0.0" - source-map-support "^0.4.4" - yargs "^8.0.1" + source-map-support "^0.5.0" + yargs "^10.0.3" tsc-watch@1.0.7: version "1.0.7" @@ -3272,8 +3711,8 @@ tsc-watch@1.0.7: typescript "*" tslib@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.7.1.tgz#bc8004164691923a79fe8378bbeb3da2017538ec" + version "1.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.8.1.tgz#6946af2d1d651a7b1863b531d6e5afa41aa44eac" tslint-react@3.2.0: version "3.2.0" @@ -3297,8 +3736,8 @@ tslint@5.5.0: tsutils "^2.5.1" tsutils@^2.5.1, tsutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.8.0.tgz#0160173729b3bf138628dd14a1537e00851d814a" + version "2.13.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.13.0.tgz#0f52b6aabbc4216e72796b66db028c6cf173e144" dependencies: tslib "^1.7.1" @@ -3322,13 +3761,13 @@ type-name@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" -typescript@*, typescript@2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844" +typescript@*, typescript@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" ua-parser-js@^0.7.9: - version "0.7.14" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca" + version "0.7.17" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-js@^2.6: version "2.8.29" @@ -3340,16 +3779,24 @@ uglify-js@^2.6: uglify-to-browserify "~1.0.0" uglify-js@^3.0.9: - version "3.0.27" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.27.tgz#a97db8c8ba6b9dba4e2f88d86aa9548fa6320034" + version "3.2.2" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.2.tgz#870e4b34ed733d179284f9998efd3293f7fd73f6" dependencies: - commander "~2.11.0" - source-map "~0.5.1" + commander "~2.12.1" + source-map "~0.6.1" uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" + underscore@~1.8.3: version "1.8.3" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" @@ -3372,6 +3819,10 @@ unified@^4.1.1: trough "^1.0.0" vfile "^1.0.0" +unist-util-is@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" + unist-util-remove-position@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz#5a85c1555fc1ba0c101b86707d15e50fa4c871bb" @@ -3379,8 +3830,10 @@ unist-util-remove-position@^1.0.0: unist-util-visit "^1.1.0" unist-util-visit@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.1.3.tgz#ec268e731b9d277a79a5b5aa0643990e405d600b" + version "1.3.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.3.0.tgz#41ca7c82981fd1ce6c762aac397fc24e35711444" + dependencies: + unist-util-is "^2.1.1" universal-promise@^1.0.1: version "1.1.0" @@ -3404,7 +3857,7 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -uuid@^3.0.0, uuid@^3.0.1: +uuid@^3.0.0, uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" @@ -3432,8 +3885,8 @@ vfile@^1.0.0: resolved "https://registry.yarnpkg.com/vfile/-/vfile-1.4.0.tgz#c0fd6fa484f8debdb771f68c31ed75d88da97fe7" vlq@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.2.tgz#e316d5257b40b86bb43cb8d5fea5d7f54d6b0ca1" + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" walker@~1.0.5: version "1.0.7" @@ -3447,23 +3900,26 @@ warning@^3.0.0: dependencies: loose-envify "^1.0.0" -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" webidl-conversions@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" dependencies: - iconv-lite "0.4.13" + iconv-lite "0.4.19" whatwg-fetch@>=0.10.0: version "2.0.3" @@ -3476,10 +3932,6 @@ whatwg-url@^4.3.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -3490,20 +3942,22 @@ which@^1.2.10, which@^1.2.12, which@^1.2.9: dependencies: isexe "^2.0.0" -widest-line@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: - string-width "^1.0.1" + string-width "^1.0.2" + +widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + dependencies: + string-width "^2.1.1" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -3517,8 +3971,8 @@ wordwrap@~1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" worker-farm@^1.3.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.4.1.tgz#a438bc993a7a7d133bcb6547c95eca7cff4897d8" + version "1.5.2" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" dependencies: errno "^0.1.4" xtend "^4.0.1" @@ -3534,6 +3988,14 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" @@ -3550,65 +4012,38 @@ yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" dependencies: camelcase "^4.1.0" -yargs@^4.7.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" +yargs-parser@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6" dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" + camelcase "^4.1.0" -yargs@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" +yargs@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" dependencies: - camelcase "^3.0.0" cliui "^3.2.0" decamelize "^1.1.1" + find-up "^2.1.0" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^5.0.0" + yargs-parser "^8.0.0" -yargs@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" +yargs@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" dependencies: camelcase "^4.1.0" cliui "^3.2.0"